有没有办法告诉vim更新'spelllang'
中列出的所有语言的拼写文件,以便从vim外部获取wordlist更改?
我已经开始将wordlist文件检入git,因为我厌倦了在多台计算机上添加相同的单词。我不想将拼写文件添加到git repo中,因为每次合并都会很难看,但每当我打开vim时,任何最近的更新都会被忽略,直到我从vim内部执行某些重建拼写文件的操作,例如{{ 1}}在词典中添加一个单词。
答案 0 :(得分:11)
我已经通过将* .spl添加到.gitignore文件然后在vimrc(也与GIT同步,添加:
)中解决了这个问题。for d in glob('~/.vim/spell/*.add', 1, 1)
if filereadable(d) && (!filereadable(d . '.spl') || getftime(d) > getftime(d . '.spl'))
exec 'mkspell! ' . fnameescape(d)
endif
endfor
每次在启动vim时更新.add文件时,这将导致vim重建.spl文件。
答案 1 :(得分:3)
如果您只有一个拼写文件,请将其放在.vimrc
:
exec 'silent mkspell! ' . &spellfile . '.spl'
答案 2 :(得分:2)
你可以创建git smudge / clean过滤器和post-checkout hook来调用:mkspell
。
$ mkdir -p ~/.vim/spell
$ cd ~/.vim/spell
$ git init
$ echo '*.spl' > .gitignore
$ touch words.utf-8.add
$ git add . && git commit -m 'init'
$ echo '*.add filter=spellfile' > .git/info/attributes
$ git config filter.spellfile.smudge cat
$ git config filter.spellfile.clean 'sort -u'
$ cd .git/hooks/
$ vim mkspell
#!/bin/sh
SPELL_FILE="`git rev-parse --show-toplevel`/words.utf-8.add" \
vim -i NONE -u NORC -U NONE -V1 -nNesc '
execute ":mkspell! " . fnameescape($SPELL_FILE) | echo "" | qall!
'
$ chmod +x ./mkspell
$ ln -s ./mkspell post-checkout
然后将spellfile
设置添加到您的~/.vimrc
set spellfile=~/.vim/spell/words.utf-8.add
答案 3 :(得分:2)
我为此创建了一个Vim plugin。它会自动找到拼写文件夹的路径,然后在启动时找到的任何单词列表上调用mkspell
来重新生成拼写文件。它还会在拼写目录中创建.gitignore
和.gitattributes
文件,以排除二进制拼写文件,并使用Git的union merge driver避免合并来自两台不同计算机的拼写文件时发生冲突。感谢Sato Katsura的mkspell
示例。
答案 4 :(得分:0)
使用字典的git repo是有道理的。问题在于通知vim
您的字典。一个简单的解决方案是使用映射vim来使用正确的字典。对于Instance,如果你的单词在my-dictionary.txt
,那么你可以从vim运行:
:mkspell ~/.vim/spell/en_my_dict /path/to/git/repo/my-dictionary.txt
我可能会使用类似的东西:
" Set up Dictionary for check
" This is will add your dictionary to existing list.
" To use only your dictionary use, setlocal &spelllang=en_my_dict
nmap <leader>ss :setlocal &spelllang=join(add(split(&spelllang, ','), 'en_my_dict'), ',')
" Spell Check (Redo to disable)
nmap <silent> <leader>sc :set spell!<CR>