将文件特定的好词添加到内部 vim 词表中(通过 modeline)

将文件特定的好词添加到内部 vim 词表中(通过 modeline)

是否可以通过 modeline 将拼写正确的单词添加到 vim 的内部单词列表中?或者其他特定于文件的方法?

zGVim 可以通过键盘命令或将单词添加到临时内部单词列表中:spellgood! {word}。可以在模式行上执行相同操作吗?

一个例子是下面的文本,我希望在使用 vim 的拼写检查时,首字母缩略词“RAS”和“RAP”被视为好词。

RAS 综合征(“冗余首字母缩略词综合征”的缩写)也称为 PNS 综合征(“PIN 号码综合征”,扩展为“个人识别号码综合征”)或 RAP 短语(“冗余首字母缩略词短语短语”),是指将组成首字母缩略词或首字母缩略词的一个或多个单词与缩写形式结合使用,从而实际上重复一个或多个单词。

文本复制自http://en.wikipedia.org/wiki/RAS_syndrome

答案1

目前 Vim 没有提供“原生”机制来实现这一点,尽管我认为这是个好主意。我能想到的唯一办法是:autocmd调用一个函数,该函数在文件中搜索一个特殊部分,然后将光标移到该部分中的单词上,并zG:normal命令触发。这会很麻烦,我不愿意为此费心。

编辑:当然,不知怎的,我忽略了 的存在:spellgood!,尽管它在你的问题中。这使得这项工作更加可行。我想出了一个基本的实现,你可以调整它来满足你的需求:

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

这将搜索类似于以下内容的块:

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

并且它找到的每个单词(在本例中为word1word2word3word4和 )word5都会被添加到块内的临时好词列表中。

请注意我还没有对此进行压力测试。

相关内容