如何使用CoffeeScript autocmd BufWritePost vim up目录?

时间:2011-07-23 01:14:39

标签: vim coffeescript

我正在使用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').'/../'

...如果你想在你的网络应用程序的根目录中使用它。

2 个答案:

答案 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