Làm cách nào tôi có thể ngăn chế độ flycheck kiểm tra một số tệp nhất định?


9

Tôi đã cấu hình Emacs để mở các tệp có tên *.cfgtrong chế độ shell-script. Tất nhiên, đây là các tệp cấu hình, thay vì các tập lệnh shell, nhưng 90% thời gian nó thực hiện những gì tôi muốn (chủ yếu, dự đoán tốt về các khuôn mặt để nhận xét và gán biến). Tôi sử dụng chế độ flycheck và tôi thích nó đủ để global-flycheck-modekích hoạt. Vấn đề là, trong trường hợp *.cfgtệp, chế độ flycheck cho thấy rất nhiều lỗi không liên quan.

Có cách nào để vô hiệu hóa chế độ flycheck tự động dựa trên tên tệp hoặc đường dẫn đến tệp không? Cái gần nhất tôi thấy là flycheck-before-Cú pháp-check-hook ... Tôi có thể tưởng tượng việc dán vào kiểm tra đường dẫn hoặc tên tệp, nhưng nó chạy trước mỗi lần kiểm tra cú pháp (thay vì vô hiệu hóa hoàn toàn kiểm tra).

Câu trả lời:


10

Cách tốt

Đơn giản là không sử dụng Sh Mode cho các bộ đệm không chứa tập lệnh shell. Viết chế độ của riêng bạn thay vào đó. Đây là cách kinh điển để xử lý các tình huống như vậy trong Emacs.

Viết một chế độ chính tùy chỉnh là dễ dàng. Bạn chỉ có thể kế thừa từ Chế độ Sh để có được tất cả các tính năng và lệnh của nó, trong khi vẫn có chế độ độc lập. Chỉ cần thêm những điều sau đây để init.elbắt đầu đơn giản:

(define-derived-mode my-cfg-mode sh-mode "My CFg Mode"
  "A mode for my CFg files."
  (sh-set-shell "bash"))

(add-to-list 'auto-mode-alist '("\\.cfg\\'" . my-cfg-mode))

Vì chế độ mới này độc lập với Chế độ Sh, Flycheck sẽ không thử sử dụng trình kiểm tra cú pháp cho Chế độ Sh trong chế độ mới này.

Sử dụng một chế độ riêng biệt cũng có những ưu điểm khác: Bạn có thể thiết lập các phím bấm riêng, độc lập với Chế độ Sh hoặc mở rộng cú pháp tô sáng đặc biệt cho kiểu tệp cấu hình này.

Cách xấu

Là một cách nhanh chóng, bạn cũng có thể vô hiệu hóa lại Flycheck trong các tệp như vậy:

(add-hook 'flycheck-mode-hook #'my-keep-flycheck-off)

(defun my-keep-flycheck-off ()
  (when (and (eq major-mode 'sh-mode)
             (buffer-file-name)
             (string= (file-name-extension (buffer-file-name)) "cfg"))
    (flycheck-mode -1)))

Tuy nhiên, xin lưu ý rằng với tư cách là người duy trì Flycheck, tôi khuyên bạn nên chống lại giải pháp này. Hãy là một công dân Emacs tốt, và viết chế độ của riêng bạn, thực sự.


7

Bạn có thể dễ dàng vô hiệu hóa trình kiểm tra bằng cách sử dụng

(setq flycheck-disabled-checkers '(sh-shellscript sh-bash sh-zsh))

Tài liệu Flycheck bổ sung thêm thông tin ở đây .

Bạn cũng có thể vô hiệu hóa trình kiểm tra trong lambda auto-mode-alistđể chỉ tắt nó trên .cfgcác tệp.

(add-to-list 'auto-mode-alist
             '("\\.cfg\\'" . (lambda ()
                               (setq flycheck-disabled-checkers  (append '(sh-shellscript sh-bash sh-zsh) flycheck-disabled-checkers))
                               (shell-script-mode))))

1
Bạn có thể muốn có setqcông việc giảm giá trị hiện có flycheck-disabled-checkers, như trong (setq flycheck-disabled-checkers (append '(sh-shellscript sh-bash sh-zsh) flycheck-disabled-checkers)). Theo cách đó, nếu biến được sửa đổi ở nơi khác, bạn vẫn sẽ có những thứ khác trong đó.
zck

@zck Không có giá trị hiện tại của Viking cho biến này. Nó dự định được đặt cục bộ, hoặc setqtừ một hook hoặc với các biến cục bộ.
lunaryorn
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.