Wie kann ich eine Schlüsselbindung festlegen, die global überschreibt und Vorrang vor allen anderen Bindungen für diesen Schlüssel hat? Ich möchte alle Karten im Haupt- / Nebenmodus überschreiben und sicherstellen, dass meine Bindung immer wirksam ist.
Das funktioniert natürlich nicht:
(global-set-key "\C-i" 'some-function)
Es funktioniert in text-mode
, aber wenn ich es benutze lisp-mode
, C-i
wird es zurückgeworfen lisp-indent-line
.
Ich kann diese Bindung in lisp-mode
und in jedem anderen Modus einzeln durchgehen und überschreiben , aber es muss einen einfacheren Weg geben. Jedes Mal, wenn ich einen neuen Modus für einen neuen Dateityp installiere, muss ich zurückgehen und überprüfen, ob alle meine Tastenkombinationen nicht vom neuen Modus überschrieben werden.
Ich möchte dies tun, weil ich Bindungen emulieren möchte, die ich bereits von anderen Editoren gelernt und verwurzelt habe.
quelle
Als Ergänzung zu Scottfrazers Antwort habe ich Folgendes geschrieben, damit meine Tastenkombinationen Vorrang haben, auch wenn nachträglich geladene Bibliotheken eigene neue Keymaps einfügen.
Da Keymaps zur Kompilierungszeit generiert werden können,
load
schien dies der beste Ort dafür zu sein.quelle
Installieren
use-package
, bewerten und fertig:quelle
use-package
:Install package: use-package [No Match]
Ich habe diese Frage bei der Suche nach "emacs undefine org mode keybindings" gefunden, weil ich das vorhandene Cc Cb-Verhalten aufheben wollte, damit meine globale Map-Bury-Buffer in einem Org-Puffer funktioniert.
Dies war für mich die einfachste Lösung:
quelle
Obwohl die Antwort von Scottfrazer genau das ist, wonach Sie gefragt haben, werde ich für die Nachwelt eine andere Lösung erwähnen.
Aus dem Emacs-Handbuch :
Wenn Sie Ihre persönlichen globalen Bindungen an Cc plus einen Brief binden, sollten Sie "sicher" sein. Dies ist jedoch nur eine Konvention, und jeder Modus kann Ihre Bindungen weiterhin überschreiben.
quelle
Wenn Sie "immer die Tastenkombinationen in der Karte verwenden möchten, es sei denn, ich überschreibe sie explizit für eine bestimmte Moduszuordnung " und davon ausgehen möchten , dass Sie den Ansatz von scottfrazier verwenden , möchten Sie:
So
sollte die "\ Ci" -Bindung nur im aktuellen Puffer aus dem Nebenmodus entfernen. Warnung: Dies ist völlig ungetestet, scheint aber der richtige Ansatz zu sein. Der Punkt, an dem das übergeordnete Element festgelegt wird, anstatt nur den globalen Wert von my-keys-minor-mode-map zu kopieren, besteht darin, dass spätere Änderungen des globalen Werts automatisch im lokalen Wert berücksichtigt werden.
quelle
Ich glaube nicht, dass du kannst. Dies entspricht in etwa der Aussage, dass Sie eine globale Variable definieren möchten, die von lokalen Variablendeklarationen in Funktionen nicht ausgeblendet werden kann. Scope funktioniert einfach nicht so.
Es kann jedoch eine Möglichkeit geben, eine Elisp-Funktion zu schreiben, um die Modusliste zu durchlaufen und sie in jeder einzelnen für Sie neu zuzuweisen.
quelle
overriding-local-map
speziell entwickelt, um alle anderen Karten zu überschreiben. Es ist jedoch gefährlich, es zu benutzen.Wenn Sie dies nicht wirklich selbst tun möchten, sollten Sie nachsehen, ob es bereits jemand anderes getan hat.
Es gibt ein Paket für Emacs, das Ihre Windows-ähnlichen Tastenkombinationen enthält. Sie sollten es über Google finden können.
quelle
cua-mode
.