我正在使用this vim plugin for coffeescript,并且即使编译后的文件可能位于其他地方,例如/src/
或/
,我也希望将所有源文件都保留在/public/js
中。
我知道我可以使用以下命令(在.vimrc
中将vim自动保存到current目录:
autocmd BufWritePost *.coffee silent CoffeeMake!
但是我不知道如何针对每个文件进行更改。我正在尝试做这样的事情:
:autocmd BufWritePost server.coffee silent CoffeeMake! -o ../server.js
但是当我这样做时(保存咖啡文件时),没有任何反应:没有创建新文件,也没有抛出任何错误。
如果我可以为文件名指定一个占位符,我也喜欢它(像这样(如果这几乎是正确的,就不知道了:]]
:autocmd BufWritePost @%.coffee silent CoffeeMake! -o ../@%.js
任何人都可以按照我想要的方式帮助我完成这项工作吗?
编辑:Coffee希望-o
参数只是目录(而不是文件),所以最终的解决方案应该是
:autocmd BufWritePost *.coffee silent execute 'CoffeeMake! -o '.expand('<afile>:p:h').'/../'
...,如果您希望在Web应用程序的根目录中使用它。
尝试以下命令。
:autocmd BufWritePost *.coffee
\ silent execute 'CoffeeMake! -o ' .
\ expand('<afile>:p:h') . '/../' . expand('<afile>:t:r') . 'js'
可以确定与自动命令匹配的文件的名称使用<afile>
cmdline-special变量。提取其价值表达式,请使用expand()
函数。其他修饰符允许提取完整路径或删除文件扩展名(请参见:help expand()
)。
如果您的应用具有这样的文件结构(或其他具有不同目录名的结构):
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
的首次出现替换为js
更多信息::help filename-modifiers