Primero, map
y noremap
son similares en el sentido de que cada uno crea asignaciones para modos normales, visuales, selectivos y de operador pendiente simultáneamente . Vim detalla esto en :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
Según la ayuda anterior, si desea restringir la asignación a un modo específico, debe anteponer:
'n' (para normal), 'v' (para visual y select), 'c' (para comando), 'x' (para modo visual), 's' (para select), 'o' (para operador pendiente )
Por ejemplo,
nmap n nzz
creará un modo normal, mapeo recursivo de n
.
Ahora, noremap
es solo una versión no recursiva de map
.
Entonces, ¿qué es el mapeo no recursivo? Vim tiene la respuesta a eso también, con :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.
Un ejemplo de esto es mapear lo siguiente:
:imap j k
:imap k j
Ahora, vim reemplazará j con k y k con j un número infinito de veces y, por lo tanto, le mostrará un error de que ha creado una asignación recursiva.
Es por eso que generalmente se recomienda que casi siempre (excepto cuando tenga <Plug>
asignaciones o similares) use asignaciones no recursivas. Esto evita que Vim se cuelgue cuando accidentalmente crea asignaciones recursivas. El mapeo no recursivo es, por lo tanto, una forma más segura de mapear comandos en Vim.
Con la información anterior a mano, podemos ver que :noreabbrev
es solo una versión no recursiva del :abbrev
comando.
Puede usar :abbrev
solo en los modos de inserción, reemplazo y comando. :abbrev
se usa para crear abreviaturas (también conocidos como accesos directos que Vim puede expandir). La breve expansión es usar :map
/ :noremap
para crear mapeos, :abbrev
/ :noreabbrev
para crear abreviaturas, o cuando quiera que Vim expanda su escritura.