Ermitteln Sie, ob ein Schlüssel an etwas in vim gebunden ist

87

Ich würde gerne wissen, ob es eine Möglichkeit gibt, herauszufinden, ob ein Schlüssel etwas in vim tut. Ich weiß, dass ich :mapbenutzerdefinierte Zuordnungen anzeigen kann, aber gibt es etwas für die integrierten Funktionen?

Zum Beispiel habe ich immer hatte CTRL- Wgebunden Tab schließen, weil ich dachte , dass es ungenutzt war. Nach einem halben Jahr fand ich heraus, dass es einige Sequenzen gibt, die es verwenden, wie CTRL- W CTRL- Sum das Fenster zu teilen, und es war ein Albtraum, mich neu zu trainieren.

K. Norbert
quelle
4
Apropos versehentliche Kollisionen von benutzerdefinierten Zuordnungen, es ist wirklich eine gute Praxis, Mapleader
derenio

Antworten:

77

Wenn Sie sich die vorgeschlagene Antwort von Randy Morris ansehen, werden Sie das finden

:help index 

gibt Ihnen die Liste, die Sie wollen.

skeept
quelle
sehr hilfreich! Gut zu wissen, dass es einen Ort gibt, an den man schauen kann, wenn man nur
herumstöbern
40

So überprüfen Sie die Standardzuordnung:

:help index

Für andere Zuordnungen, die entweder von Benutzern oder vom Plugin durchgeführt werden:

:map
:map!

Aus http://vim.wikia.com/wiki/Mapping_keys_in_Vim_- Tutorial (Teil_1) :

Der erste Befehl zeigt die Karten an, die im normalen, visuellen und Auswahl- und Operator-Pending-Modus funktionieren. Der zweite Befehl zeigt die Karten an, die im Einfüge- und Befehlszeilenmodus funktionieren.

Normalerweise umfasst die Ausgabe der oben genannten Befehle mehrere Seiten. Mit den folgenden Befehlen können Sie die Ausgabe in die Datei vim_maps.txt umleiten:

:redir! > vim_maps.txt
:map
:map!
:redir END
Hieu
quelle
Sofern neuere Versionen von Vim nicht plötzlich eine bessere Alternative bieten, scheint dies die einzige Möglichkeit zu sein, sowohl enthaltene als auch benutzerdefinierte Keymaps zu durchsuchen. mapcheck(wie in einer anderen Antwort erwähnt ) deckt auch nur benutzerdefinierte Tastenkombinationen ab. Der Hauptunterschied zwischen der Ausgabe in eine Textdatei und dem Mapcheck besteht darin, dass :help indexSie /C-win Vim durch Ausgabe in eine Textdatei und / oder mithilfe vonC-w
Zoe
33

Keine vollständige Antwort, aber Sie können nach :help map-which-keyseiner Liste von Schlüsseln suchen, die vim für Ihre benutzerdefinierten Karten empfiehlt.

In diesem Hilfeabschnitt wird empfohlen, wie Sie feststellen können, ob ein bestimmter Schlüssel einer Aktion zugeordnet ist.

Randy Morris
quelle
19

Verwenden Sie :map!und :mapzum manuellen Festlegen von Schlüsseln und :help 'char(-combination)'um herauszufinden, welche Schlüssel bereits in vim standardmäßig zugeordnet sind (/ aus Ihren spezifischen Kompilierungsoptionen). (Etwas abseits des Themas, aber immer noch beachtlich (glaube ich): Verwenden :scriptnamesSie diese Option, um zu sehen, welche Dateien in welcher Reihenfolge bezogen wurden.)

Shindojin
quelle
Wenn Sie suchen möchten, welche Schlüssel einen bestimmten Befehl auslösen, können Sie dies tun :: redir keys.txt: map: redir end Öffnen Sie dann keys.txt und suchen Sie, welche Befehle gebunden sind.
Christian Oudard
18

Ich überflog :help indexund machte eine Liste einiger nicht verwendeter nmapSchlüssel:

  • Q (in den "Ex" -Modus wechseln)
  • Z außer ZZ, ZQ
  • \.
  • <Space>(wie lim normalen Modus; der größte und am wenigsten genutzte Schlüssel im normalen Modus)
  • gb, gc, gl, gx, gy, gz
  • gs (Schlaf)
  • 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
  • STRG-G, STRG-K
  • STRG- \ a - z (reserviert für Erweiterungen)
  • STRG- \ A - Z (nicht verwendet)

Bitte aktualisieren / kommentieren.

Michal Čizmazia
quelle
12

Sie können verwenden mapcheck.: -

Zum Beispiel wollte ich eine Datei zuordnen <CR> ,i, gg=Gum sie einzurücken. Um zu überprüfen, ob bereits eine Zuordnung für vorhanden ist<CR> , i

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

... aber dies erkennt nicht, ob das Mapping Teil einer Sequenz ist.

Moha das allmächtige Kamel
quelle
Ich habe versucht zu überprüfen, ob "o" im normalen Modus an etwas gebunden ist, mit folgendem: if mapcheck ("o", "N") == "" | Echo "keine Zuordnung", aber es wird "keine Zuordnung" gemeldet, wenn o definitiv an "neue Zeile öffnen" gebunden ist. Benutze ich es falsch?
K. Norbert
@ K.Norbert: Ich glaube, dies für benutzerdefinierte Zuordnungen
Moha das allmächtige Kamel