Respuestas:
remap
es una opción que hace que las asignaciones funcionen de forma recursiva. Por defecto está activado y le recomiendo que lo deje así. El resto son comandos de mapeo , que se describen a continuación:
:map
y :noremap
son versiones recursivas y no recursivas de los diversos comandos de mapeo. Lo que eso significa es que si haces:
:map j gg
:map Q j
:noremap W j
j
será asignado a gg
. Q
será también ser asignada a gg
, porque j
será ampliado para la asignación recursiva. W
se asignará a j
(y no a gg
) porque j
no se expandirá para la asignación no recursiva.
Ahora recuerda que Vim es un editor modal . Tiene un modo normal , modo visual y otros modos.
Para cada uno de estos conjuntos de asignaciones, hay una asignación que funciona en modo normal, visual, de selección y de operador ( :map
y :noremap
), una que funciona en modo normal ( :nmap
y :nnoremap
), otra en modo visual ( :vmap
y :vnoremap
) y así sucesivamente.
Para obtener más orientación sobre esto, consulte:
:help :map
:help :noremap
:help recursive_mapping
:help :map-modes
noremap
que era algo opuesto a map
. Me refiero a algo que elimina un mapeo. Gracias por la respuesta. Me aclaró
:map
, etc., no funcionan en todos los modos, exactamente, solo en todos los comunes (específicamente, modo normal, modo visual, modo de selección y modo de operador pendiente). Si desea que una asignación funcione en modo de inserción, línea de comandos o lang-arg, debe usar :map!
, etc. (Fuente: vimdoc.sourceforge.net/htmldoc/map.html#map-overview )
Creo que la documentación de Vim debería haber explicado el significado detrás de la denominación de estos comandos. Solo decirte lo que hacen no te ayuda a recordar los nombres.
map
es la "raíz" de todos los comandos de mapeo recursivo. La forma raíz se aplica a los modos "normal", "visual + select" y "pendiente de operador". (Estoy usando el término "raíz" como en lingüística ).
noremap
es la "raíz" de todos los comandos de mapeo no recursivos. La forma raíz se aplica a los mismos modos que map
. (Piense en el nore
prefijo que significa "no recursivo").
(Tenga en cuenta que también existen !
modos como los map!
que se aplican a insertar y línea de comandos).
Vea a continuación lo que significa "recursivo" en este contexto.
Anteponiendo una letra de modo como n
modificar los modos en los que funciona la asignación. Puede elegir un subconjunto de la lista de modos aplicables (por ejemplo, solo "visual"), o elegir otros modos que map
no se apliquen (por ejemplo, "insertar").
Use help map-modes
le mostrará algunas tablas que explican cómo controlar a qué modos se aplica la asignación.
Letras de modo:
n
: normal solamentev
: visual y selecto
: pendiente de operadorx
: solo visuals
: seleccionar soloi
: insertarc
: línea de comandol
: insert, command-line, regexp-search (y otros. Colectivamente llamado pseudo-modo "Lang-Arg")" Recursivo " significa que la asignación se expande a un resultado, luego el resultado se expande a otro resultado, y así sucesivamente.
La expansión se detiene cuando uno de estos es cierto:
En ese punto, se aplica / ejecuta el "significado" predeterminado de Vim del resultado final.
" No recursivo " significa que la asignación solo se expande una vez, y ese resultado se aplica / ejecuta.
Ejemplo:
nmap K H
nnoremap H G
nnoremap G gg
Lo anterior hace K
que se expanda H
, luego se H
expanda G
y se detenga. Se detiene debido a nnoremap
que se expande y se detiene inmediatamente. Se G
ejecutará el significado de (es decir, "saltar a la última línea"). Como máximo, se aplicará un mapeo no recursivo en una cadena de expansión (sería la última expansión en ocurrir).
La asignación de G
a gg
solo se aplica si presiona G
, pero no si presiona K
. Este mapeo no afecta la presión K
independientemente de si G
se mapeó recursivamente o no, ya que es la línea 2 la que K
detiene la expansión , por lo que la línea 3 no se usaría.
map
solo se aplica a los modos normales, visuales, selectivos y pendientes del operador, no a todos los modos.
Una diferencia es que:
:map
does nvo
== normal + (visual + select) + operador pendiente:map!
does ic
== insert + modo de línea de comandocomo se indica en las help map-modes
tablas.
Entonces: map
no se asigna a todos los modos .
Para asignar a todos los modos necesitas ambos :map
y :map!
.
command mode
es otro nombre histórico para normal mode
viz. Capítulo 5 vimdoc.sourceforge.net/htmldoc/intro.html#vim-modes-intro ). La abreviatura 'c' es para 'línea de comandos'. En otras palabras, por defecto: asigna map! lhs rhs
recursivamente lhs a rhs para insertar + modos de LÍNEA de comandos . Eso es a menos que la remap
opción predeterminada esté explícitamente deshabilitada con set noremap[!]
~ / .vimrc. En ese caso, el mapeo no sería recursivo (no recomendable).
vnoremap
yvmap
trabaje en modo Visual AND Select. Para tener una asignación solo en modo Visual, usexmap
yxnoremap
.