如何编写在当前光标位置插入带有变量字符串的文本的 emacs 命令?

Flo*_*low 13 emacs elisp

我想编写一个 elisp emacs 命令,该命令在当前光标位置插入一个包含可变部分的固定字符串:

\label{$STRING} \index{\nameref{$STRING}}
Run Code Online (Sandbox Code Playgroud)

命令应该查询$STRING并插入整个文本的位置。

N.N*_*.N. 13

埃利斯普

这是一个简单的elisp函数:

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

这个函数在 minibuffer 中查询字符串,然后在点插入它。要使用它,您可以将它放在 .emacs 中,然后通过调用它M-x labelnameref或将它绑定到一个键。

YASnippet

如果您想使用许多类似的结构,将它们编写为 yasnippets 可能会更容易。使用YASnippet,您可以轻松创建具有与上述类似行为的代码段。例如,您可以使用以下内容(如果您想要一个键绑定,您可以用适当的键绑定替换“键绑定”):

# -*- mode: snippet -*-
# name: foo
# key: foo
# binding: "keybinding"
# --
\label{$1} \index{\nameref{$1}}
Run Code Online (Sandbox Code Playgroud)

有了这个,你写 foo 并在Tab之后直接按下以将其扩展为\label{$1} \index{\nameref{$1}}并查询$1.