По- перше, 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 розширив текст.