Détecter si une clé est liée à quelque chose dans vim

89

J'aimerais savoir s'il existe un moyen de savoir si une clé fait quelque chose dans vim. Je sais que je peux utiliser :mappour voir les mappages définis par l'utilisateur, mais y a-t-il quelque chose pour les éléments intégrés?

Par exemple, j'ai toujours eu CTRL- Wlié pour fermer l'onglet, parce que je pensais qu'il était inutilisé. Après six mois, j'ai découvert qu'il y avait des séquences qui l'utilisaient, comme CTRL- W CTRL- Spour diviser la fenêtre, et c'était un cauchemar de me recycler.

K. Norbert
la source
4
En parlant de collisions accidentelles de mappages définis par l'utilisateur, c'est vraiment une bonne pratique d'utiliser mapleader
derenio

Réponses:

79

Si vous consultez la réponse suggérée par Randy Morris, vous constaterez que

:help index 

vous donnera la liste que vous souhaitez.

skeept
la source
très utile! bon à savoir il y a un endroit où vous pouvez aller chercher si vous voulez juste
fouiller
40

Pour vérifier le mappage par défaut:

:help index

Pour les autres mappages effectués par les utilisateurs ou le plugin:

:map
:map!

Depuis le http://vim.wikia.com/wiki/Mapping_keys_in_Vim_- Tutorial (Part_1) :

La première commande affiche les cartes qui fonctionnent en mode normal, visuel, sélection et attente opérateur. La deuxième commande affiche les cartes qui fonctionnent en mode insertion et ligne de commande.

En règle générale, la sortie des commandes ci-dessus s'étendra sur plusieurs pages. Vous pouvez utiliser l'ensemble de commandes suivant pour rediriger la sortie vers le fichier vim_maps.txt:

:redir! > vim_maps.txt
:map
:map!
:redir END
Hieu
la source
À moins que les nouvelles versions de Vim offrent soudainement une meilleure alternative, cela semble être le seul moyen de rechercher les keymaps inclus et personnalisés. mapcheck(comme mentionné dans une autre réponse ) ne couvre également que les raccourcis clavier personnalisés. La principale différence entre la sortie dans un fichier texte et la vérification de carte est que la sortie dans un fichier texte et / ou l'utilisation :help indexvous permet /C-wdans Vim de trouver quoi que ce soit en utilisantC-w
Zoe
33

Ce n'est pas une réponse complète, mais vous voudrez peut-être consulter :help map-which-keysune liste de clés que vim vous recommande d'utiliser dans vos cartes personnalisées.

Cette section d'aide a une recommandation sur la façon de savoir si une clé spécifique est mappée à une action.

Randy Morris
la source
19

Utilisez :map!et :mappour définir manuellement les clés et :help 'char(-combination)'pour savoir quelles clés sont déjà mappées dans vim prêtes à l' emploi (/ hors de vos options de compilation spécifiques). (Légèrement hors sujet mais toujours appréciable (je pense): permet :scriptnamesde voir quels fichiers ont été récupérés dans quel ordre.)

Shindojin
la source
Si vous voulez rechercher quelles touches déclenchent une certaine commande, vous pouvez faire ceci:: redir keys.txt: map: redir end Puis ouvrez keys.txt et recherchez les commandes liées.
Christian Oudard le
18

J'ai parcouru :help indexet fait une liste de certaines des nmapclés inutilisées :

  • Q (passer en mode "Ex")
  • Z sauf ZZ, ZQ
  • \
  • <Space>(identique lau mode normal; la clé la plus grande et la moins utilisée en mode normal)
  • gb, gc, gl, gx, gy, gz
  • gs (sommeil)
  • zp, zq, zu, zy
  • cd, cm, co, cp, cq, cr, cs, cu, cx, cy
  • dc, dm, do, dp, dq, dr, ds, du, dx, dy
  • gA, gB, gC, gG, gK, gL, gM, gO, gS, gX, gY, gZ
  • zB, zI, zJ, zK, zP, zQ, zP, zS, zT, zU, zV, zY, zZ
  • ] a,] b,] e,] g,] h,] j,] k,] l,] n,] o,] q,] r,] t,] u,] v,] w,] x ,] y
  • [a, [b, [e, [g, [h, [j, [k, [l, [n, [o, [q, [r, [t, [u, [v, [w, [x , [y
  • CTRL-G, CTRL-K
  • CTRL- \ a - z (réservé aux extensions)
  • CTRL- \ A - Z (non utilisé)

Veuillez mettre à jour / commenter.

Michal Čizmazia
la source
12

Vous pouvez utiliser mapcheck.: -

Par exemple, je voulais mapper <CR> ,ivers gg=Gun fichier en retrait. Pour vérifier s'il existe déjà un mappage pour<CR> , i

if mapcheck("\<CR>", "I") == "" |echo "no mapping"

... mais cela ne détectera pas si le mappage fait partie d'une séquence.

Moha le chameau tout-puissant
la source
J'ai essayé de vérifier si "o" est lié à quelque chose en mode normal, avec ce qui suit: if mapcheck ("o", "N") == "" | echo "no mapping" mais il signale "no mapping", quand o est définitivement lié à "open new line". Est-ce que je l'utilise mal?
K.Norbert
@ K.Norbert: Je crois que cela pour les mappages définis par l'utilisateur
Moha le chameau tout-puissant