flyspell-modeおよびflyspell-bufferで{{{…}}}を除外する方法は?


11

私はemacsで多くのMoinMoinWikiページを編集し、flyspell-mode{{{...}}}(複数行の)事前フォーマット済みのものと「backtick text backtick」には、通常、スペルチェックに意味のないプログラミングコードのスニペットが含まれています。

プログラミングコードを含めるispell/ flyspell含めないように構成できますか?

例:

Bla bla lorem ipsum die Standardcontainer wie `vector` eine
''Methode'' haben, die ein einzelnes Argument nimmt, also
`vector<T>::swap(vector<T)>&)`. Bla bla und diese `swap`-Methoden sind
von dieser Sorte. Warum das so ist, sehen wir gleich. Bla bla
was '''kanonisch''' ist bla bla Template-Funktion<<tlitref(stdswap)>>

{{{#!highlight c++ title="Man könnte 'std::swap@LT@@GT@' spezialisieren"
namespace std {
  template<> // wir können durchaus im namespace std spezialisieren
  void swap<Thing>(Thing&, Thing&) {
    // ...hier swappen...
  }
}
}}}

Nun, das würde sicherlich in diesem Fall helfen, doch es bleibt ein
größeres Problem: Eine teilweise Spezialisierung lorem ipsum bla bla

回答:


15

変数ispell-skip-region-alistは、バッファのスペルチェック時に必要な処理を行いますが、flyspellの処理は行いません。次のようなエントリを追加するだけです

(add-to-list 'ispell-skip-region-alist
             '("^{{{" . "^}}}"))

残念ながら、特定の地域を無視するためにflyspellを取得するのは簡単ではありません。flyspell-generic-check-word-predicateどの関数を使用する必要があります。いくつかのモードはすでにこれを定義しているので、それらの機能へのアドバイスとして以下を追加する必要があります。簡単にするために、text-mode定義されていないモード(以下で使用)を使用していると仮定します。その後、次を.emacsに追加できます。

(defun flyspell-ignore-verbatim ()
  "Function used for `flyspell-generic-check-word-predicate' to ignore {{{ }}} blocks."
  (save-excursion
    (widen)
    (let ((p (point))
          (count 0))
      (not (or (and (re-search-backward "^{{{" nil t)
                    (> p (point))
                    ;; If there is no closing }}} then assume we're still in it
                    (or (not (re-search-forward "^}}}" nil t))
                        (< p (point))))
               (eq 1 (progn (while (re-search-backward "`" (line-beginning-position) t)
                              (setq count (1+ count)))
                            (- count (* 2 (/ count 2))))))))))
(put 'text-mode 'flyspell-mode-predicate 'flyspell-ignore-verbatim)

完璧!私のモードラインは言った(Fundamental Fly)。引っ掛けてもflyspell-modeうまくいきませんでしたが、fundamental-mode代わりにtext-modeうまくいくようです。
towi

うーん...両方の処理方法:^{{{... ^}}}正規表現とBacktick-word-Backtickのどちらですか?
トウィ

backtick-text-backtickのサポートを追加しました。このようなステートメントは1行にのみ表示されると想定しています。その前の行にバックティックが偶数か奇数かをカウントします。
イヴァンアンドラス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.