** แก้ไข: ** ตั้งแต่การเขียนนี้ดูเหมือนว่าส่วนหนึ่งของคุณสมบัติที่ได้รับการดำเนินการโดยตรงในโหมดมาร์กดาวน์ ตรวจสอบความคิดเห็นนี้และลิงก์ในนั้น
องค์ประกอบ
มีสองวิธีที่คุณสามารถทำได้
- คุณสามารถเขียนคำสั่งที่รวบรวมรหัส markdown (โดยใช้คำสั่ง shell) และแสดง html ในบัฟเฟอร์
- คุณสามารถปรับแต่ง a-la org-mode ได้เองเพื่อทำให้บัฟเฟอร์ดูเหมือน markdown ที่ถูกเรนเดอร์
ฉันอธิบายวิธีใช้หมายเลข 2 ที่นี่เพียงคัดลอกโค้ดด้านล่างทั้งหมดไปยังไฟล์ init ของคุณ
เพิ่มกฎการล็อคแบบอักษร
ตัวแปรนี้ควบคุมวิธีการที่คุณต้องการดูรายการ เพิ่มพื้นที่บางส่วนเพื่อเยื้องรายการและใช้สัญลักษณ์แสดงหัวข้อย่อยที่สวย (ถ้าแบบอักษรของคุณสามารถแสดงได้)
(defvar endless/bullet-appearance
(propertize (if (char-displayable-p ?•) " •" " *")
'face 'markdown-list-face)
"String to be displayed as the bullet of markdown list items.")
นี่คือคำสั่งที่เพิ่มกฎจริงๆ มีหนึ่งรายการและอีกหนึ่งลิงก์
(require 'rx)
(defvar endless/markdown-link-regexp
"\\[\\(?1:[^]]+\\)]\\(?:(\\(?2:[^)]+\\))\\|\\[\\(?3:[^]]+\\)]\\)"
"Regexp matching a markdown link.")
(font-lock-add-keywords
'markdown-mode
'(("^ *\\(\\*\\|\\+\\|-\\|\\) "
1 `(face nil display ,endless/bullet-appearance) prepend)
(endless/markdown-link-regexp
1 '(face nil display "") prepend))
'append)
ทำให้ลิงก์สามารถแก้ไขได้
เนื่องจากเรากำลังใช้display
คุณสมบัติเพื่อซ่อนส่วนหนึ่งของลิงก์เราจำเป็นต้องบอกตัวอักษรให้ล็อคว่ามันควรจะลบคุณสมบัตินั้นทุกครั้งที่คุณลบส่วนหนึ่งของลิงค์ (ด้วยวิธีที่เรายังสามารถแก้ไขได้)
(add-hook 'markdown-mode-hook #'endless/markdown-font-lock)
(defun endless/markdown-font-lock ()
"Configure aggressive font-locking of `markdown-mode'."
(define-key markdown-mode-map "\C-c\C-l" #'endless/markdown-insert-link)
(add-to-list (make-local-variable 'font-lock-extra-managed-props) 'display))
นอกจากนี้เรายังสามารถกำหนดคำสั่งให้แก้ไขได้อย่างง่ายดายผูกไว้กับC-c C-l
เช่นในโหมดองค์กร
(defun endless/markdown-insert-link ()
"Insert or edit link at point."
(interactive)
(if (or (looking-at endless/markdown-link-regexp)
(and (ignore-errors (backward-up-list) t)
(or (looking-at endless/markdown-link-regexp)
(and (forward-sexp -1)
(looking-at endless/markdown-link-regexp)))))
(let ((data (endless/ask-for-link
(match-string-no-properties 1)
(or (match-string-no-properties 2)
(match-string-no-properties 3)))))
(if (match-string-no-properties 2)
(replace-match (cdr data) :fixedcase :literal nil 2)
(replace-match (cdr data) :fixedcase :literal nil 3))
(replace-match (car data) :fixedcase :literal nil 1))
(let ((data (endless/ask-for-link)))
(insert "[" (car data) "](" (cdr data) ")"))))
(defun endless/ask-for-link (&optional name link)
(cons (read-string "Text of the link: " name)
(read-string "URL of the link: " link)))
(ไม่บังคับ) กำหนดค่าใบหน้าบางส่วน
นั่นควรจะเพียงพอสำหรับคะแนนที่คุณร้องขอ หากคุณต้องการให้บัฟเฟอร์ของคุณดูเหมือนเครื่องหมาย SE มากยิ่งขึ้น
M-x customize-group RET markdown-faces
และเปลี่ยนสิ่งที่คุณเห็นว่าเหมาะสม ฉันทำการกำหนดค่าตัวเองและนี่คือสิ่งที่ฉันได้
(custom-set-faces
'(markdown-header-face-1 ((t (:inherit markdown-header-face :height 2.0))))
'(markdown-header-face-2 ((t (:inherit markdown-header-face :height 1.7))))
'(markdown-header-face-3 ((t (:inherit markdown-header-face :height 1.4))))
'(markdown-header-face-4 ((t (:inherit markdown-header-face :height 1.1))))
'(markdown-inline-code-face ((t (:inherit font-lock-constant-face :background "gainsboro"))))
'(markdown-link-face ((t (:inherit link))))
'(markdown-pre-face ((t (:inherit font-lock-constant-face :background "gainsboro")))))
ผล
นี่คือสิ่งที่คุณจะได้รับหลังจากการกำหนดค่า 2 ชุดแรก:
นี่คือสิ่งที่คุณจะได้รับหลังจากกำหนดค่าใบหน้าเช่นกัน มันพิสูจน์ได้ว่าสิ่งนี้ดูดีกว่าฉันจะยึดติดกับสิ่งที่กล่าวมาข้างต้น