我正在使用this vim plugin for coffeescript,我希望将所有源文件保留在/src/
中,即使已编译的文件可能位于其他位置,例如/
或/public/js
。< / p>
我知道我可以使用以下内容(在.vimrc
中)将vim自动保存到当前目录:
autocmd BufWritePost *.coffee silent CoffeeMake!
但我无法弄清楚如何在每个文件的基础上更改它。我正在尝试做这样的事情:
:autocmd BufWritePost server.coffee silent CoffeeMake! -o ../server.js
但是当我这样做时(当我保存我的咖啡文件时)没有任何反应:没有创建新文件,也没有抛出任何错误。
如果我可以为文件名指定一个占位符,我也会喜欢它,就像这样(如果这种情况接近正确,则不知道):
:autocmd BufWritePost @%.coffee silent CoffeeMake! -o ../@%.js
任何人都可以帮助我以我想要的方式完成这项工作吗?
编辑:Coffee希望-o
param只是目录(而不是文件),所以最终解决方案应该是
:autocmd BufWritePost *.coffee silent execute 'CoffeeMake! -o '.expand('<afile>:p:h').'/../'
...如果你想在你的网络应用程序的根目录中使用它。
答案 0 :(得分:4)
尝试以下命令。
:autocmd BufWritePost *.coffee
\ silent execute 'CoffeeMake! -o '.
\ expand('<afile>:p:h').'/../'.expand('<afile>:t:r').'js'
可以使用以下命令确定与自动命令匹配的文件的名称
<afile>
cmdline特殊变量。要在表达式中提取其值,
使用expand()
函数。其他修饰符允许提取完整
路径,并删除文件扩展名(请参阅:help expand()
)。
答案 1 :(得分:0)
如果您的应用程序具有这样的文件结构(或具有不同目录名称的任何其他结构):
app --
coffee --
module1 --
..files
module2 --
..files
js --
module1 --
..files
module2 --
..files
您可能也想考虑这个问题:
autocmd BufWritePost,FileWritePost *.coffee silent execute 'CoffeeMake! -o '.expand('%:p:h:s?coffee?js?')
最后一位:s?coffee?js?
替换了保存路径中coffee
的{{1}}首次出现
更多信息:js