Можете ли вы иметь привязки к конкретному типу файла в Vim?
В моем файле .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>
Ответы
Ответ 1
Папка 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>
Ответ 2
Вы можете использовать :map <buffer> ...
для локального сопоставления только для активного буфера. Это требует, чтобы ваш Vim был скомпилирован с помощью +localmap
.
Итак, вы можете сделать что-то вроде
autocmd FileType python map <buffer> <C-G> ...
Ответ 3
Btw... если ваша основная проблема заключается в комментировании... вы должны проверить плагин "nerdcommenter", это самый быстрый способ комментировать/раскомментировать ваш код в java/c/С++/python/dos_batch_file/etc и т.д.
Ответ 4
Это только частичный ответ для людей, приходящих сюда, испытывающих трудности с работой любых скриптов ftplugin, но помните, что ваш .vimrc (или файл, который он содержит) должен содержать
filetype plugin on
или же
:filetype plugin on
чтобы плагины filetype выполнялись при загрузке файла данного типа.
Ответ 5
Я предпочитаю, чтобы моя конфигурация была в одном файле, поэтому я использую подход 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 не очищает set autocmds, когда вы создаете исходный код vimrc
, поэтому запустите vim, измените что-то в вашем vimrc
и запустите :so ~/.vimrc
определит autocmds дважды. Вот почему привязки группируются и очищаются с помощью autocmd! group_name
autocmd! group_name
Вы можете прочитать больше здесь.
Поскольку сопоставления применяются к каждому буферу по умолчанию, и вы хотите изменить их для буферов, соответствующих только типу файла, модификатор <buffer>
находится там, ограничивая сопоставления локальным буфером.