{{{…}}} Sineklik modu ve sineklik-tamponunda nasıl hariç tutulur?


11

Emacs'ımda birçok MoinMoinWiki sayfasını düzenledim ve seviyorum flyspell-mode. Önceden biçimlendirilmiş öğeler {{{...}}}(birden çok satırda) ve "backtick text backtick" genellikle yazım denetiminin anlamı olmayan programlama kod snippet'lerini içerir.

Ben yapılandırabilir miyim ispell/ flyspellprogramlama kod eklemek için olmasın?

Misal:

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

Yanıtlar:


15

Değişken ispell-skip-region-alist, arabelleği yazım denetimi yaparken istediğiniz şeyi yapar, ancak sinek için değil. Bunun gibi bir giriş ekleyin

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

Ne yazık ki, belirli bölgeleri görmezden gelmek için sineklik almak o kadar kolay değil. flyspell-generic-check-word-predicateBir işlev olan kullanmak zorunda . Birkaç mod bunu zaten tanımlamaktadır, bu nedenle aşağıdakileri bu işlevlere tavsiye olarak eklemeniz gerekir. Basitlik için varsayalım text-mode, ancak tanımlanmayan bir modu ( aşağıda kullandım ) kullanıyorsunuz . Ardından, .emac'lerinize aşağıdakileri ekleyebilirsiniz:

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

mükemmel! Mod çizgim dedi (Fundamental Fly). Bağlamak flyspell-modeişe yaramadı, ama fundamental-modebunun yerine text-modeiyi görünüyor.
towi

Hmm ... her ikisini de nasıl ele alacağım: ^{{{... ^}}}regex ve Backtick-word-Backtick olanı?
towi

Backtick-text-backtick için destek ekledim. Bu tür ifadelerin yalnızca tek bir satırda göründüğünü varsayar; bu satırdan önce satırda çift veya tek sayıda ters çentik olup olmadığını sayar.
Ivan Andrus
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.