如何使用CoffeeScript自动将BufWritePost映射到目录?

nee*_*zer 3 vim coffeescript

我正在使用该vim插件编写coffeescript/src/即使编译的文件可能位于其他地方(如/或),我也希望保留所有源文件/public/js

我知道我可以使用以下命令(在中)将vim自动保存到当前目录.vimrc

autocmd BufWritePost *.coffee silent CoffeeMake!
Run Code Online (Sandbox Code Playgroud)

但我不知道如何在每个文件的基础上进行更改。我正在尝试做这样的事情:

:autocmd BufWritePost server.coffee silent CoffeeMake! -o ../server.js
Run Code Online (Sandbox Code Playgroud)

但是,当我执行此操作(保存咖啡文件时)时,没有任何反应:不会创建任何新文件,也不会抛出任何错误。

如果可以为文件名指定一个占位符,我也喜欢它(像这样(如果这几乎是正确的,就不知道了)):

:autocmd BufWritePost @%.coffee silent CoffeeMake! -o ../@%.js
Run Code Online (Sandbox Code Playgroud)

谁能帮我按我想要的方式进行这项工作?


编辑:Coffee希望-o参数只是目录(而不是文件),因此最终的解决方案应该是

:autocmd BufWritePost *.coffee silent execute 'CoffeeMake! -o '.expand('<afile>:p:h').'/../'
Run Code Online (Sandbox Code Playgroud)

...如果您想在Web应用程序的根目录中使用它。

ib.*_*ib. 5

请尝试以下命令。

:autocmd BufWritePost *.coffee
\   silent execute 'CoffeeMake! -o '.
\   expand('<afile>:p:h').'/../'.expand('<afile>:t:r').'js'
Run Code Online (Sandbox Code Playgroud)

可以使用<afile>cmdline-special变量确定与自动命令匹配的文件名 。要在表达式中提取其值,请使用expand()函数。其他修饰符允许提取完整路径,并删除文件扩展名(请参阅参考资料:help expand())。