Определение сопоставления в режиме вставки, которое работает только с определенным типом файла

#vim

#vim

Вопрос:

Я должен это знать, но сейчас у меня в голове пусто… долгая ночь…

Как определить сопоставление, которое активно только тогда, когда активен определенный тип файла (скажем, markdown, и я хочу определить сопоставление / сокращение для вставки скобок] [поскольку у меня их нет на клавиатуре в моей языковой раскладке)?

Ответ №1:

Чтобы определить сопоставление, эффективное только в буферах, имеющих определенное filetype значение, можно использовать комбинацию автокоманды типа файла (см. :help
autocmd
, :help FileType ) и локального сопоставления (см. :help map-local ).

 :autocmd FileType markdown inoremap <buffer> (( [
:autocmd FileType markdown inoremap <buffer> )) ]
  

Комментарии:

1. Цифры, это должно было быть что-то очень простое 😉 Спасибо ib.!

Ответ №2:

Первым, обязательным шагом действительно является определение локальных сопоставлений буфера с :h :map-<buffer> помощью as ib сказал.

Тогда у вас есть выбор. Вы можете :

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

Первый подход хорош, когда мы используем vim только для нескольких языков / типов файлов и когда у нас очень мало сопоставлений / команд / сокращений /… Первые пару лет в Vim все в порядке. После определенного количества настроек, специфичных для ft, предпочтительным является второе решение.

(Кстати, эта тема является дубликатом, но мне сейчас лень искать другие сообщения)

Ответ №3:

Добавьте, где это уместно (например ~/.vimrc ):

 au FileType markdown inoremap <C-b> [
  

Комментарии:

1. Команда работает не так, как вы, вероятно, ожидаете. Как только буфер с markdown типом файла открыт, он определяет глобальное сопоставление, которое работает для любого буфера даже после закрытия этого файла Markdown !

2. @ib Спасибо, забыл об этом. (Я делаю эту ошибку довольно регулярно в моем собственном ~/.vimrc).