Wie kann ich einen emacs-Befehl schreiben, der an der aktuellen Cursorposition einen Text mit einer variablen Zeichenfolge einfügt?

12

Ich möchte einen elisp emacs-Befehl schreiben, der eine feste Zeichenfolge einfügt, die an der aktuellen Cursorposition einen variablen Teil enthält:

\label{$STRING} \index{\nameref{$STRING}}

wo der Befehl $STRINGden gesamten Text abfragen und einfügen soll.

Fließen
quelle

Antworten:

12

Elisp

Hier ist eine einfache Elisp-Funktion dafür:

(defun labelnameref (string)
  "Insert \label{ARG} \index{\nameref{ARG}} at point"
  (interactive "sString for \\label and \\nameref: ")
  (insert "\\label{" string "} \\index{\\nameref{" string "}}"))

Diese Funktion fragt im Minibuffer nach der Zeichenfolge und fügt dann alles an der Stelle ein. Um es zu verwenden, können Sie es in Ihre .emacs einfügen und es dann über aufrufen M-x labelnamerefoder an einen Schlüssel binden.

YASnippet

Wenn Sie viele ähnliche Konstrukte verwenden möchten, ist es möglicherweise einfacher, sie als Yasnippets zu schreiben. Mit YASnippet können Sie ganz einfach ein Snippet mit einem ähnlichen Verhalten wie oben erstellen. Sie können beispielsweise Folgendes verwenden (Sie müssen "Tastenkombination" durch eine ordnungsgemäße Tastenkombination ersetzen, wenn Sie eine Tastenkombination dafür wünschen):

# -*- mode: snippet -*-
# name: foo
# key: foo
# binding: "keybinding"
# --
\label{$1} \index{\nameref{$1}}

Damit schreiben Sie foo und drücken Tabdirekt danach, um es zu erweitern \label{$1} \index{\nameref{$1}}und abzufragen $1.

NN
quelle