入力時に文字を文字列に置き換えます

Aug 20 2020

私は次のことをしたいと思います:$バッファに文字を入力するとすぐに<m>。に置き換えられるように、いくつかのモードをアクティブにします。

さらに良い$ことに<m></m>、入力すると、一致するタグペアの間にカーソルが置かれます。

ソリューションが迅速で汚れていても問題ありませんが、オンとオフを切り替えることができる必要があります。

コンテキスト:私が使用し始めました口実数学のテキストを書くために、基本的に「ラテックスは、XMLを満たしています」、。それは非常にうまく機能しますが、<m>常に入力しなければならないことは私の生産性を損ないます(私はすでにc-C ]タグを閉じるのを楽しんでいます)。

回答

1 ideasman42 Aug 20 2020 at 11:56

これは、略語モードを使用して実行できます。

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

上記のコードブロックは、emacsinitファイルにコピーして貼り付けることができます。


より高度なテンプレートについては、yasnippetsを調べてください。