Attention, vnoremapet vmaptravaillez en mode Visual AND Select. Pour avoir un mappage uniquement en mode visuel, utilisez xmapet xnoremap.
Benoit
Réponses:
1628
remapest une option qui permet aux mappages de fonctionner récursivement. Par défaut, il est activé et je vous recommande de le laisser de cette façon. Les autres sont des commandes de mappage , décrites ci-dessous:
:mapet :noremapsont des versions récursives et non récursives des différentes commandes de mappage. Cela signifie que si vous le faites:
:map j gg
:map Q j
:noremap W j
jsera mappé gg. Qsera également mappé gg, car jsera étendu pour le mappage récursif. Wsera mappé sur j(et non sur gg) car jne sera pas développé pour le mappage non récursif.
Souvenez-vous maintenant que Vim est un éditeur modal . Il a un mode normal , visuel mode et d'autres modes.
Pour chacun de ces ensembles de mappages, il existe un mappage qui fonctionne en modes normal, visuel, sélection et opérateur ( :mapet :noremap), un qui fonctionne en mode normal ( :nmapet :nnoremap), un en mode visuel ( :vmapet :vnoremap) et ainsi de suite.
Merci pour votre réponse! Aussi, quand est-ce que récursif est utilisé et quand est-il non récursif?
Chetan
14
@Chetan: Cela dépend de ce que vous voulez réaliser. J'ai tendance à utiliser non récursif plus souvent, mais si vous avez défini un mappage relativement compliqué à l'aide de non récursif et ce qu'un autre mappage fait tout le premier mappage et plus, il peut être plus facile d'utiliser un mappage récursif qui inclut le l'original plutôt que de retaper l'intégralité de l'original non récursif (en particulier si vous devez ensuite modifier l'original).
DrAl
10
Je devais noremapêtre un opposé map. Je veux dire quelque chose qui supprime un mappage. Merci d'avoir répondu. Cela m'a clarifié
Pavan Manjunath
4
Ce n'est pas si important pour la majorité des cas d'utilisation, mais il convient de noter que :map, etc. ne fonctionnent pas dans tous les modes, exactement, juste tous les modes communs (en particulier, le mode normal, le mode visuel, le mode de sélection et en attente de l'opérateur). Si vous voulez qu'un mappage fonctionne en mode insertion, ligne de commande ou lang-arg, vous devez utiliser :map!, etc. (Source: vimdoc.sourceforge.net/htmldoc/map.html#map-overview )
Ken Bellows
3
@whytheq noremap = cartographie non récursive
Dan Bechard
281
Je pense que la documentation de Vim aurait dû expliquer la signification du nom de ces commandes. Le simple fait de vous dire ce qu'ils font ne vous aide pas à vous souvenir des noms.
mapest la "racine" de toutes les commandes de mappage récursives. La forme racine s'applique aux modes "normal", "visuel + sélection" et "en attente de l'opérateur". (J'utilise le terme "racine" comme en linguistique .)
noremapest la "racine" de toutes les commandes de mappage non récursives. La forme racine s'applique aux mêmes modes que map. (Pensez au norepréfixe pour signifier "non récursif".)
(Notez qu'il existe également des !modes commemap! celui-ci qui s'appliquent à l'insertion et à la ligne de commande.)
Voir ci-dessous ce que signifie "récursif" dans ce contexte.
Faire précéder une lettre de mode comme nmodifier les modes dans lesquels le mappage fonctionne. Il peut choisir un sous-ensemble de la liste des modes applicables (par exemple uniquement "visuel"), ou choisir d'autres modes qui mapne s'appliqueraient pas (par exemple "insérer").
Utilisation help map-modes vous montrera quelques tableaux qui expliquent comment contrôler les modes auxquels le mappage s'applique.
Lettres de mode:
n: normal seulement
v: visuel et sélectionnez
o: en attente de l'opérateur
x: visuel uniquement
s: sélectionner uniquement
i: insérer
c: ligne de commande
l: insert, ligne de commande, regexp-search (et autres. Appelé collectivement 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, etc.
L'expansion s'arrête lorsque l'une d'entre elles est vraie:
le résultat n'est plus mappé à autre chose.
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 développé qu'une seule fois et que le résultat est appliqué / exécuté.
Exemple:
nmap K H
nnoremap H G
nnoremap G gg
Ce qui précède provoque Kune expansion vers H, puis Hune expansion vers Get un arrêt. Il s'arrête à cause de la nnoremap, qui se développe et s'arrête immédiatement. Le sens deG sera exécutée (c'est-à-dire "sauter à la dernière ligne"). Au plus, un mappage non récursif sera jamais appliqué dans une chaîne d'expansion (ce serait la dernière expansion à se produire).
Le mappage de Gà ggs'applique uniquement si vous appuyez sur G, mais pas si vous appuyez sur K. Ce mappage n'affecte pas la pression, Kqu'il ait Gété mappé récursivement ou non, car c'est la ligne 2 qui provoque l'arrêt de l'expansion de K, donc la ligne 3 ne serait pas utilisée.
Prudent !! command modeest un autre nom historique pour normal modesavoir. chapitre 5 vimdoc.sourceforge.net/htmldoc/intro.html#vim-modes-intro ). L'abréviation «c» signifie «ligne de commande». En d'autres termes, par défaut: mappe map! lhs rhsrécursivement lhs à rhs pour les modes insert + command-LINE . C'est à moins que l' remapoption par défaut ne soit explicitement désactivée avec set noremap[!]dans ~ / .vimrc. Dans ce cas, la cartographie ne serait pas récursive (déconseillée).
vnoremap
etvmap
travaillez en mode Visual AND Select. Pour avoir un mappage uniquement en mode visuel, utilisezxmap
etxnoremap
.Réponses:
remap
est une option qui permet aux mappages de fonctionner récursivement. Par défaut, il est activé et je vous recommande de le laisser de cette façon. Les autres sont des commandes de mappage , décrites ci-dessous::map
et:noremap
sont des versions récursives et non récursives des différentes commandes de mappage. Cela signifie que si vous le faites:j
sera mappégg
.Q
sera également mappégg
, carj
sera étendu pour le mappage récursif.W
sera mappé surj
(et non surgg
) carj
ne sera pas développé pour le mappage non récursif.Souvenez-vous maintenant que Vim est un éditeur modal . Il a un mode normal , visuel mode et d'autres modes.
Pour chacun de ces ensembles de mappages, il existe un mappage qui fonctionne en modes normal, visuel, sélection et opérateur (
:map
et:noremap
), un qui fonctionne en mode normal (:nmap
et:nnoremap
), un en mode visuel (:vmap
et:vnoremap
) et ainsi de suite.Pour plus d'informations à ce sujet, voir:
la source
noremap
être un opposémap
. Je veux dire quelque chose qui supprime un mappage. Merci d'avoir répondu. Cela m'a clarifié:map
, etc. ne fonctionnent pas dans tous les modes, exactement, juste tous les modes communs (en particulier, le mode normal, le mode visuel, le mode de sélection et en attente de l'opérateur). Si vous voulez qu'un mappage fonctionne en mode insertion, ligne de commande ou lang-arg, vous devez utiliser:map!
, etc. (Source: vimdoc.sourceforge.net/htmldoc/map.html#map-overview )Je pense que la documentation de Vim aurait dû expliquer la signification du nom 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", "visuel + sélection" et "en attente de l'opérateur". (J'utilise le terme "racine" comme en linguistique .)noremap
est la "racine" de toutes les commandes de mappage non récursives. La forme racine s'applique aux mêmes modes quemap
. (Pensez aunore
préfixe pour signifier "non récursif".)(Notez qu'il existe également des
!
modes commemap!
celui-ci qui s'appliquent à l'insertion et à la ligne de commande.)Voir ci-dessous ce que signifie "récursif" dans ce contexte.
Faire précéder une lettre de mode comme
n
modifier les modes dans lesquels le mappage fonctionne. Il peut choisir un sous-ensemble de la liste des modes applicables (par exemple uniquement "visuel"), ou choisir d'autres modes quimap
ne s'appliqueraient pas (par exemple "insérer").Utilisation
help map-modes
vous montrera quelques tableaux qui expliquent comment contrôler les modes auxquels le mappage s'applique.Lettres de mode:
n
: normal seulementv
: visuel et sélectionnezo
: en attente de l'opérateurx
: visuel uniquements
: sélectionner uniquementi
: insérerc
: ligne de commandel
: insert, ligne de commande, regexp-search (et autres. Appelé collectivement 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, etc.
L'expansion s'arrête lorsque l'une d'entre elles est vraie:
À 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 développé qu'une seule fois et que le résultat est appliqué / exécuté.
Exemple:
Ce qui précède provoque
K
une expansion versH
, puisH
une expansion versG
et un arrêt. Il s'arrête à cause de lannoremap
, qui se développe et s'arrête immédiatement. Le sens deG
sera exécutée (c'est-à-dire "sauter à la dernière ligne"). Au plus, un mappage non récursif sera jamais appliqué dans une chaîne d'expansion (ce serait la dernière expansion à se produire).Le mappage de
G
àgg
s'applique uniquement si vous appuyez surG
, mais pas si vous appuyez surK
. Ce mappage n'affecte pas la pression,K
qu'il aitG
été mappé récursivement ou non, car c'est la ligne 2 qui provoque l'arrêt de l'expansion deK
, donc la ligne 3 ne serait pas utilisée.la source
map
s'applique uniquement aux modes normal, visuel, sélection et en attente de l'opérateur, pas à tous les modes.Une différence est que:
:map
faitnvo
== normal + (visuel + sélection) + opérateur en attente:map!
faitic
== insérer + mode ligne de commandecomme indiqué sur les
help map-modes
tableaux.Donc:
map
ne correspond pas à tous les modes .Pour mapper à tous les modes, vous avez besoin des deux
:map
et:map!
.la source
command mode
est un autre nom historique pournormal mode
savoir. chapitre 5 vimdoc.sourceforge.net/htmldoc/intro.html#vim-modes-intro ). L'abréviation «c» signifie «ligne de commande». En d'autres termes, par défaut: mappemap! lhs rhs
récursivement lhs à rhs pour les modes insert + command-LINE . C'est à moins que l'remap
option par défaut ne soit explicitement désactivée avecset noremap[!]
dans ~ / .vimrc. Dans ce cas, la cartographie ne serait pas récursive (déconseillée).