Executar o comando bash ao escrever um arquivo com uma extensão específica?

7

Quero executar um comando bash na gravação de um .lessarquivo, salvando-o e gerando o .cssarquivo correspondente com o mesmo nome e no mesmo diretório. Eu tenho o comando bash que gera o .cssarquivo.

Eu não estou acostumado ao vimscript, exceto para trabalhar com o vim e alterar algumas coisas no meu .vimrc, por isso não tenho certeza de como fazer isso funcionar.

Resumindo:

  • Como executo um comando bash :w?
  • Como obtenho o diretório de arquivo atual (vimscript ou bash)?
  • Como obtenho o nome do arquivo atual (vimscript ou bash)?
oddRaven
fonte
Não faça isso no Vim, use um observador como Grunt / Brunch / Gulp.
Romainl

Respostas:

11

Você pode usar comandos automáticos para executar coisas automaticamente quando certos eventos ocorrem. No seu caso, você pode fazer isso:

autocmd BufWritePost *.less !less <afile>

Esse comando automático é executado sempre que um buffer com um nome que termina em .lessé gravado. O comando que está sendo executado é um comando bash e <afile>é o nome do arquivo que está sendo gravado. Essencialmente, o !comando permite executar comandos bash no vim.

Tópicos de ajuda relevantes:

  • :help :autocmd
  • :help BufWritePost
  • :help :!
  • :help <afile>

NOTA

O Vim não atualiza automaticamente a tela quando um comando bash é executado. Consulte a resposta abaixo para obter informações sobre isso: Suprimir a saída de um autocomand do vim

EvergreenTree
fonte