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

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

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.