Adicione palavras boas específicas de arquivo à lista interna de palavras vim (via modeline)

8

É possível adicionar corretamente palavras escritas à lista de palavras interna do vim via modeline? Ou outro método específico de arquivo?

O Vim pode adicionar palavras à lista de palavras interna temporária por meio do comando de chave zG ou :spellgood! {word} . O mesmo pode ser feito na modelina?

Um exemplo seria seguir o texto onde eu quero que as siglas "RAS" e "RAP" sejam consideradas boas palavras ao usar a verificação ortográfica do vim.

RAS syndrome (short for "redundant acronym syndrome syndrome"), also known as PNS syndrome ("PIN number syndrome syndrome", which expands to "personal identification number number syndrome syndrome") or RAP phrases ("redundant acronym phrase phrases"), refers to the use of one or more of the words that make up an acronym or initialism in conjunction with the abbreviated form, thus in effect repeating one or more words.

O texto foi copiado de link

    
por Charles Maresh 06.09.2013 / 18:13

1 resposta

5

Atualmente, o Vim não oferece nenhum mecanismo "nativo" para fazer isso, embora eu ache que é uma boa ideia. A única coisa em que posso pensar é um :autocmd que chama uma função que procura por uma seção especial no arquivo e, em seguida, move o cursor sobre as palavras nessa seção e aciona zG com :normal comandos. Isso seria confuso e eu ficaria relutante em me incomodar com isso.

Edit: É claro que, de alguma forma, eu ignorei a existência de :spellgood! , mesmo que seja na sua pergunta. Isso torna o trabalho muito mais viável. Eu criei uma implementação básica que você pode ajustar para atender às suas necessidades:

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

Isso irá procurar por um bloco parecido com isto:

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

E cada palavra que encontrar - nesse caso, word1 , word2 , word3 , word4 e word5 - dentro do bloco, ela será adicionada à lista de palavras favoritas temporárias. / p>

Apenas esteja ciente de que eu não testei isso com ênfase.

    
por 06.09.2013 / 21:37