Как я могу написать команду emacs, которая вставляет текст с переменной строкой в ​​текущую позицию курсора?

12

Я хотел бы написать команду elisp emacs, которая вставляет фиксированную строку, содержащую переменную часть в текущей позиции курсора:

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

где команда должна запросить $STRINGи вставить весь текст.

поток
источник

Ответы:

12

Elisp

Вот простая функция elisp для этого:

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

Эта функция запрашивает строку в минибуфере, а затем вставляет ее в точку. Чтобы использовать его, вы можете поместить его в свой .emacs, а затем вызвать его через M-x labelnamerefили связать с ключом.

YASnippet

Если вы хотите использовать много подобных конструкций, может быть проще написать их как yasnippets. С YASnippet вы можете легко создать фрагмент с поведением, аналогичным описанному выше. Например, вы можете использовать следующее (вы должны заменить «связывание клавиш» на правильное связывание клавиш, если вы хотите связывание клавиш для него):

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

При этом вы пишете foo и сразу нажимаете, Tabчтобы развернуть его \label{$1} \index{\nameref{$1}}и запросить $1.

Н.Н.
источник