Чи можете ви мати прив'язки клавіш для конкретного типу файлів у Vim?


79

У моєму .vimrcфайлі у мене є прив'язка ключа для коментування, яка вставляє подвійні скісні риски ( //) на початку рядка:

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

Однак, коли я редагую сценарії Python, я хочу змінити це на # знак для коментарів

У Python.vimмоїй .vim/ftdetectпапці є файл, який також має налаштування ширини вкладок і т. Д. Який код замінює прив'язку клавіш, якщо це можливо, щоб я використовував Python:

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

Відповіді:


64

Папка ftdetect призначена для скриптів виявлення типів файлів. Плагіни Filetype повинні знаходитися всередині папки ftplugin. Тип файлу повинен бути включений в ім'я файлу в одній із наступних трьох форм:

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

Наприклад, ви можете зіставити коментарі для типу файлу cpp, помістивши всередину .../ftplugin/cpp_mine.vim:

:map <buffer> <C-G> :s/^/\/\//<Esc><Esc>
:map <buffer> <C-T> :s/\/\/// <Esc><Esc>

6
Ви забули <buffer>частину.
Люк Ермітт,

1
Ваша відповідь вирішує дві мої проблеми - відображення на тип файлу та те, як коментувати поточний рядок зіставленням. Чудово!
передати

84

Ви можете використовувати :map <buffer> ...для створення локального відображення лише для активного буфера. Для цього потрібно, щоб ваш Vim був скомпільований з +localmap.

Тож ви можете зробити щось на зразок

autocmd FileType python map <buffer> <C-G> ...

9

Я вважаю за краще мати свою конфігурацію в одному файлі, тому використовую підхід 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 не очищає встановлені autocmds під час отримання джерела vimrc, тому запуск vim, зміна чогось у вашому vimrcта запуску :so ~/.vimrcвизначатимуть autocmds двічі. Ось чому прив’язки групуються та очищаються autocmd! group_name. Детальніше ви можете прочитати тут .

Оскільки зіставлення застосовуються до кожного буфера за замовчуванням, і ви хочете змінити їх для буферів, що відповідають лише типу файлу, <buffer>модифікатор є там, обмежуючи відображення локальним буфером.


4

До речі ... якщо ваша основна проблема пов’язана з коментуванням ... вам слід перевірити плагін „nerdcommenter“, це найшвидший спосіб коментувати / розкомментирувати свій код у java / c / c ++ / python / dos_batch_file / тощо тощо.


1
Я був дуже задоволений YAATPP * github.com/tpope/vim-commentary * -> Ще один дивовижний плагін Тіма Попа
patrickdavey

0

Я рекомендую .../ftplugin/<filetype>.vimпідхід, який пропонує фрітас, але у вашому конкретному випадку Vim Commentary вирішить усе це за вас.


-1

Це лише часткову відповідь для людей , які приїжджають сюди , що зазнають труднощів отримувати будь-які ftplugin скрипти працюють, але пам'ятайте , що ваш .vimrc (або файл , що джерела) повинні містити

filetype plugin on

або

:filetype plugin on

для плагінів filetype, які будуть виконуватися при завантаженні файлу певного типу.


Щойно помітив деякі проти. З
радістю редагую
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.