입력 할 때 문자를 문자열로 교체

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

위의 코드 블록은 emacs초기화 파일에 복사하여 붙여 넣을 수 있습니다 .


고급 템플릿을 보려면 yasnippets 를 살펴보세요 .