Во- первых, map
и noremap
похожи в том , что каждый создания отображений для нормальной, визуальный, выберите и оператор в ожидании режима одновременно . Vim детализирует это в :help map-overview
:
Overview of which map command works in which mode. More details below.
COMMANDS MODES ~
:map :noremap :unmap Normal, Visual, Select, Operator-pending
:nmap :nnoremap :nunmap Normal
:vmap :vnoremap :vunmap Visual and Select
:smap :snoremap :sunmap Select
:xmap :xnoremap :xunmap Visual
:omap :onoremap :ounmap Operator-pending
:map! :noremap! :unmap! Insert and Command-line
:imap :inoremap :iunmap Insert
:lmap :lnoremap :lunmap Insert, Command-line, Lang-Arg
:cmap :cnoremap :cunmap Command-line
Согласно приведенной выше справке, если вы хотите ограничить сопоставление определенным режимом, вы должны добавить:
'n' (для обычного), 'v' (для визуального и выберите), 'c' (для команды), 'x' (для визуального режима), 's' (для выбора), 'o' (для ожидающего оператора ).
Например,
nmap n nzz
создаст нормальный режим рекурсивного отображения n
.
Теперь noremap
это просто нерекурсивная версия map
.
Так что же такое нерекурсивное отображение? У Vim тоже есть ответ :help map-recursive
:
If you include the {lhs} in the {rhs} you have a recursive mapping. When
{lhs} is typed, it will be replaced with {rhs}. When the {lhs} which is
included in {rhs} is encountered it will be replaced with {rhs}, and so on.
This makes it possible to repeat a command an infinite number of times. The
only problem is that the only way to stop this is by causing an error. The
macros to solve a maze uses this, look there for an example. There is one
exception: If the {rhs} starts with {lhs}, the first character is not mapped
again (this is Vi compatible).
For example: >
:map ab abcd
will execute the "a" command and insert "bcd" in the text. The "ab" in the
{rhs} will not be mapped again.
Примером этого является отображение следующего:
:imap j k
:imap k j
Теперь vim заменит j на k и k на j бесконечное число раз и, следовательно, покажет вам ошибку, что вы создали рекурсивное отображение.
Вот почему обычно рекомендуется, чтобы вы почти всегда (кроме случаев, когда у вас есть <Plug>
сопоставления или аналогичные) использовали нерекурсивные сопоставления. Это предотвращает зависание Vim при непреднамеренном создании рекурсивных отображений. Поэтому нерекурсивное отображение является более безопасным способом отображения команд в Vim.
Имея вышеуказанную информацию, мы можем видеть, что :noreabbrev
это просто нерекурсивная версия :abbrev
команды.
Вы можете использовать :abbrev
только в режимах вставки, замены и командования. :abbrev
используется для создания сокращений (или ярлыков, которые может расширять Vim). Короткое расширение - использовать :map
/ :noremap
для создания отображений, :abbrev
/ :noreabbrev
для создания сокращений или всякий раз, когда вы хотите, чтобы Vim расширил вашу типизацию.