Wie kann ich verhindern, dass der Flycheck-Modus bestimmte Dateien überprüft?


9

Ich habe Emacs so konfiguriert, dass Dateien mit dem Namen *.cfgim Shell-Script-Modus geöffnet werden . Dies sind natürlich eher Konfigurationsdateien als Shell-Skripte, aber in 90% der Fälle macht es das, was ich will (hauptsächlich gute Vermutungen über Gesichter für Kommentare und Variablenzuweisungen). Ich benutze den Flycheck-Modus und es gefällt mir genug, um ihn global-flycheck-modeaktiviert zu haben . Das Problem ist, dass im Fall von *.cfgDateien der Flycheck-Modus viele Fehler vorschlägt, die nicht relevant sind.

Gibt es eine Möglichkeit, den Flycheck-Modus automatisch basierend auf dem Dateinamen oder dem Pfad zur Datei zu deaktivieren? Das nächste, was ich gesehen habe, ist flycheck-before-syntax-check-hook ... Ich könnte mir vorstellen, eine Prüfung auf Pfad oder Dateinamen durchzuführen, aber sie wird vor jeder Syntaxprüfung ausgeführt (anstatt die Prüfungen vollständig zu deaktivieren).

Antworten:


10

Der gute Weg

Verwenden Sie den Sh-Modus einfach nicht für Puffer, die keine Shell-Skripte enthalten. Schreiben Sie stattdessen Ihren eigenen Modus. Dies ist die kanonische Methode , um mit solchen Situationen in Emacs umzugehen.

Das Schreiben eines benutzerdefinierten Hauptmodus ist einfach. Sie können einfach vom Sh-Modus erben, um alle Funktionen und Befehle abzurufen, während Sie dennoch über einen unabhängigen Modus verfügen. Fügen Sie init.elfür einen einfachen Start einfach Folgendes hinzu :

(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))

Da dieser neue Modus unabhängig vom Sh-Modus ist, versucht Flycheck in diesem neuen Modus nicht, Syntaxprüfer für den Sh-Modus zu verwenden.

Die Verwendung eines separaten Modus bietet noch weitere Vorteile: Sie können unabhängig vom Sh-Modus eigene Tastenkombinationen einrichten oder die Syntaxhervorhebung speziell für diesen Stil von Konfigurationsdateien erweitern.

Der schlechte Weg

Als schnellen Hack können Sie Flycheck in solchen Dateien auch einfach wieder deaktivieren:

(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)))

Beachten Sie jedoch, dass ich als Flycheck-Betreuer von dieser Lösung abraten würde. Sei ein guter Emacs-Bürger und schreibe wirklich deinen eigenen Modus.


7

Sie können Prüfer einfach mit deaktivieren

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

In der Flycheck-Dokumentation finden Sie hier weitere Informationen .

Sie können Checker in einem Lambda auch deaktivieren auto-mode-alist, damit es nur für .cfgDateien deaktiviert wird .

(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
Möglicherweise möchten Sie, dass die setqArbeit vom vorhandenen Wert von flycheck-disabled-checkerswie in abweicht (setq flycheck-disabled-checkers (append '(sh-shellscript sh-bash sh-zsh) flycheck-disabled-checkers)). Auf diese Weise haben Sie, wenn die Variable an anderer Stelle geändert wird, immer noch die anderen Dinge darin.
— Zck

@zck Für diese Variable gibt es keinen "vorhandenen" Wert. Es soll lokal festgelegt werden, entweder mit setqeinem Hook oder mit lokalen Variablen.
— Mondhorn
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.