Làm cách nào để loại trừ {{{}}}} trong chế độ flyspell và flyspell-buffer?


11

Tôi chỉnh sửa rất nhiều trang MoinMoinWiki trong emacs của mình và yêu thích flyspell-mode. Nội dung được định dạng sẵn trong {{{...}}}(trong nhiều dòng) cũng như "backtick văn bản backtick" thường chứa các đoạn mã lập trình không có ý nghĩa để kiểm tra chính tả.

Tôi có thể cấu hình ispell/ flyspellkhông bao gồm mã lập trình không?

Thí dụ:

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

Câu trả lời:


15

Biến ispell-skip-region-alistthực hiện những gì bạn muốn khi kiểm tra chính tả bộ đệm, nhưng không phải cho flyspell. Chỉ cần thêm một mục như

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

Thật không may, không dễ dàng để có được flyspell để bỏ qua các khu vực nhất định. Bạn phải sử dụng flyspell-generic-check-word-predicateđó là một chức năng. Một số chế độ đã xác định điều này, do đó bạn sẽ phải thêm lời khuyên dưới đây vào các chức năng đó. Tôi sẽ giả sử cho đơn giản mặc dù bạn đang sử dụng một chế độ (tôi đã sử dụng text-modebên dưới) mà không được xác định. Sau đó, bạn có thể thêm các mục sau vào .emacs của mình:

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

hoàn hảo! Chế độ của tôi nói (Fundamental Fly). Móc nó vào flyspell-modekhông hoạt động, nhưng fundamental-modethay vào đó text-modecó vẻ tốt.
Towi

Hmm ... làm thế nào để tôi xử lý cả hai: ^{{{... ^}}}regex và Backtick-word-Backtick?
Towi

Tôi đã thêm hỗ trợ cho backtick-text-backtick. Nó giả định rằng các câu lệnh như vậy chỉ xuất hiện trên một dòng duy nhất, nó sẽ tính xem có số lượng backticks chẵn hay lẻ trên dòng trước nó hay không.
Ivan Andrus
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.