Эти команды каким-то образом преобразуют один набор нажатий клавиш в другой, но я не совсем понимаю, какой из них наиболее подходит для некоторой ситуации. Кроме того, есть !
варианты их. На данный момент я использую их довольно случайно, поэтому я могу знать, с какими подводными камнями связан каждый из них? В частности, заметки о различных версиях режима могут быть полезны, так как я узнал от Питера Ринкера в комментарии, который cmap
может расширяться практически везде в строке, а не только при использовании :
команд. Какие меры предосторожности я могу предпринять против потенциальных ловушек?
19
Ответы:
Во- первых,
map
иnoremap
похожи в том , что каждый создания отображений для нормальной, визуальный, выберите и оператор в ожидании режима одновременно . Vim детализирует это в:help map-overview
:Согласно приведенной выше справке, если вы хотите ограничить сопоставление определенным режимом, вы должны добавить:
'n' (для обычного), 'v' (для визуального и выберите), 'c' (для команды), 'x' (для визуального режима), 's' (для выбора), 'o' (для ожидающего оператора ).
Например,
nmap n nzz
создаст нормальный режим рекурсивного отображения
n
.Теперь
noremap
это просто нерекурсивная версияmap
.Так что же такое нерекурсивное отображение? У Vim тоже есть ответ
:help map-recursive
:Примером этого является отображение следующего:
:imap j k
:imap k j
Теперь vim заменит j на k и k на j бесконечное число раз и, следовательно, покажет вам ошибку, что вы создали рекурсивное отображение.
Вот почему обычно рекомендуется, чтобы вы почти всегда (кроме случаев, когда у вас есть
<Plug>
сопоставления или аналогичные) использовали нерекурсивные сопоставления. Это предотвращает зависание Vim при непреднамеренном создании рекурсивных отображений. Поэтому нерекурсивное отображение является более безопасным способом отображения команд в Vim.Имея вышеуказанную информацию, мы можем видеть, что
:noreabbrev
это просто нерекурсивная версия:abbrev
команды.Вы можете использовать
:abbrev
только в режимах вставки, замены и командования.:abbrev
используется для создания сокращений (или ярлыков, которые может расширять Vim). Короткое расширение - использовать:map
/:noremap
для создания отображений,:abbrev
/:noreabbrev
для создания сокращений или всякий раз, когда вы хотите, чтобы Vim расширил вашу типизацию.источник
nore
форм команды map. Еще одна (и, на мой взгляд, более важная) причина их использования заключается в том, что они делают ваши сопоставления надежными / предсказуемыми. Если вы используете простую форму, аrhs
ключ содержит ключ, который оказывается сопоставленным с чем-то другим, то ваше сопоставление может иметь совершенно другое поведение, чем предполагалось.