Closed suliveevil closed 3 years ago
:set omnifunc?
看下结果
是不是改动到了代码? 400 行不是那样两行连一起的
:set omnifunc?
看下结果
omnifunc=ZFVimIME_omnifunc,没毛病啊。
是不是改动到了代码? 400 行不是那样两行连一起的
额,我重新安装一下试试。
重新安装了 ZFVimIM 和 ZFVimJob。 看起来是它俩起了冲突。 单独安装 ZFVimIM 就可以用,安装 ZFVimJob 后就不行了。
:IMCloudLog
看看有没什么报错? 没有的话, 麻烦更新一下 ZFVimJob 插件, 然后按照以下方式提供一个详细的日志:
let g:ZFJobVerboseLogEnable = 1
:call writefile(g:ZFJobVerboseLog, 'log.txt')
, 然后把 log 贴上来 (注意: 这个 log 可能会包含你的 git 相关信息, 最好先手动删掉再贴上来):IMCloudLog
没报错。
log 内容:
23:20:24 groupJob 1 start
23:20:24 groupJob 1 running group 0
23:20:24 job 1 start: `python3 "/private/var/mobile/Containers/Data/Application/5BA6852D-F496-4EA5-BBFD-FFC69CEF30E4/Documents/_vim/pack/ivim/start/ZFVimIM/misc/dbLoad.py" "/private/var/mobile/Containers/Data/Application/5BA6852D-F496-4EA5-BBFD-FFC69CEF30E4/tmp/v410593/0" "/private/var/mobile/Containers/Data/Application/5BA6852D-F496-4EA5-BBFD-FFC69CEF30E4/Documents/_vim/pack/ivim/start/cx.vim/misc/cx.txt" "/private/var/mobile/Containers/Data/Application/5BA6852D-F496-4EA5-BBFD-FFC69CEF30E4/Documents/_vim/pack/ivim/start/cx.vim/misc/count_cx.txt"`
23:20:24 job 1 stop with exitCode: 0: `python3 "/private/var/mobile/Containers/Data/Application/5BA6852D-F496-4EA5-BBFD-FFC69CEF30E4/Documents/_vim/pack/ivim/start/ZFVimIM/misc/dbLoad.py" "/private/var/mobile/Containers/Data/Application/5BA6852D-F496-4EA5-BBFD-FFC69CEF30E4/tmp/v410593/0" "/private/var/mobile/Containers/Data/Application/5BA6852D-F496-4EA5-BBFD-FFC69CEF30E4/Documents/_vim/pack/ivim/start/cx.vim/misc/cx.txt" "/private/var/mobile/Containers/Data/Application/5BA6852D-F496-4EA5-BBFD-FFC69CEF30E4/Documents/_vim/pack/ivim/start/cx.vim/misc/count_cx.txt"`
23:20:24 groupJob 1 stop [0]
现在我面临一个很尴尬的局面: 1 不安装 ZFVimJob,能用 ZFVimIM,但是卡(pinyin_huge+wubi_base)。 2 安装 ZFVimJob,ZFVimIM 无法生效使用。
python3 "/private/var/mobile/Containers/Data/Application/5BA6852D-F496-4EA5-BBFD-FFC69CEF30E4/Documents/_vim/pack/ivim/start/ZFVimIM/misc/dbLoad.py" "/private/var/mobile/Containers/Data/Application/5BA6852D-F496-4EA5-BBFD-FFC69CEF30E4/tmp/v410593/0" "/private/var/mobile/Containers/Data/Application/5BA6852D-F496-4EA5-BBFD-FFC69CEF30E4/Documents/_vim/pack/ivim/start/cx.vim/misc/cx.txt" "/private/var/mobile/Containers/Data/Application/5BA6852D-F496-4EA5-BBFD-FFC69CEF30E4/Documents/_vim/pack/ivim/start/cx.vim/misc/count_cx.txt"
那句 python 命令直接用 system()
执行一下, 然后试试能不能在 vim 里面读那个临时文件?
额,不太懂,你是说可能 Python 没权限读取那个临时文件?
缓存文件能不能存到插件安装位置或者一个可以用户自定义的位置啊?
我在 terminal 里能 cat 到内容,但在 netrw 里是看不到内容的。
这种一般是什么特殊原因造成 tempname()
无法读或写
在 portable gVim 偶尔也会出类似问题 (portable gVim 的问题是, 为了 portable, 启动退出的时候会删除 temp 目录本身, 造成某些特殊的情况下无法读写)
典型情况: tempname()
返回 /path/tmp/xxxx
, 然后 /path/tmp
目录本身被意外的删掉了, 于是直接向 /path/tmp/xxxx
写入或读取就会失败
我没有 iVim 也没有 iPadOS 环境, 你看看有没什么办法排查下是否是类似问题
确实是由于临时文件无法读取引起的一系列Error提醒。 能不能把缓存移动到插件安装位置或者$HOME啊?
还有一个问题是 ZFVimIM 总会自动替换输入的第一个字母,从第二个字母开始匹配,这一点就很难受。
确实是由于临时文件无法读取引起的一系列Error提醒。 能不能把缓存移动到插件安装位置或者$HOME啊?
没有找到具体原因的时候, 由插件来打补丁解决这种环境问题, 实际上是在把问题隐藏起来, 个人不太赞成这种做法, 这边简单粗暴的修了读写权限问题, 别的地方依旧有可能出新的问题
即使你真的希望打补丁简单粗暴的处理, 也应该在 vimrc 里面添加, 不应该在一个不相关的插件里面处理
还有一个问题是 ZFVimIM 总会自动替换输入的第一个字母,从第二个字母开始匹配,这一点就很难受。
let g:ZFVimIME_DEBUG=1
并录个 gif 看看啥现象? 或者写个最简配置及复现步骤
没办法复现第二个问题了,卡在 fixomni 没法用……
" keymap
let g:ZFVimIM_keymap = 0
nnoremap <Leader>ijmd :call ZFVimIM_DEBUG_profileInfo()<CR>
nnoremap <expr><silent><Leader>ikm ZFVimIME_keymap_toggle_n()
inoremap <expr><Leader>ikm ZFVimIME_keymap_toggle_i()
vnoremap <expr><Leader>ikm ZFVimIME_keymap_toggle_v()
nnoremap <expr><silent><Leader>ijm ZFVimIME_keymap_next_n()
inoremap <expr><Leader>ijm ZFVimIME_keymap_next_i()
vnoremap <expr><Leader>ijm ZFVimIME_keymap_next_v()
" config
let g:ZFVimIM_autoAddWordLen=3*4
let g:ZFVimIM_cachePath=$HOME.'/_vim/.cache'
" debug
let g:ZFVimIME_DEBUG=1
let g:ZFJobVerboseLogEnable = 1
" profile
let g:ZFVimIM_DEBUG_profile = 1
vimrc 配置:
" config
let g:ZFVimIM_autoAddWordLen=3*4
let g:ZFVimIM_cachePath=$HOME.'/_vim/.cache'
" debug
let g:ZFVimIME_DEBUG=1
let g:ZFJobVerboseLogEnable = 1
" profile
let g:ZFVimIM_DEBUG_profile = 1
词库配置:
let s:repoPath=expand('<sfile>:p:h:h')
function! s:dbInit()
let repoPath = s:repoPath
let dbFile = '/misc/pinyin.txt'
let dbCountFile = '/misc/pinyin_count.txt'
let db = ZFVimIM_dbInit({
\ 'name' : 'pinyin',
\ })
call ZFVimIM_cloudRegister({
\ 'mode' : 'local',
\ 'repoPath' : repoPath,
\ 'dbFile' : dbFile,
\ 'dbCountFile' : dbCountFile,
\ 'dbId' : db['dbId'],
\ })
" \ 'gitUserEmail' : get(g:, 'ZFVimIM_pinyin_gitUserEmail', get(g:, 'zf_git_user_email', '')),
" \ 'gitUserName' : get(g:, 'ZFVimIM_pinyin_gitUserName', get(g:, 'zf_git_user_name', '')),
" \ 'gitUserToken' : get(g:, 'ZFVimIM_pinyin_gitUserToken', get(g:, 'zf_git_user_token', '')),
endfunction
augroup ZFVimIM_pinyin_augroup
autocmd!
autocmd User ZFVimIM_event_OnDbInit call s:dbInit()
augroup END
GIF 太大了,我再口述一下: 要输入“哈哈哈哈这是”的时候,先输入了“haha”得到了“哈哈”,这一步没问题。 输第二次“haha”的时候,ZFVimIM 自动把“h”给替换为了一个中文字符,然后去匹配“aha”了,这时屏幕左下角显示的是“=ZFVimIME_fixOmni()"
有没有可能是词库的问题? 因为不是完全冲着中文输入做的, 没有对声母韵母逻辑做特殊处理, 目前用的是最简陋的最长匹配算法, 比如以下词库可以复现你的问题:
haha 哈哈
hahah 哈哈好
输入 hahahaha
的时候, 因为 hahah
全词匹配更长, 会被优先选择, 于是剩下的字母就从 aha
开始匹配了
我检查一下,用的是你的 pyyin 词库啊……