Можно ли использовать в 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 предназначена для скриптов определения типов файлов. Плагины типа файла должны находиться внутри папки 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 не сбрасывает автоматические команды при vimrcзапуске, поэтому при запуске vim, изменении чего-либо в вашем vimrcи запуске :so ~/.vimrcautocmds будут определены дважды. Вот почему привязки сгруппированы и очищены с помощью autocmd! group_name. Вы можете узнать больше здесь .

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


4

Кстати ... если ваша основная проблема связана с комментированием ... вам следует проверить плагин 'nerdcommenter', это самый быстрый способ прокомментировать / раскомментировать ваш код в java / c / c ++ / python / dos_batch_file / etc и т. Д.


1
Я был очень доволен YAATPP * github.com/tpope/vim-commentary * -> Еще один удивительный плагин Tim Pope
patrickdavey


-1

Это лишь частичный ответ для людей, которые приезжают сюда и испытывают трудности с работой каких- либо скриптов ftplugin, но помните, что ваш .vimrc (или исходный файл) должен содержать

filetype plugin on

или же

:filetype plugin on

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


Только что заметил несколько голосов против. Рад редактировать или удалять соответственно, но сначала мне нужно узнать причину: /
koyae 02
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.