猛砸替代自动命令
这里就是我想要的bash做的,首先在伪,然后在bash,据我已经得到了,那么错误:猛砸替代自动命令
“我想要什么”伪
If a file is saved in the "Cover Letters" directory with a filename ending in "md":
run a Bash command like:
pandoc [FILENAME] -o [FILENAME].replace(".md",".pdf") -s -S
我已经走到这一步,
:autocmd BufWritePost ~/Dropbox/Professional/Covers/*.md pandoc % -o ${%/md/pdf} -s -S
此代码正确识别时,被保存在“MD”的文件在Dropbox文件夹中,然后运行一个包含文件名的命令。但是,命令出错:
"test.md" 1L, 6C written
:!pandoc test.md -o ${test.md/md/pdf} -s -S
/bin/bash: ${test.md/md/pdf}: bad substitution
shell returned 1
我的替换出了什么问题?我觉得像我这么近......
编辑:当前版本:
autocmd BufWritePost ~/Dropbox/Professional/Covers/*.md #!star='~/Dropbox/Professional/Covers/'% && fin=${star/md/pdf} && p andoc star -o fin -s -S
这是你在找什么:
#!/bin/bash
function pandocfn()
{
pandoc "${1}" -o "${1/%\.md/.pdf}"
}
export -f pandocfn
find ~/Dropbox/Professional/Covers -type f -iname "*.md" -exec \
bash -c 'pandocfn "$1"' _ {} \;
保存脚本作为脚本说script.sh
内~/Dropbox/Professional/Covers
,做chmod +x script.sh
并从内部vim
做
: ! ./script.sh
如果保存比~/Dropbox/Professional/Covers
其他一些位置的脚本,然后做
: ! full/path/to/script.sh
请参阅shell参数[ expansion ]。
这是一个真正的noobie问题,但我在哪里可以保存该.sh文件被vim调用?我已经尝试编写我自己的.sh脚本,并让vim尝试执行它,但我无法弄清楚它保存在哪里。 –
@Iroh:请参阅如何在vim中运行脚本的更新程序,它可以为您节省大量时间,并在其工作时接受答案:) – sjsam
最后得到了一个可行的版本:
autocmd BufWritePost ~/Dropbox/Professional/Covers/*.md !star='%' && fin=${star/md/pdf} && pandoc $star -o $fin -s -S
非常基本的bash错误,看起来像。谢谢sjsam的帮助!
'fin = $ {star/md/pdf}'=> 'fin = $ {star /%。md/.pdf}'因为你正在寻找扩展名'md'而不是'mdfile'。ext'和'pandoc $ star -o $ fin' =>'pandoc“$ star”-o“$ fin”'(这里,双引号的变量不会造成伤害,这也会帮助您适应非标准的文件名) – sjsam
我已经回答了类似问题[\ [here \]](http://*.com/a/38671667/1620779)。请参阅函数中的替代部分,这正是您所需要的。 – sjsam
谢谢,是否替换只适用于变量而不是字符串?我不知道如何让Vim执行一个多行bash脚本(而不是一行代码)。 –
$ {test.md/md/pdf}有什么问题? –