有没有从wordlists重建拼写文件的快速方法?

时间:2014-12-02 01:55:32

标签: vim

有没有办法告诉vim更新'spelllang'中列出的所有语言的拼写文件,以便从vim外部获取wordlist更改?

我已经开始将wordlist文件检入git,因为我厌倦了在多台计算机上添加相同的单词。我不想将拼写文件添加到git repo中,因为每次合并都会很难看,但每当我打开vim时,任何最近的更新都会被忽略,直到我从vim内部执行某些重建拼写文件的操作,例如{{ 1}}在词典中添加一个单词。

5 个答案:

答案 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

来源:https://vi.stackexchange.com/questions/5050/how-to-share-vim-spellchecking-additions-between-multiple-machines

每次在启动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文件,以排除二进制拼写文件,并使用Gi​​t的union merge driver避免合并来自两台不同计算机的拼写文件时发生冲突。感谢Sato Katsuramkspell示例。

https://github.com/micarmst/vim-spellsync

答案 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>