** EDIT: ** Kể từ khi viết bài này, có vẻ như một phần của các tính năng đã được triển khai trực tiếp trong chế độ đánh dấu. Kiểm tra bình luận này , và các liên kết trong đó.
Cấu hình
Có hai cách tiếp cận bạn có thể thực hiện.
- Bạn có thể viết một lệnh biên dịch mã đánh dấu (sử dụng lệnh shell) và hiển thị html trong bộ đệm.
- Bạn có thể thực hiện một số tùy chỉnh a-la org-mode để làm cho bộ đệm trông giống như đánh dấu kết xuất.
Tôi giải thích ở đây cách thực hiện số 2. Đơn giản chỉ cần sao chép tất cả các mã dưới đây vào tệp init của bạn.
Thêm quy tắc khóa phông chữ
Biến này kiểm soát cách bạn muốn danh sách nhìn. Nó thêm một số khoảng trống để thụt lề danh sách và sử dụng một dấu đầu dòng đẹp (nếu phông chữ của bạn có thể hiển thị nó).
(defvar endless/bullet-appearance
(propertize (if (char-displayable-p ?•) " •" " *")
'face 'markdown-list-face)
"String to be displayed as the bullet of markdown list items.")
Đây là lệnh thực sự thêm các quy tắc. Có một cho danh sách và một cho các liên kết.
(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)
Làm cho liên kết có thể chỉnh sửa
Vì chúng tôi đang sử dụng thuộc display
tính để ẩn một phần của liên kết, chúng tôi cần nói với khóa phông chữ rằng nó sẽ xóa thuộc tính đó bất cứ khi nào bạn xóa một phần của liên kết (theo cách đó chúng tôi vẫn có thể chỉnh sửa nó).
(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))
Chúng ta cũng có thể định nghĩa một lệnh để chỉnh sửa nó dễ dàng, ràng buộc C-c C-l
, như trong chế độ org.
(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)))
(Tùy chọn) Định cấu hình một số khuôn mặt
Điều đó là đủ cho các điểm bạn yêu cầu. Nếu bạn muốn đệm của bạn trông thậm chí nhiều hơn như SE markdown, cuộc gọi
M-x customize-group RET markdown-faces
và thay đổi những gì bạn thấy phù hợp. Tôi đã tự cấu hình, và đây là những gì tôi có.
(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")))))
Các kết quả
Đây là những gì bạn sẽ nhận được sau 2 bộ cấu hình đầu tiên:
Đây là những gì bạn sẽ nhận được sau khi cấu hình khuôn mặt. Không thể tranh cãi liệu điều này có tốt hơn không, cá nhân tôi sẽ gắn bó với cái ở trên.