Bagaimana saya bisa menulis perintah emacs yang menyisipkan teks dengan string variabel pada posisi kursor saat ini?

12

Saya ingin menulis perintah emisp elisp yang memasukkan string tetap yang berisi bagian variabel pada posisi kursor saat ini:

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

di mana perintah harus meminta $STRINGdan menyisipkan seluruh teks.

Mengalir
sumber

Jawaban:

12

Elisp

Ini adalah fungsi elisp sederhana untuknya:

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

Fungsi ini meminta dalam minibuffer untuk string dan kemudian memasukkan semuanya pada titik. Untuk menggunakannya, Anda bisa meletakkannya di .emacs Anda dan memintanya melalui M-x labelnamerefatau mengikatnya ke kunci.

YASnippet

Jika Anda ingin menggunakan banyak konstruksi yang serupa, mungkin lebih mudah untuk menuliskannya sebagai yasnippets. Dengan YASnippet Anda dapat dengan mudah membuat snippet dengan perilaku serupa seperti di atas. Misalnya Anda dapat menggunakan yang berikut (Anda telah mengganti "keybinding" dengan keybinding yang tepat jika Anda menginginkan keybinding untuk itu):

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

Dengan ini Anda menulis foo dan tekan Tablangsung setelahnya untuk memperluasnya \label{$1} \index{\nameref{$1}}dan meminta $1.

NN
sumber