Sostituisci un carattere con una stringa mentre viene digitato
Vorrei fare quanto segue: attivare una modalità in modo che ogni volta che digito il $
carattere nel mio buffer, venga immediatamente sostituito da <m>
.
Ancora meglio: quando digito $
, inserisce <m></m>
e posiziona il cursore tra la coppia di tag corrispondente.
Non ho alcun problema con la soluzione rapida e sporca, ma dovrei essere in grado di accenderla e spegnerla.
Contesto: ho iniziato a usare PreTeXt , che è fondamentalmente "laTeX incontra xml", per scrivere un testo matematico. Funziona molto bene, ma dover digitare <m>
tutto il tempo sta danneggiando la mia produttività (mi sto già divertendo c-C ]
a chiudere i tag.)
Risposte
Questo può essere fatto usando la modalità abbreviata:
;; 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))))
Il blocco di codice sopra può essere copiato e incollato nel emacs
file init.
Per modelli più avanzati potresti voler esaminare: yasnippets .