Заставить команды работать только для выбранных типов файлов

Я хочу сопоставить F2 для компиляции текстовых файлов и F3 для просмотра текстовых файлов.

Это то, что я положил в .vimrc:

if &filetype == "tex"
nnoremap <F2> :Latexmk<cr>
inoremap <F2> <Esc>:Latexmk<cr>a
nnoremap <F3> :LatexView<cr>
inoremap <F3> <Esc>:LatexView<cr>a
endif

Эти Latex* Команды из плагина LaTeX-Box. Я могу выполнить их вручную без проблем. Typing :echo &filetype в любом *.tex файле возвращается tex,

2 ответа

Решение

У вас есть два метода...

  • Создайте самоочищающуюся группу в своем vimrc и добавьте столько автокоманд по мере необходимости:

    augroup Tex
        autocmd!
        autocmd FileType tex nnoremap <buffer> <F2> :Latexmk<cr>
        autocmd FileType tex nnoremap <buffer> <F3> :LatexView<cr>
        autocmd FileType tex inoremap <buffer> <F2> <Esc>:Latexmk<cr>a
        autocmd FileType tex inoremap <buffer> <F3> <Esc>:LatexView<cr>a
    augroup END
    
  • Используйте ftplugin:

    Поместите следующее в after/ftplugin/tex.vim:

    nnoremap <buffer> <F2> :Latexmk<cr>
    nnoremap <buffer> <F3> :LatexView<cr>
    inoremap <buffer> <F2> <Esc>:Latexmk<cr>a
    inoremap <buffer> <F3> <Esc>:LatexView<cr>a
    

Второй метод рекомендуется, потому что он намного чище и дешевле, чем первый.

Я заменил код выше с этим:

autocmd FileType tex nnoremap <buffer> <F2> :Latexmk<cr>
autocmd FileType tex nnoremap <buffer> <F3> :LatexView<cr>
autocmd FileType tex inoremap <buffer> <F2> <Esc>:Latexmk<cr>a
autocmd FileType tex inoremap <buffer> <F3> <Esc>:LatexView<cr>a
Другие вопросы по тегам