Подтвердить что ты не робот

Можете ли вы иметь привязки к конкретному типу файла в 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>
4b9b3361

Ответ 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> находится там, ограничивая сопоставления локальным буфером.