Use plug-in único para mais de um tipo de arquivo

10

Eu tenho um plug-in no &runtimepath/ftplugin/c.vimqual define todas as minhas opções preferidas para arquivos c. No entanto, eu também gostaria de usar as mesmas configurações para cpparquivos. Eu poderia simplesmente copiar as configurações, mas isso parece redundante. Existe uma maneira de carregar um ftplugin para mais de um tipo de arquivo?

EvergreenTree
fonte

Respostas:

10

O ftplugin padrão ( /usr/share/vim/vim74/ftplugin/cpp.vimno meu sistema) já deve fazer isso:

" Only do this when not done yet for this buffer
if exists("b:did_ftplugin")
  finish
endif

" Behaves just like C
runtime! ftplugin/c.vim ftplugin/c_*.vim ftplugin/c/*.vim

runtimedeve ser relativo ao runtimepath:

Pode haver vários {file}argumentos, separados por espaços. Cada um {file}é pesquisado no primeiro diretório de 'runtimepath', depois no segundo diretório, etc.

Se eu criar um ~/.vim/ftplugin/c.vim, isso também será executado para arquivos C ++ sem fazer nada!

Se você não tiver esse arquivo na sua versão do Vim, poderá criar um novo ~/.vim/ftplugin/cpp.vimarquivo com a runtime!instrução


Ou, se você estiver em um sistema UNIX-y, poderá usar um link simbólico:

$ ln -s ~/.vim/ftplugin/c.vim ~/.vim/ftplugin/cpp.vim
Martin Tournoij
fonte
Ah, eu não percebi isso! Boa observação. Eu usaria a solução de tempo de execução se precisasse disso para outros tipos de arquivos.
EvergreenTree
1

Dentro do cpp.vim, coloque:

source <sfile>:h/c.vim

<sfile>expande para o arquivo de origem atualmente e :hsignifica o cabeçalho dele.

run_the_race
fonte
Não há nada a se fazer. Como Martin explicou, os plugins C ft são fornecidos automaticamente para os buffers C ++
Luc Hermitte
Mais para outros leitores, por exemplo, make .scss manipulado da mesma forma que .css etc.
run_the_race
Então, a menos que você queira carregar um arquivo muito específico, IMO, :runtime! ftplugin/css*.vim ftplugin/css/*.vimseria uma solução melhor.
Luc Hermitte