Aggiungi buone parole specifiche del file all'elenco di parole vim interno (tramite modeline)


9

È possibile aggiungere parole scritte correttamente all'elenco di parole interno di vim tramite modeline? O un altro metodo specifico per il file?

Vim può aggiungere parole all'elenco di parole interne temporaneo tramite il tasto zGo o :spellgood! {word}. Lo stesso può essere fatto sulla modeline?

Un esempio potrebbe essere il seguente testo in cui desidero che gli acronimi "RAS" e "RAP" siano considerati buone parole quando si utilizza il controllo ortografico di Vim.

Sindrome RAS (abbreviazione di "Sindrome da sindrome acronimica ridondante"), nota anche come sindrome PNS ("Sindrome da sindrome del numero PIN", che si espande in "Sindrome da sindrome da numero numerico di identificazione personale") o frasi RAP ("frasi di frase acronimiche ridondanti"), si riferisce all'uso di una o più delle parole che compongono un acronimo o un inizialismo in combinazione con la forma abbreviata, ripetendo così in effetti una o più parole.

Il testo è stato copiato da http://en.wikipedia.org/wiki/RAS_syndrome

Risposte:


6

Attualmente Vim non fornisce alcun meccanismo "nativo" per farlo, anche se penso che sia una buona idea. L'unica cosa che mi viene in mente è :autocmdquella che chiama una funzione che cerca una sezione speciale nel file e quindi sposta il cursore sulle parole in quella sezione e si innesca zGcon i :normalcomandi. Questo sarebbe disordinato e sarei riluttante a preoccuparmene.

Modifica: Certo, in qualche modo ho trascurato l'esistenza di:spellgood!, anche se è nella tua domanda. Questo rende il lavoro molto più fattibile. Ho ideato un'implementazione di base che puoi modificare in base alle tue esigenze:

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

Questo cercherà un blocco simile a questo:

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

E ogni parola che trova - in questo caso, word1, word2, word3, word4, e word5--within il blocco si aggiungerà alla lista di parole buone temporanea.

Basta essere consapevoli del fatto che non ho provato questo stress.


Questo è più approfondito di quanto mi aspettassi, e sarebbe uno script di VIM molto utile. Ho controllato vim.org, ma non c'erano corrispondenze simili. Grazie!
Charles Maresh,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.