แทนที่อักขระด้วยสตริงตามที่พิมพ์

Aug 20 2020

ฉันต้องการทำสิ่งต่อไปนี้: เปิดใช้งานโหมดบางโหมดเพื่อให้เมื่อฉันพิมพ์$อักขระในบัฟเฟอร์ของฉันมันจะถูกแทนที่ด้วย<m>ทันที

ยิ่งไปกว่านั้น: เมื่อฉันพิมพ์$จะวาง<m></m>และวางเคอร์เซอร์ระหว่างคู่แท็กที่ตรงกัน

ฉันไม่มีปัญหากับการแก้ปัญหาที่รวดเร็วและสกปรก แต่ฉันจะต้องสามารถเปิดและปิดได้

บริบท:ฉันเริ่มใช้PreTeXtซึ่งโดยพื้นฐานแล้วคือ "laTeX ตรงกับ 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ไฟล์เริ่มต้นของคุณได้


สำหรับ templating ที่สูงขึ้นคุณอาจต้องการที่จะดูเป็น: yasnippets