Как я могу написать команду emacs, которая вставляет текст с переменной строкой в текущую позицию курсора?
Я хотел бы написать команду elisp emacs, которая вставляет фиксированную строку, содержащую переменную часть в текущей позиции курсора:
\label{$STRING} \index{\nameref{$STRING}}
где команда должна запросить $STRING
и вставьте весь текст.
1 ответ
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, а затем вызвать его через Mx 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
,