Hinzufügen dateispezifischer guter Wörter zur internen vim-Wortliste (über modeline)

9

Ist es möglich, korrekt geschriebene Wörter über modeline zur internen Wortliste von vim hinzuzufügen? Oder eine andere dateispezifische Methode?

Vim kann der temporären internen Wortliste über den Schlüsselbefehl zGoder Wörter hinzufügen :spellgood! {word}. Kann das auch mit der Modeline gemacht werden?

Ein Beispiel wäre der folgende Text, in dem die Akronyme "RAS" und "RAP" bei der Verwendung der Rechtschreibprüfung von vim als gute Wörter angesehen werden sollen.

RAS-Syndrom (kurz für "redundantes Akronym-Syndrom-Syndrom"), auch bekannt als PNS-Syndrom ("PIN-Nummer-Syndrom-Syndrom", das sich auf "Personal Identification Number Number-Syndrom-Syndrom" erweitert) oder RAP-Phrasen ("redundante Akronym-Phrasen-Phrasen"), bezieht sich auf die Verwendung eines oder mehrerer der Wörter, die ein Akronym oder einen Initialismus in Verbindung mit der abgekürzten Form bilden, wodurch tatsächlich ein oder mehrere Wörter wiederholt werden.

Der Text wurde von http://en.wikipedia.org/wiki/RAS_syndrome kopiert

Charles Maresh
quelle

Antworten:

6

Derzeit bietet Vim keinen "nativen" Mechanismus, obwohl ich dies für eine gute Idee halte. Das einzige, was mir einfällt, ist eine :autocmd, die eine Funktion aufruft, die nach einem speziellen Abschnitt in der Datei sucht und dann den Cursor über die Wörter in diesem Abschnitt bewegt und zGmit :normalBefehlen auslöst . Das wäre chaotisch und ich würde mich nur ungern darum kümmern.

Edit: Natürlich habe ich irgendwie die Existenz von übersehen:spellgood!, obwohl es in deiner Frage ist. Dies macht die Arbeit viel praktikabler. Ich habe eine grundlegende Implementierung entwickelt, die Sie an Ihre Bedürfnisse anpassen können:

function! AutoSpellGoodWords()
    let l:goodwords_start = search('\C-\*-SpellGoodWordsStart-\*-', 'wcn')
    let l:goodwords_end = search('\C-\*-SpellGoodWordsEnd-\*-', 'wcn')
    if l:goodwords_start == 0 || l:goodwords_end == 0
        return
    endif
    let l:lines = getline(l:goodwords_start + 1, l:goodwords_end - 1)
    let l:words = []
    call map(l:lines, "extend(l:words, split(v:val, '\\W\\+'))")
    for l:word in l:words
        silent execute ':spellgood! ' . l:word
    endfor
endfunction

autocmd BufReadPost * call AutoSpellGoodWords()

Dadurch wird nach einem Block gesucht, der ungefähr so ​​aussieht:

-*-SpellGoodWordsStart-*-
word1 word2 word3
word4 word5 ...
-*-SpellGoodWordsEnd-*-

Und jedes Wort , um es findet - in diesem Fall word1, word2, word3, word4, und word5--within Block wird in die temporären guten Worten Liste hinzufügen.

Sei dir nur bewusst, dass ich das nicht auf Stress getestet habe.

Heptit
quelle
Dies ist ausführlicher als ich erwartet hatte und würde ein sehr nützliches Vim-Skript ergeben. Ich habe vim.org überprüft, aber es gab keine ähnlichen Übereinstimmungen. Vielen Dank!
Charles Maresh