Question Quelle est la différence entre les commandes de mappage remap, noremap, nnoremap et vnoremap dans vim?


Quelle est la différence entre les commandes de mappage remap, noremap, nnoremap et vnoremap dans vim?


901
2017-09-23 07:13


origine


Réponses:


remap est un option Cela permet aux mappages de fonctionner de manière récursive. Par défaut, il est activé et je vous recommande de le laisser de cette façon. Le reste est mappage, décrit ci-dessous:

:map et :noremap sont récursif et non récursif versions des différentes commandes de mappage. Qu'est-ce que cela signifie est que si vous faites:

:map j gg
:map Q j
:noremap W j

j sera mappé à gg. Q volonté aussi être mappé à gg, car j sera développé pour la cartographie récursive. W sera mappé à j (et de ne pas gg) car j ne sera pas développé pour le mappage non récursif.

Maintenant, rappelez-vous que Vim est un éditeur modal. Il a un Ordinaire mode, visuel mode et d'autres modes.

Pour chacun de ces ensembles de mappages, il existe un cartographie qui fonctionne dans les modes normal, visuel, select et opérateur (:map et :noremap), qui fonctionne en mode normal (:nmap et :nnoremap), un en mode visuel (:vmap et :vnoremap) etc.

Pour plus de conseils à ce sujet, voir:

:help :map
:help :noremap
:help recursive_mapping
:help :map-modes

1324
2017-09-23 07:24



Je pense que la documentation vim aurait dû expliquer la signification derrière la dénomination de ces commandes. Le simple fait de vous dire ce qu'ils font ne vous aide pas à vous souvenir des noms.

map est la "racine" de toutes les commandes de mappage récursives. La forme racine s'applique aux modes "normal", "visual + select" et "operator-pending". (J'utilise le terme "root" comme dans linguistique.)

noremap est la "racine" de toutes les commandes de mappage non récursives. La forme racine s'applique aux mêmes modes que map. (Pensez à la nore préfixe pour signifier "non récursif".)

(Notez qu'il y a aussi ! des modes comme map! qui s'applique à insérer & ligne de commande.)

Voir ci-dessous pour ce que signifie "récursif" dans ce contexte.

Ajouter une lettre de mode n modifier les modes dans lesquels le mappage fonctionne. Il peut choisir un sous-ensemble de la liste des modes applicables (par exemple seulement "visuel"), ou choisir d'autres modes map ne s'appliquerait pas à (par exemple "insérer").

Utilisation help map-modes vous montrera quelques tables qui expliquent comment contrôler les modes auxquels le mapping s'applique.

Lettres de mode:

  • n: normal seulement
  • v: visuel et sélectionnez
  • o: en attente d'un opérateur
  • x: visuel seulement
  • s: sélectionnez seulement
  • i: insérer
  • c: ligne de commande
  • l: insert, ligne de commande, regexp-search (et d'autres, pseudo-mode "Lang-Arg")

"Récursif"signifie que le mappage est étendu à un résultat, puis le résultat est étendu à un autre résultat, et ainsi de suite.

L'expansion s'arrête lorsque l'un d'eux est vrai:

  1. le résultat n'est plus mappé à autre chose.
  2. un mappage non récursif a été appliqué (c'est-à-dire que le "noremap" [ou l'un de ses semblables] est l'expansion finale).

À ce stade, la «signification» par défaut de vim du résultat final est appliquée / exécutée.

"Non récursif"signifie que le mappage n'est étendu qu'une seule fois et que ce résultat est appliqué / exécuté.

Exemple:

 nmap K H
 nnoremap H G
 nnoremap G gg

Les causes ci-dessus K étendre à H, puis H étendre à G et arrêtez. Cela s'arrête à cause de nnoremap, qui se dilate et s'arrête immédiatement. Le sens de G sera exécuté (c'est-à-dire "sauter à la dernière ligne"). Au plus un mappage non récursif sera appliqué dans une chaîne d'expansion (il s'agirait de la dernière expansion).

La cartographie de G à gg ne s'applique que si vous appuyez sur Gmais pas si vous appuyez sur K. Cette cartographie n'affecte pas le pressage K indépendamment du fait que G a été mappé récursivement ou non, puisque c'est la ligne 2 qui provoque l'expansion de K pour arrêter, la ligne 3 ne serait pas utilisée.


210
2017-07-26 19:00



Mise en garde, vnoremap et vmap Travailler en mode Visual AND Select. Pour avoir un mapping uniquement en mode Visual, utilisez xmap et xnoremap.


69
2017-09-24 13:58



Une différence est que:

  • :map  Est-ce que nvo == normal + (visuel + select) + opérateur en attente
  • :map! Est-ce que ic  == insert + mode ligne de commande

comme indiqué sur help map-modes les tables.

Alors: map ne correspond pas à tous les modes.

Pour mapper à tous les modes, vous avez besoin des deux :map et :map!.


17
2018-01-22 12:03