Reemplazar un carácter con una cadena a medida que se escribe

Aug 20 2020

Me gustaría hacer lo siguiente: activar algún modo para que cuando escriba el $carácter en mi búfer, sea reemplazado inmediatamente por <m>.

Aún mejor: cuando escribo $, pone <m></m>y coloca el cursor entre el par de etiquetas coincidentes.

No tengo ningún problema con que la solución sea rápida y sucia, pero necesitaría poder encenderla y apagarla.

Contexto: comencé a usar PreTeXt , que es básicamente "laTeX se encuentra con xml", para escribir un texto matemático. Funciona muy bien, pero tener que escribir <m>todo el tiempo está dañando mi productividad (ya estoy disfrutando c-C ]de cerrar las etiquetas).

Respuestas

1 ideasman42 Aug 20 2020 at 11:56

Esto se puede hacer usando el modo abreviado:

;; 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))))

El bloque de código anterior se puede copiar y pegar en su emacsarchivo de inicio.


Para obtener plantillas más avanzadas, es posible que desee consultar: yasnippets .