Ersetzen Sie ein Zeichen bei der Eingabe durch eine Zeichenfolge

Aug 20 2020

Ich möchte folgendes tun: Aktivieren Sie einen Modus, so dass, wenn ich das $Zeichen in meinen Puffer eingebe, es sofort durch ersetzt wird <m>.

Noch besser: Wenn ich $tippe, wird <m></m>der Cursor zwischen das passende Tag-Paar gesetzt und platziert.

Ich habe kein Problem damit, dass die Lösung schnell und schmutzig ist, aber ich müsste in der Lage sein, sie ein- und auszuschalten.

Kontext: Ich habe angefangen, PreTeXt zu verwenden , was im Grunde "LaTeX meets XML" ist, um einen mathematischen Text zu schreiben. Es funktioniert sehr gut, aber die ganze Zeit tippen zu müssen, <m>schadet meiner Produktivität (ich genieße es schon c-C ], die Tags zu schließen.)

Antworten

1 ideasman42 Aug 20 2020 at 11:56

Dies kann im abbrev-Modus erfolgen:

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

Der obige Codeblock kann in Ihre emacsInit-Datei kopiert und eingefügt werden.


Für fortgeschrittenere Vorlagen können Sie sich Folgendes ansehen: yasnippets .