Quelle est la différence entre le reconfigurer, noremap, nnoremap et vnoremap cartographie des commandes de vim?
Réponses
Trop de publicités?remap
est une option qui rend les mappages de travail de manière récursive. Par défaut il est sur et je vous recommande de le laisser comme ça. Le reste sont des commandes de mappage, décrit ci-dessous:
:map
et :noremap
sont récursives et non récursives versions de différentes commandes de mappage. Ce que cela signifie est que si vous ne:
:map j gg
:map Q j
:noremap W j
j
sera mappé gg
. Q
va également être mappé gg
car j
sera étendu pour le récursive de la cartographie. W
sera mappé j
(et non pas à l' gg
) parce qu' j
ne sera pas augmenté pour les non-récursive de la cartographie.
Maintenant, rappelez-vous que Vim est un éditeur modal. Il a un normal mode, visual mode et d'autres modes de transport.
Pour chacun de ces ensembles de correspondances, il y a une cartographie qui fonctionne dans des conditions normales, visuel, sélectionnez l'opérateur et des modes (:map
et :noremap
), qui fonctionne en mode normal (:nmap
et :nnoremap
), l'un en mode visuel (:vmap
et :vnoremap
) et ainsi de suite.
Pour plus de renseignements sur cette question, voir:
:help :map
:help :noremap
:help recursive_mapping
:help :map-modes
Je pense que la documentation de vim devraient ai expliqué la signification derrière le nommage de ces commandes. Juste vous dire ce qu'ils font ne vous aide pas à se rappeler les noms.
map
est la "racine" de tous les récursive de la cartographie des commandes. La racine s'applique à la "normale", "visual+select" et "opérateur en attente de" modes.
noremap
est la "racine" de tous les non-récursive de la cartographie des commandes. La racine s'applique aux mêmes modes d' map
.
(Noter qu'il existe également l' !
mode de map!
qui s'appliquent à insérer et ligne de commande.)
Voir ci-dessous pour quoi "récursive" signifie dans ce contexte.
Ajouter un mode de lettre comme n
modifier les modes de la cartographie. Il peut choisir un sous-ensemble de la liste des modes de fonctionnement (par exemple uniquement les "visuels"), ou de choisir d'autres modes d' map
ne s'applique pas (par exemple, "insert").
Utiliser help map-modes
vais vous montrer quelques tables qui expliquent comment contrôler les modes de la cartographie s'applique.
Mode de lettres:
-
n
: normale seulement -
v
: visuel et sélectionnez -
o
: opérateur en attente de -
x
: visual seulement -
s
: sélectionnez uniquement -
i
: insérer -
c
: ligne de commande -
l
: insertion, de la ligne de commande, regexp-la recherche (et des autres. Collectivement appelés "Lang-Arg" pseudo-mode)
"Récursive" signifie que la cartographie est élargi à un résultat, alors le résultat est étendu à un autre résultat, et ainsi de suite.
L'expansion s'arrête lorsque l'un de ces est vrai:
- le résultat n'est plus mappé à autre chose.
- un non-récursive de la cartographie a été appliqué (c'est à dire le "noremap" [ou l'un de ses semblables] est la dernière extension).
À ce point, vim par défaut du "sens" de la le résultat final est appliquée/exécuté.
"Non récursif" signifie que la cartographie n'est élargi une fois, et le résultat est appliquée/exécuté.
Exemple:
nmap K H
nnoremap H G
nnoremap G gg
Les causes ci-dessus K
de l'étendre à d' H
, alors H
de l'étendre à d' G
et s'arrêter. Il s'arrête à cause de l' nnoremap
, qui s'étend et s'arrête immédiatement. Le sens de l' G
sera exécuté (c'est à dire "aller à la dernière ligne"). Tout au plus un non-récursive de la cartographie sera jamais appliquée dans une expansion de la chaîne (il serait de la dernière extension d'arriver).
La cartographie de l' G
de gg
s'applique uniquement si vous appuyez sur G
, mais pas si vous appuyez sur K
. Cela est vrai indépendamment du fait que G
a été cartographié de manière récursive ou non, puisque c'est la ligne 2 qui a provoqué l'expansion de l' K
pour l'arrêter.