如何使用CoffeeScript在目录中自动显示BufWritePost?

问题描述 投票:3回答:2

我正在使用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应用程序的根目录中使用它。

vim coffeescript
2个回答
5
投票

尝试以下命令。

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

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


1
投票

如果您的应用具有这样的文件结构(或其他具有不同目录名的结构):

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

© www.soinside.com 2019 - 2024. All rights reserved.