Comment puis-je écrire une commande emacs qui insère un texte avec une chaîne variable à la position actuelle du curseur?

12

Je voudrais écrire une commande elisp emacs qui insère une chaîne fixe qui contient une partie variable à la position actuelle du curseur:

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

où la commande doit rechercher $STRINGet insérer le texte entier.

Couler
la source

Réponses:

12

Elisp

Voici une fonction elisp simple pour cela:

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

Cette fonction interroge dans le mini-tampon pour la chaîne, puis insère tout au point. Pour l'utiliser, vous pouvez le mettre dans votre .emacs puis l'invoquer via M-x labelnamerefou le lier à une clé.

YASnippet

Si vous souhaitez utiliser de nombreuses constructions similaires, il pourrait être plus facile de les écrire sous forme de yasnippets. Avec YASnippet, vous pouvez facilement créer un extrait avec un comportement similaire à celui ci-dessus. Par exemple, vous pouvez utiliser ce qui suit (vous avez remplacé "keybinding" par un bon keybinding si vous voulez un raccourci clavier pour cela):

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

Avec cela, vous écrivez foo et appuyez Tabdirectement après pour l'étendre \label{$1} \index{\nameref{$1}}et le rechercher $1.

NN
la source