flycheck-modeが特定のファイルをチェックしないようにするにはどうすればよいですか?


9

*.cfgshell-script-modeで指定されたファイルを開くようにEmacsを構成しました。もちろん、これらはシェルスクリプトではなく構成ファイルですが、90%の時間で、私が望んでいることを実行します(主に、コメントや変数の割り当て用の面については適切な推測です)。私はflycheck-modeを使用していますがglobal-flycheck-mode有効にするのに十分気に入っています。問題は、*.cfgファイルの場合、flycheck-modeが関連しない多くのエラーを示唆していることです。

ファイル名またはファイルへのパスに基づいてflycheckモードを自動的に無効にする方法はありますか?私が見た中で最も近いものはflycheck-before-syntax-check-hookです...パスまたはファイル名のチェックを続けると想像できますが、それは各構文チェックの前に実行されます(チェックを完全に無効にするのではなく)。

回答:


10

良い方法

シェルスクリプトを含まないバッファにはShモードを使用しないでください。代わりに独自のモードを記述してください。これは Emacsでこのような状況を処理するための標準的な方法です。

カスタムメジャーモードを書くのは簡単です。Shモードから継承するだけで、独立したモードを維持しながら、すべての機能とコマンドを取得できます。次のコードをに追加するだけでinit.el簡単に開始できます。

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

この新しいモードはShモードから独立しているため、Flycheckはこの新しいモードでShモードの構文チェッカーを使用しようとしません。

別のモードを使用することには、他の利点もあります。Shモードとは独立して独自のキーバインディングを設定したり、このスタイルの構成ファイル専用の構文強調表示を拡張したりできます。

悪い方法

簡単なハックとして、そのようなファイルでFlycheckを再び無効にすることもできます。

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

ただし、Flycheckのメンテナーとしては、このソリューションはお勧めしません。Emacsの優れた市民になり、独自のモードを書いてください。


7

あなたは簡単にチェッカーを無効にすることができます

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

Flycheckのドキュメントには、ここにさらに情報が追加されてい ます

ラムダでチェッカーをauto-mode-alist無効にして、.cfgファイルでのみ無効にすることもできます。

(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
あなたは持っているしたい場合がありますsetqの既存の値から外れ仕事をflycheck-disabled-checkersのように、(setq flycheck-disabled-checkers (append '(sh-shellscript sh-bash sh-zsh) flycheck-disabled-checkers))。このようにして、変数が他の場所で変更された場合でも、他のものが残っています。
zck 2014年

@zckこの変数には「既存の」値はありません。これsetqは、フックから、またはローカル変数を使用して、ローカルで設定することを目的としています。
lunaryorn 2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.