วิธียกเว้น {{{}}}} ในโหมด flyspell-และ flyspell-buffer อย่างไร


11

ฉันจะแก้ไขจำนวนมากMoinMoinWikiหน้าใน emacs 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

อืม ... ฉันจะจัดการกับทั้งสองอย่างไร: ^{{{... ^}}}regex และ Backtick-word-Backtick one?
towi

ฉันเพิ่มการสนับสนุนสำหรับ backtick-text-backtick สันนิษฐานว่าข้อความดังกล่าวปรากฏในบรรทัดเดียว - นับว่ามี backticks เป็นจำนวนคู่หรือคี่บนบรรทัดก่อนหน้า
Ivan Andrus
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.