Closed shaman-yellow closed 4 months ago
let g:ZFVimIM_dbEditLimit = 0
默认限制了 500
词库操作是纯 vimscript 实现的, 多了不确定会不会卡
感谢及时解答!
我在保存中遇到了以下错误:
[ZFVimIM] <YourDb> save done: Traceback (most recent call last):
File "/home/echo/.vim/bundle/ZFVimIM/misc/dbSave.py", line 16, in <module>
for line in file:
File "/usr/lib/python3.10/codecs.py", line 322, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe5 in position 389: invalid continuation by
te
我手动修改了 /home/echo/.vim/bundle/ZFVimIM/misc/dbSave.py
,
加了 errors = 'ignore'
,然后就成功了,最后保存的词典文件也是正常的,但我不明白是为什么,加入 ignore
不知道会带来什么影响。
with io.open(DB_SAVE_CACHE_PATH, 'r', encoding='utf-8', errors='ignore') as file:
你的 vim set encoding?
是啥?
encoding=utf-8
有点奇怪,改改 dbSave.py
里面把 DB_SAVE_CACHE_PATH
文件复制出来,文件贴上来看看?
是自动识别为 latin1 的乱码。我设置 :set fileencoding=utf-8
也还是乱码。但是,是可以保存成功的,弄成 errors='ignore'
。
大概是这样:
add zy éé
add zaoyu éé
add hhs ç°è¤è²ç人
add d ç
add hhs ç°è¤è²ç人
add d ç
add d 对
另外,你之前说 “词库操作是纯 vimscript 实现的, 多了不确定会不会卡”,
好像的确速度会变慢。我想知道,如何不离开vim, 重新读取启动词库,相当于重开一遍,这样应该可以不卡吧?我想设置一个 autocmd
,当数量过多,就自动保存然后重开。或者有没有其他更优雅的方式重设一遍?
话说你是要自造词库? 没必要一直 IMAdd
, 词库文件本身就是个纯文本, 自行编辑后用 call ZFVimIM_dbNormalize('/path/to/dbFile')
格式化一次就行: https://github.com/ZSaberLv0/ZFVimIM?tab=readme-ov-file#make-your-own-db
IMAdd
本身是搭配输入过程中自造词用的, 没考虑过批量使用, 插件本身也还计划兼容纯 vimscript 环境, 所以也不打算搞的那么复杂
自己编辑词库不是一件明知的做法:加的词太多,找想要的词很麻烦;加的太少,找不到想要的词。
其实我最需要的,是为自己常用的词添加快捷输入。我上面提到的我设计的 autocmd
就是我的预期。其实一年前我开始使用这个插件时,就在憧憬有这样一个功能了,只是最近才略微了解怎么去实现,然后落实了。全拼的输入,实在太累了,但是又没有精力去学习双拼和五笔输入,只能退而求其次了。以 autocmd
自动补充快捷输入,是一件让人愉快的事。
现在的问题在于,IMAdd
不够轻巧呀,从我的使用直觉来看,它应该更轻巧一点。很奇怪,词库本身再大点,输入也不会变慢,但是多执行几次 IMAdd
就变慢了。
IMAdd! 测试 ceshi
或者
call IMAdd('!', {}, '测试', 'ceshi')
:IMCloud
主动触发同步太感谢了!我试试看!
使用 IMAdd! 测试 cs
会遇到以下问题:
E477: No ! allowed: IMAdd! 测试 cs
不过,call IMAdd('!', {}, '测试', 'cs')
是可以成功的。
但有一个问题,这次 vim
进程添加的,只能在下次开启时才能生效。
你的意思是,:IMCloud
可以主动同步,让当前进程也能使用吗?但我尝试了,好像没有生效。得重开才能生效。
再更新一下试试
现在 OK 了!
IMAdd 的更新好像没有解决执行次数过多会变得卡顿的问题。
在输入时,我大约 10s autocmd
执行一次 IMCloud
更新,应该是触发 Async
更新的词库。
我现在不确定,是电脑的配置不行吗,导致多次执行后发生卡顿?
但是在开始的很多次,都是很顺滑的;在累积可能十多分钟后,会变得迟钝。
难道是 Async
的后台进程会没有及时关闭吗?
echo len(g:ZFVimIM_db[0]['dbEdit'])
看看是不是有堆积, 同步不成功会持续保留 dbEdit, 所以默认限制 500
如果不是, 看看你的 autocmd 怎么写的, 是不是堆积了
另外, 还是建议用 ZFVimIM_dbNormalize
来初始化词库, 词库本来就是拿来干这种事的, 没必要用 IMAdd 一个个加, 舍近求远
我最初注意到这个问题,是想要尝试导入一些快速触发的词组的时候。 通过
source
该IMAdd
命令文件:db1.txt 。 运行后,在该进程下,导入的内容是部分有效的,靠前的有效,例如,
llss
,可以得到“啰啰嗦嗦”。但靠后的IMAdd
可能无效。 此外,关闭之后(自动保存更新词典),这些source
的内容没有被写入到词典中,没有得到更新。新打开vim
,上一次的source
也是无效的。后来,我写了一个很实用的 autocmd 命令:
这里的
AddWordsShortCut
,会捕获作者大大定义的g:ZFVimIM_choosedWord
,每次输入后自动执行IMAdd
。例如,当我输入zhongweng
得到 “中文”,它会帮我执行:这极其实用,让我下次重复输入时,只需要每个字的第一个字母。但是因为这个
autocmd
,IMAdd
会频繁触发,使之前被我有意忽略的IMAdd
问题在这里又复现了:积累过量的IMAdd
词语,没有成功被写入到词典中。本想提供
log.txt
文件给作者大大提供线索,但没有报错好像就没有输出这个文件。如果作者大大想要复现我的 issue, 可以试试source
我提供的vim
文件。我觉得,我前后提的两个例子应该是同一个问题。希望能够帮忙解决这个问题!