Как автоматически сменить BufWritePost с CoffeeScript на каталог? - PullRequest
2 голосов
/ 23 июля 2011

Я использую этот плагин vim для coffeescript , и я хочу сохранить все мои исходные файлы в /src/, даже если скомпилированные файлы могут находиться в другом месте, например / или /public/js.

Я знаю, что vim может автоматически сохранять в каталог current , используя следующее (в .vimrc):

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').'/../'

... если вы хотели это в корне вашего веб-приложения.

Ответы [ 2 ]

4 голосов
/ 23 июля 2011

Попробуйте следующую команду.

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

Имя файла, соответствующего автокоманде, можно определить с помощью <afile> cmdline-специальная переменная. Чтобы извлечь его значение в выражении, используйте функцию expand(). Дополнительные модификаторы позволяют извлечь полностью путь и удалите расширение файла (см. :help expand()).

0 голосов
/ 02 января 2013

Если у вас есть приложение с такой файловой структурой (или любая другая структура с другим именем каталога):

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

...