Ich fange gerade an Emacs zu lernen (woohoo!) und ich habe ziemlich glücklich in meinem .emacs
herumgespuckt. Leider kenne ich Lisp noch nicht, also habe ich Probleme mit den Grundlagen.
Ich habe bereits ein paar Tasten neu zugeordnet, bis ich mein Muskelgedächtnis repariere:
%Vor% Das ist in Ordnung. Aber wie kann ich eine Taste dazu bringen, mehrere Tasten zu simulieren? Zum Beispiel, ich weiß nicht, machen <f1>
dasselbe wie C-u 2 C-x }
(Erweitern Sie den Puffer um zwei Zeichen).
Eine Möglichkeit ist es, diese C-x }
Aufrufe shrink-window-horizontally
nachzuschlagen und eine Art Lambda-Sache zu machen. Dies ist natürlich die gepflegte und elegante Art und Weise (wie machst du das?). Aber sicherlich gibt es eine Möglichkeit, <f1>
zu definieren, um die Tastenanschläge C-u 2 C-x }
?
Für alles, was langfristig ist, würde ich den Ansatz von seh empfehlen, da dieser in den meisten Situationen natürlich robuster ist. Es erfordert natürlich etwas mehr Arbeit und Know-how, aber es lohnt sich allemal:)
angus 'Ansatz ist wie eine verkürzte Version der Tastaturmakros-Funktion, die Emacs seinen Namen gibt (und etwas einfacher zu verwenden als Makros für das betreffende Beispiel). Sie sollten jedoch auf jeden Fall auf Makros achten - sie können äußerst nützlich sein, und für etwas Komplizierteres wird es schnell viel einfacher, einen dynamisch zu speichern, als alle einzelnen Schlüssel manuell auszugeben.
Hier ist die Zusammenfassung, die ich selbst von den wichtigsten Bits geschrieben habe:
%Vor%Wenn wir mit dem Beispiel aus der Frage spielen, werden Sie sehen, wie einige dieser Dinge zusammenhängen ...
Zunächst können Sie das Makro mit F3 Cu 2 Cx <}
Sie könnten es dann zeitweilig an F1 mit Cx Ck b F1 binden > (Das ist nicht wahr, wenn F1 momentan ein Präfix-Schlüssel für eine existierende Keymap ist, wenn Sie es interaktiv eingeben, wird einfach der Rest angezeigt. Sie können dies im Code mit (global-set-key (kbd "<f1>") ...)
umgehen, aber ich würde vorschlagen, bei reservierte Bindungen ).
Wenn Sie dann describe-key
( Ch k ) verwenden, um zu prüfen, was an diesen Schlüssel gebunden ist, zeigt Emacs Ihnen einen (lambda)
Ausdruck, den Sie kopieren könnten zu Ihrer init-Datei, wenn Sie dies wünschen.
Alternativ können Sie das Makro benennen und Emacs bitten, den Code in den aktuellen Puffer einzufügen:
Mx < name-last-kbd-macro
RET <(insert-kbd-macro
RET RET
Dieser Code sieht anders aus als der von describe-key
angezeigte Lambda-Ausdruck, aber wenn Sie das eingefügte Makro auswerten, sehen Sie die Äquivalenz. Sie können ebenfalls zeigen, dass der (kbd "...")
-Ausdruck auch denselben Wert ergibt, und daher sind dies alles nur alternative Möglichkeiten, dasselbe zu tun.
(Sie können den * scratch * -Puffer verwenden, um den Code auszuwerten, indem Sie den Punkt nach dem Ende des Ausdrucks verschieben und entweder Cx Ce eingeben, um den Wert anzuzeigen der Minipuffer oder Cj , um den Wert in den Puffer einzufügen.
Beachten Sie, dass der eingegebene Code fset
verwendet, um das Makro einem Symbol zuzuweisen. Sie könnten das Makro an einen Schlüssel binden, indem Sie (fset)
ausführen und dann dieses Symbol einem Schlüssel mit (global-set-key)
zuweisen, oder Sie können (fset)
ignorieren und den Makrowert einfach direkt zuweisen. Dies entspricht natürlich direkt der Antwort von Angus.
Bearbeiten: Ich habe gerade bemerkt, dass es eine kmacro-name-last-macro
Funktion gibt, die an Cx Ck n gebunden ist, die in der Form fast identisch ist name-last-kbd-macro
, aber die die Lambda-Ausdrucksform erzeugt, die bei Verwendung von kmacro-bind-to-key
( Cx Ck b ) und describe-key
angezeigt wird.
Ich werde shrink-window-horizontally
als Beispielfunktion verwenden, aber Sie können die Idee auf alle Bindungen, die Sie definieren möchten, verallgemeinern.
Wenn Sie zwei als Standardgröße verwenden möchten, um das Fenster zu verkleinern, anstatt eines, versuchen Sie Folgendes:
%Vor% Dies bindet den F9 Schlüssel an eine interaktive Funktion, die ein Präfix-Argument akzeptiert . Wenn Sie einfach F9 drücken, werden Sie pass kein Argument , das den Standardwert 2 vorruft, da der Parameter n
nil
als Argument erhält. Wenn Sie jedoch beispielsweise C-u 10 F9 drücken, übergeben Sie zehn als Argument für n
. Dadurch können Sie Ihre Bindung flexibler nutzen.
Tags und Links emacs elisp key-bindings