Ganti karakter dengan string seperti yang diketik

Aug 20 2020

Saya ingin melakukan hal berikut: aktifkan beberapa mode sehingga ketika saya mengetik $karakter di buffer saya, itu segera diganti oleh <m>.

Bahkan lebih baik: saat saya mengetiknya $meletakkan <m></m>dan menempatkan kursor di antara pasangan tag yang cocok.

Saya tidak memiliki masalah dengan solusi yang cepat dan kotor, tetapi saya harus dapat menghidupkan dan mematikannya.

Konteks: Saya sudah mulai menggunakan PreTeXt , yang pada dasarnya adalah "laTeX memenuhi xml", untuk menulis teks matematika. Ini berfungsi dengan sangat baik, tetapi harus mengetik <m>sepanjang waktu merusak produktivitas saya (saya sudah senang c-C ]menutup tag.)

Jawaban

1 ideasman42 Aug 20 2020 at 11:56

Ini dapat dilakukan dengan menggunakan mode singkatan:

;; Hook to go back N chars after completion.
(defun my-abbrev-back-4-no-self-insert ()
  (progn
    (forward-char -4)
    t))
(put 'my-abbrev-back-4-no-self-insert 'no-self-insert t)

(define-abbrev-table
  'global-abbrev-table
  (list
    (list "$" "<m></m>" 'my-abbrev-back-4-no-self-insert 0)
    ;; More typical examples of abbrev mode usage.
    (list "btw" "by the way" nil 3)
    (list "pov" "point of view" nil 1)))

;; Enable abbrev mode.
(add-hook 'after-change-major-mode-hook
  (lambda ()
    (when (or (derived-mode-p 'prog-mode)
              (derived-mode-p 'text-mode))
      (abbrev-mode 1))))

Blok kode di atas dapat disalin-tempel ke emacsfile init Anda .


Untuk template yang lebih canggih, Anda mungkin ingin melihat: yasnippets .