Jak napisać polecenie emacs, które wstawia tekst ze zmiennym łańcuchem w bieżącej pozycji kursora?

12

Chciałbym napisać polecenie elisp emacs, które wstawia stały ciąg znaków, który zawiera część zmienną w bieżącej pozycji kursora:

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

gdzie polecenie powinno wyszukać $STRINGi wstawić cały tekst.

Pływ
źródło

Odpowiedzi:

12

Elisp

Oto prosta funkcja elisp:

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

Ta funkcja odpytuje w minibuforze ciąg znaków, a następnie wstawia wszystko w punkcie. Aby go użyć, możesz umieścić go w .emacs, a następnie wywołać za pomocą M-x labelnamereflub powiązać z kluczem.

YASnippet

Jeśli chcesz użyć wielu podobnych konstrukcji, łatwiejsze może być napisanie ich jako yasnippets. Dzięki YASnippet możesz łatwo utworzyć fragment o podobnym działaniu jak powyżej. Na przykład możesz użyć następujących poleceń (zastąpiłeś „skrót klawiszowy” odpowiednim skrótem klawiszowym, jeśli chcesz go przypisać):

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

Dzięki temu piszesz foo i naciskasz Tabbezpośrednio po nim, aby go rozwinąć \label{$1} \index{\nameref{$1}}i zapytać o $1.

NN
źródło