Estos comandos transforman un conjunto de pulsaciones de teclas en otro de alguna manera, pero estoy algo confuso sobre cuál es el más apropiado para alguna situación. Además, también hay !
variantes de ellos. Por el momento, mi uso de ellos es bastante casual, así que ¿podría saber cuáles son las trampas asociadas con cada uno? En particular, las notas sobre las diferentes versiones de modo podrían ser útiles, ya que aprendí de Peter Rincker en un comentario que cmap
puede expandirse prácticamente en cualquier lugar de la línea y no solo cuando estoy usando :
comandos. ¿Qué precauciones puedo tomar contra posibles dificultades?
19
Respuestas:
Primero,
map
ynoremap
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
: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 demap
.Entonces, ¿qué es el mapeo no recursivo? Vim tiene la respuesta a eso también, con
:help map-recursive
: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.fuente
nore
formularios del comando map. Otra razón (y en mi opinión, más importante) para usarlos es que hacen que sus asignaciones sean confiables / predecibles. Si usa la forma simple yrhs
contiene una clave que se asigna a otra cosa, entonces su asignación podría tener un comportamiento completamente diferente al previsto.