Wie würden Sie bei einem emacs-Befehlsnamen Tastenkombinationen finden? (und umgekehrt)

107

Wenn ich einen Emacs-Befehlsnamen kenne, sagt "goto-line"; Was ist, wenn ich abfragen möchte, ob an diesen Befehl Tastenfolgen gebunden sind?

Und umgekehrt, wie kann ich bei einer bestimmten Tastenfolge den Befehlsnamen finden?

Sake
quelle

Antworten:

159

Um nur Tastenkombinationen für einen Befehl zu finden, können Sie die "where-is" -Funktion der emacs-Hilfe verwenden

C-h w command-name

Wenn für den Befehl mehrere Bindungen festgelegt sind, werden alle aufgelistet.

Für die Umkehrung können Sie bei gegebener Tastenfolge eingeben

C-h k key-sequence

Um den Befehl zu erhalten, der ausgeführt werden würde.

Durch Eingabe erhalten Sie detaillierte Informationen zu einem Befehl sowie zu allen nicht interaktiven Funktionen

C-h f function-name

Hier erhalten Sie detaillierte Informationen zu einer Funktion, einschließlich etwaiger Tastenkombinationen

C-h v variable-name

gibt Ihnen Informationen zu jeder (gebundenen) Variablen. Key-Maps werden in Variablen gespeichert, die Key-Codes werden jedoch in einem Rohformat gespeichert. Versuchen Sie es C-h v isearch-mode-mapmit einem Beispiel.

Weitere Hilfe zum Abrufen von Hilfe können Sie eingeben

C-h ?
Adam Rosenfield
quelle
Schlag auf Schlag. D'oh.
dmckee --- Ex-Moderator Kätzchen
51
Sie können auch C-h w <function name>wissen, wo sich der Schlüssel befindet, nicht die vollständige Dokumentation. Umgekehrt können Sie auch C-h c <key sequence>nur wissen, welche Funktion an eine Tastenfolge gebunden ist.
ShreevatsaR
7
auch: Ch w ist typischerweise an das Wo gebunden.
Cheeso
2
Also kann ich wo-ist wo ist, wenn ich Ch w vergesse. Das ist großartig ! ;)
Sake
1
Für diejenigen, die C-hin ihren Fenstermanagern an etwas anderes gebunden sind: C-h wist gleichbedeutend mit M-x where-is. C-h kist äquivalent zu M-x describe-key. C-h fist äquivalent zu M-x describe-function. C-h vist äquivalent zu M-x describe-variable. C-h ?ist äquivalent zu M-x help-for-help. Beachten Sie auch, dass f1anstelle von verwendet werden kann C-h.
Ricardo
13

C-h w(oder F1-w): where-isRET einen Befehlsnamen RET

Tut genau das, was Sie verlangen - listet gebundene Schlüssel ohne zusätzliche Informationen auf. :) :)

Glen Best
quelle
13

Informationen zum interaktiven Binden des Befehls an eine Tastenkombination (oder eine Tastenfolge in Emacs-Begriffen) finden Sie in der ausgewählten Antwort.

Verwenden Sie die Funktion key-bindingoder lookup-key, die eine Tastenfolge verwendet und den gebundenen Befehl zurückgibt , um den Befehl programmgesteuert an eine bestimmte Tastenfolge zu binden. Die Funktion key-bindingwird C-h kverwendet.

(key-binding (kbd "C-h m"))

Gibt den Befehl zurück, an den gebunden ist, C-h mindem in allen aktuellen Keymaps gesucht wird. Die Funktion lookup-keysucht in einer einzigen Keymap:

(lookup-key (current-global-map) (kbd "TAB")) ; => indent-for-tab-command
(lookup-key org-mode-map (kbd "TAB")) ; => org-cycle
(lookup-key text-mode-map (kbd "TAB")) ; => nil
(lookup-key isearch-mode-map (kbd "TAB")) ; => isearch-printing-char

Es where-is-internalist wahrscheinlich die zu verwendende Funktion, um programmgesteuert alle Tastenfolgen an einen bestimmten Befehl zu binden . Der Name der Funktion, die mit endet, internalscheint darauf hinzudeuten, dass Emacs-Benutzer sie nicht in ihren Init-Dateien verwenden können, aber diese Funktion mit einer Dokumentzeichenfolge scheint etwas anderes vorzuschlagen. Jeder, der die Verwendung von in Betracht zieht,where-is-internal sollte zuerst prüfen, ob die Neuzuordnung von Schlüsseln stattdessen sein Ziel erreichen kann.

Eine Alternative zum Finden der Schlüssel, die an einen bestimmten Befehl gebunden forward-charsind substitute-command-keys(z (substitute-command-keys "\\[forward-char]"). B. ), ist (z . B. ). Das ist besonders nützlich in größeren Texten.

Jisang Yoo
quelle
Wenn Sie sich die Dokumentation von where-is-internalansehen, ist dies in Ordnung. Herkömmlicherweise verwenden wir auch ein Format wie where-is--internal(beachten Sie den doppelten Bindestrich) für "private" Funktionen.
GergelyPolonkai
2
Die Verwendung des Suffix -internalwird dort beschrieben: gnu.org/software/emacs/manual/html_node/elisp/… . Es sollte für interne C-Funktionen verwendet werden.
Tobias
4

Eine alte Frage, aber zum Nutzen neuer Leser gibt es einige andere schöne Möglichkeiten, Tastenkombinationen zu erkennen

M-x describe-bindings

Listet alle derzeit verfügbaren Bindungen auf, verwendet isearch, tritt auf usw., um diese Liste gut zu nutzen.

M-x describe-prefix-map

Hier werden alle im aktuellen Modus verfügbaren Bindungen angezeigt. Sie können den Anzeigepuffer wie jeden anderen schreibgeschützten Emacs-Puffer verwenden, z. B. können Sie frei nach Zeichenfolgen usw. suchen.

M-x describe-mode

Sie erhalten nicht nur allgemeine Informationen zum aktuellen Modus, sondern auch alle verfügbaren Tastenkombinationen.

M-x describe-minor-mode

Sie werden aufgefordert, den Namen eines Nebenmodus einzugeben, und es werden Informationen und Tastenkombinationen für diesen Nebenmodus angezeigt.

HINWEIS : In den folgenden Beispielen werden zusätzliche Pakete verwendet (erhältlich bei MELPA ).

Welcher Schlüssel

Dies zeigt Ihnen Bindungen, kurz bevor Sie sie benötigen. Geben Sie ein Präfix ein, zum Beispiel C-xoderC-c und eine Liste der in diesem Präfix verfügbaren Bindungen wird angezeigt.

Sie können auch eine Liste der im aktuellen Modus verfügbaren Tastenkombinationen anzeigen, indem Sie Folgendes verwenden:

M-x which-key-show-top-level

Es ist nützlich zu binden which-key-show-top-level an einen Tastenakkord Ihrer Wahl , damit Sie die verfügbaren Tasten von überall aus anzeigen können.

Zum Beispiel hat C-s( isearch-forward) eine umfangreiche Key Map, die oft unbekannt ist. zB M-s obeginnt die occurVerwendung der aktuellen Suchzeichenfolge, ich wusste über viele Jahre der Verwendung von Emacs nichts davon. Das Herumkommen which-keyhat mir geholfen, viele seltene Edelsteine ​​in Emacs zu entdecken.

https://github.com/justbur/emacs-which-key

Führungsschlüssel

Die Führungstaste funktioniert ähnlich wie which-keyich es empfehlen würde, sie sich anzusehen, um die Funktionen zu vergleichen.

https://github.com/kai2nenobu/guide-key

ocodo
quelle