如何在flyspell模式和flyspell-buffer中排除{{{…}}}?


11

我在emacs中编辑了很多MoinMoinWiki页面,并喜欢它flyspell-mode。预格式化的内容{{{...}}}(多行显示)以及“反引号文本反引号”通常包含编程代码段,这些代码段对于拼写检查没有意义。

我可以配置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

Answers:


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似乎罚款。
2011年

嗯...我该如何同时处理^{{{... ^}}}正则表达式和Backtick-word-Backtick两者?
2011年

我添加了对backtick-text-backtick的支持。它假定这样的语句仅出现在一行上,它计算在它之前的行上是否有偶数或奇数个反引号。
伊万·安德鲁斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.