Remplacer un caractère par une chaîne telle qu'elle est saisie

Aug 20 2020

Je voudrais faire ce qui suit: activer un mode pour que chaque fois que je tape le $caractère dans mon tampon, il soit immédiatement remplacé par <m>.

Encore mieux : lorsque je tape $, il place <m></m>et place le curseur entre la paire de balises correspondante.

Je n'ai aucun problème à ce que la solution soit rapide et sale, mais je devrais pouvoir l'activer et la désactiver.

Contexte : j'ai commencé à utiliser PreTeXt , qui est essentiellement "laTeX rencontre xml", pour écrire un texte mathématique. Cela fonctionne très bien, mais devoir taper <m>tout le temps nuit à ma productivité (je m'amuse déjà c-C ]à fermer les balises.)

Réponses

1 ideasman42 Aug 20 2020 at 11:56

Cela peut être fait en utilisant le mode abrégé :

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

Le bloc de code ci-dessus peut être copié-collé dans votre emacsfichier init.


Pour des modèles plus avancés, vous pouvez consulter : yasnippets .