Atalhos de tipo de arquivo no vim

0

Eu adicionei 4 linhas a seguir ao meu arquivo vimrc para adicionar atalhos (para executar o buffer atual * .html no navegador e para executar o arquivo * .js atual no nó):

autocmd filetype html map <C-S-F10> :sav %<CR>:! chromium-browser %<Enter>
autocmd filetype html inoremap <C-S-F10> <Esc>:sav %<CR>:! chromium-browser %<Enter>
autocmd filetype javascript map <C-S-F10> :sav %<CR>:! node %<Enter>
autocmd filetype javascript inoremap <C-S-F10> <Esc>:sav %<CR>:! node %<Enter>

Ele funciona bem quando eu tenho apenas arquivos html ou apenas arquivos JavaScript abertos. Mas quando eu tenho qualquer combinação desses tipos de arquivos abertos em diferentes buffers (usando abas) e quer abrir o arquivo HTML no navegador e pressione Ctrl + Mudança + F10 meu arquivo HTML vai para o Node, que gera erro de compilação.

Progresso:

Quando eu digito :set filetype diz html para * .html e javascript para arquivos * .js. Portanto, o problema não está no tipo de arquivo impróprio.

Tentei definir Alt + Mudança + F10 atalho para abrir no navegador e que de alguma forma resolve o meu problema. Agora, quando os dois tipos de arquivos mais os arquivos sem o tipo de arquivo estiverem abertos ao mesmo tempo, posso abrir qualquer tipo de arquivo (html, js e plain text) no navegador com Alt + Mudança + F10 e enviá-lo para o Node para compilar com Ctrl + Mudança + F10 . Por que isso acontece?

Aqui meu vimrc Arquivo. Versão do Vim é 7.4

Alexander
fonte

Respostas:

0

É melhor adicionar plug-ins de tipo de arquivo à seção posterior do diretório de tempo de execução do vim do usuário e definir seus mapeamentos sem usar autocmd.

Por exemplo, em ~/.vim/after/ftplugin/html.vim você colocaria seus mapeamentos HTML e ~/.vim/after/ftplugin/javascript.vim para mapeamentos JavaScript.

No entanto, isso não resolverá seu problema. Você precisa fazer o seu buffer local de mapeamentos. Tente isso, para buffers de HTML:

map <buffer> <C-S-F10> :sav %<CR>:! chromium-browser %<Enter>
inoremap <buffer> <C-S-F10> <Esc>:sav %<CR>:! chromium-browser %<Enter>

E isso, para buffers de JavaScript:

map <buffer> <C-S-F10> :sav %<CR>:! node %<Enter>
inoremap <buffer> <C-S-F10> <Esc>:sav %<CR>:! node %<Enter>

Vejo:

:help :map-local
Heptite
fonte
Obrigado, sua solução funcionou. "É melhor você adicionar plug-ins de tipo de arquivo à seção posterior do diretório de tempo de execução do vim do usuário" - quais são as vantagens, exceto não o arquivo vimrc de inchaço que ele fornece? Eu achei mais conveniente ter toda a minha configuração em um só lugar.
Alexander
Principalmente, você sabe com certeza que seus mapeamentos serão definidos depois que todo o material do sistema tiver sido originado, então o seu pode substituir o material do sistema onde necessário. Se você usar um autocmd, não há garantia de que isso acontecerá nessa ordem (e, de fato, provavelmente não acontecerá).
Heptite