Возможно ли иметь сопоставление клавиш для каждого типа файла в Vim?

Возможно ли иметь сопоставление клавиш для каждого типа файла в Vim?

Недавно я обнаружил, что когда вы входите внеразрывный пробел(nbsp)в HTML-документе
и установите encodingзначение utf-8, вам не придется вводить его nbsp;несколько раз для форматирования текста. Сначала я
подумал, эй, почему бы мне не сопоставить это с пробелом, как это так :imap <SPACE> <C-R>=nr2char(160)<CR>.
Позже я отредактировал свой .vimrcи, когда я перезапустил Vim, я получил дюжину ошибок о том, что какой-то функции нужно
имя, хотя я его и дал. Я понял, что nbspне рассматривается как пробел (ну да), хотя выглядит
как пробел. Поэтому я подумал, что лучшим способом было бы иметь сопоставление для каждого типа файла, так что когда я редактирую HTML-документ, пробел вставляет nbspи обычный пробел chr(32)при редактировании любого другого файла.
Как мне это сделать?

решение1

Команда au[tocommand]принимает FileTypeсобытие, которое запускается, когда filetypeбыло установлено (например, при запуске с именем файла). Например, в ~/.vimrc:

au Filetype python source ~/.vim/scripts/python.vim

решение2

Вы можете использовать плагины типа файла, которые получают источник только тогда, когда файл имеет определенный тип файла. Чтобы настроить это, создайте файл ~/.vim/ftplugin/html.vimи поместите свои команды в этот файл. Если файл уже есть, вы можете создать каталог с именем html, и тогда каждый файл в каталоге будет источником. Посмотрите на:h ftplugin-nameдля других вариантов именования. (Если каталоги не существуют, создайте их)

Все, что вам нужно иметь в вашем vimrc, это filetype plugin indent on(indent на самом деле не обязателен для этого, но обычно полезен).

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

map <buffer>

Также может быть полезно просмотреть :h ftpluginи:h filetype

Связанный контент