Как я могу написать команду 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,

Другие вопросы по тегам