Làm cách nào để tạo bảng cú pháp đơn giản cho chế độ chính?


8

Tôi đang cố gắng hiểu cách các bảng cú pháp hoạt động, nhưng chế độ chính tối thiểu của tôi không làm nổi bật bất cứ điều gì.

Tôi đã viết elisp sau, được cho là để làm nổi bật các bình luận:

(defconst my-yaml-mode-syntax-table
  (let ((table (make-syntax-table)))
    (modify-syntax-entry ?# "<" table)
    (modify-syntax-entry ?\n ">" table)
    table)
  "Syntax table for `my-yaml-mode'.")

(define-derived-mode my-yaml-mode fundamental-mode "My YAML"
  "testing"
  :syntax-table my-yaml-mode-syntax-table)

Tuy nhiên, đưa ra một tập tin:

# foo
# bar
baz

Nếu tôi kích hoạt chế độ chính của mình với M-x my-yaml-mode, tôi sẽ không nhận được bất kỳ tô sáng nào. C-u C-x =cho thấy rằng không có khuôn mặt đã được áp dụng.


M-;chèn đúng #không? Nếu có, bảng cú pháp được áp dụng. Bạn nên xem xét các thông số kỹ thuật khóa phông chữ để có được tô sáng cú pháp.
T. Verron

1
M-;được ràng buộc comment-dwimtừ newcomment.el, sử dụng comment-startchứ không phải bảng cú pháp. AIUI.
Wilfred Hughes

Hừm, thực sự xin lỗi. Thay vào đó, bạn có thể đặt điểm trên a #và nhấn C-u C-x =, đầu ra sẽ chứa dòng syntax: < which means: comment.
T. Verron

Quả thực là như vậy! Vì vậy, nếu bảng cú pháp của tôi là chính xác và đang được áp dụng, tại sao không có điểm nhấn nào?
Wilfred Hughes

1
Sau khi thử nghiệm với mã của bạn, nó chỉ đơn giản là vấn đề bật font-lock-modetrong my-yaml-modebộ đệm của bạn . :)
T. Verron

Câu trả lời:


8

Đó là chính xác, nhưng nó không được tái cấu trúc chỉ vì bạn thay đổi các chế độ chính.

Kích hoạt chế độ chính của bạn và đưa con trỏ của bạn vào bình luận sau đó chạy M-x eval-expression (syntax-ppss-context (syntax-ppss (point))), nó sẽ mang lại bình luận 'và bạn sẽ thấy rằng bảng cú pháp được thiết lập chính xác.

Một sửa chữa đơn giản sẽ là gọi (font-lock-fontify-buffer)khi kích hoạt chế độ của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.