Czy możesz mieć przypisania klawiszy specyficzne dla typów plików w Vimie?

79

W moim .vimrcpliku mam przypisanie klawisza do komentowania, które wstawia podwójne ukośniki ( //) na początku wiersza:

" the mappings below are for commenting blocks of text
:map <C-G> :s/^/\/\//<Esc><Esc>
:map <C-T> :s/\/\/// <Esc><Esc>

Jednak kiedy edytuję skrypty Pythona, chcę to zmienić na # znak komentarza

Mam Python.vimplik w swoim .vim/ftdetectfolderze, który ma również ustawienia szerokości tabulatorów itp. Jaki jest kod, aby przesłonić skróty klawiszowe, jeśli to możliwe, aby użyć Pythona:

" the mappings below are for commenting blocks of text
:map <C-G> :s/^/#/<Esc><Esc>
:map <C-T> :s/#/ <Esc><Esc>
James
źródło

Odpowiedzi:

64

Folder ftdetect jest przeznaczony do skryptów wykrywających typy plików. Wtyczki typu pliku muszą znajdować się w folderze ftplugin. Typ pliku musi być zawarty w nazwie pliku w jednej z trzech następujących form:

  • .../ftplugin/<filetype>.vim
  • .../ftplugin/<filetype>_foo.vim
  • .../ftplugin/<filetype>/foo.vim

Na przykład możesz zamapować komentarze na typ pliku cpp, umieszczając następujące elementy wewnątrz .../ftplugin/cpp_mine.vim:

:map <buffer> <C-G> :s/^/\/\//<Esc><Esc>
:map <buffer> <C-T> :s/\/\/// <Esc><Esc>
freitass
źródło
6
Zapomniałeś o <buffer>części.
Luc Hermitte
1
Twoja odpowiedź rozwiązuje dwa z moich problemów, mapowania według typu pliku i jak skomentować bieżący wiersz za pomocą mapowania. Świetny!
rendon
84

Możesz użyć, :map <buffer> ...aby wykonać lokalne mapowanie tylko dla aktywnego bufora. Wymaga to kompilacji Twojego Vima +localmap.

Więc możesz zrobić coś takiego

autocmd FileType python map <buffer> <C-G> ...
hammar
źródło
9

Wolę mieć konfigurację w jednym pliku, więc używam podejścia autocmd.

augroup pscbindings
  autocmd! pscbindings
  autocmd Filetype purescript nmap <buffer> <silent> K :Ptype<CR>
  autocmd Filetype purescript nmap <buffer> <silent> <leader>pr :Prebuild!<CR>
augroup end

Vim nie czyści ustawionych autocmds podczas pozyskiwania swojego źródła vimrc, więc uruchomienie Vima , zmiana czegoś w twoim vimrci uruchomienie :so ~/.vimrczdefiniowałoby autocmds dwukrotnie. Dlatego powiązania są grupowane i usuwane za pomocą autocmd! group_name. Możesz przeczytać więcej tutaj .

Ponieważ mapowania są domyślnie stosowane do każdego bufora i chcesz je zmienić dla buforów pasujących tylko do typu pliku, <buffer>modyfikator tam jest, ograniczając mapowania do buforu lokalnego.

alextes
źródło
4

Przy okazji ... jeśli Twoim głównym problemem jest komentowanie ... powinieneś wypróbować wtyczkę `` nerdcommenter '', jest to najszybszy sposób komentowania / odkomentowywania kodu w java / c / c ++ / python / dos_batch_file / etc itd.

TIK Tak
źródło
1
Jestem bardzo zadowolony z YAATPP * github.com/tpope/vim-commentary * -> Yet Another Amazing Tim Pope Plugin
patrickdavey
0

Polecam .../ftplugin/<filetype>.vimpodejście, które sugeruje freitass, ale w Twoim przypadku Vim Commentary rozwiąże to wszystko za Ciebie.

Finlay McAfee
źródło
-1

To jest tylko częściowa odpowiedź dla osób, które tu przyjeżdżają i mają trudności z uruchomieniem jakichkolwiek skryptów ftplugin, ale pamiętaj, że plik .vimrc (lub plik, którego źródła) powinien zawierać

filetype plugin on

lub

:filetype plugin on

aby wtyczki typu pliku były wykonywane, gdy ładowany jest plik danego typu.

koyae
źródło
Właśnie zauważyłem kilka głosów przeciw. Z przyjemnością odpowiednio
edytuję