是否可以通过模式行将拼写正确的单词添加到 vim 的内部单词列表中?或者另一种文件特定的方法?
Vim 可以通过键盘命令zG
或将单词添加到临时内部单词列表中:spellgood! {word}
。可以在模式行上做同样的事情吗?
一个例子是下面的文本,我希望在使用 vim 的拼写检查时将首字母缩略词“RAS”和“RAP”视为好词。
RAS综合症(简称“冗余首字母缩写综合症”),也称为PNS综合症(“PIN号码综合症”,扩展为“个人识别号码综合症”)或RAP短语(“冗余首字母缩写词短语”),是指将一个或多个构成首字母缩略词或首字母缩写词的词与缩写形式结合使用,从而实际上重复了一个或多个词。
目前 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()
Run Code Online (Sandbox Code Playgroud)
这将搜索一个看起来像这样的块:
-*-SpellGoodWordsStart-*-
word1 word2 word3
word4 word5 ...
-*-SpellGoodWordsEnd-*-
Run Code Online (Sandbox Code Playgroud)
而且每个单词发现-在这种情况下,word1
,word2
,word3
,word4
,和word5
--within块将添加到临时好话名单。
请注意,我没有对此进行压力测试。