Ajouter des mots spécifiques au fichier dans la liste de mots vim interne (via modeline)

9

Est-il possible d'ajouter des mots correctement orthographiés à la liste de mots interne de vim via modeline? Ou une autre méthode spécifique au fichier?

Vim peut ajouter des mots à la liste de mots interne temporaire via le raccourci clavier zGou :spellgood! {word}. Peut-on faire la même chose sur le modeline?

Un exemple serait de suivre le texte où je souhaite que les acronymes "RAS" et "RAP" soient considérés comme de bons mots lors de la vérification orthographique de vim.

Syndrome RAS (abréviation de "syndrome du syndrome d'acronyme redondant"), également appelé syndrome du SNP ("syndrome du syndrome du numéro d'identification personnel", qui se développe en "syndrome du syndrome du numéro d'identification du numéro d'identification personnelle") ou expressions RAP ("phrases d'expression acronymes redondantes"), fait référence à l’utilisation d’un ou de plusieurs des mots qui constituent un acronyme ou un initialisme en conjonction avec la forme abrégée, répétant ainsi un ou plusieurs mots.

Le texte a été copié de http://en.wikipedia.org/wiki/RAS_syndrome

Charles Maresh
la source

Réponses:

6

Actuellement, Vim ne fournit aucun mécanisme "natif" pour le faire, bien que je pense que c'est une bonne idée. La seule chose à laquelle je puisse penser est une :autocmdfonction qui recherche une section spéciale dans le fichier, puis déplace le curseur sur les mots de cette section et déclenche zGdes :normalcommandes. Ce serait désordonné et je serais réticent à m'en soucier.

Edit: Bien sûr, quelque part, j'ai négligé l'existence de:spellgood!, même si c'est dans votre question. Cela rend le travail beaucoup plus réalisable. J'ai mis au point une implémentation de base que vous pouvez adapter à vos besoins:

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

Cela va chercher un bloc qui ressemble à ceci:

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

Et chaque mot qu'il trouve - dans ce cas, word1, word2, word3, word4et word5--within le bloc , il ajoutera à la liste de bons mots temporaires.

Sachez simplement que je n’ai pas fait de tests de résistance à cette situation.

Heptite
la source
C’est plus approfondi que prévu, ce qui en ferait un script vim très utile. J'ai consulté vim.org, mais il n'y a pas eu de match similaire. Merci!
Charles Maresh