ZSaberLv0 / ZFVimIM

vim输入法 / Vim Input Method by pure vim script, support: user word, dynamic word priority, cloud db files
204 stars 14 forks source link

抓 bug。ZFVimIM_fixOmni,不显示弹出菜单 #13

Closed suliveevil closed 3 years ago

suliveevil commented 4 years ago

bug

hao-lee commented 4 years ago

:set omnifunc? 看下结果

ZSaberLv0 commented 4 years ago

是不是改动到了代码? 400 行不是那样两行连一起的

suliveevil commented 4 years ago

:set omnifunc? 看下结果

omnifunc=ZFVimIME_omnifunc,没毛病啊。

suliveevil commented 4 years ago

是不是改动到了代码? 400 行不是那样两行连一起的

额,我重新安装一下试试。

suliveevil commented 4 years ago

重新安装了 ZFVimIM 和 ZFVimJob。 看起来是它俩起了冲突。 单独安装 ZFVimIM 就可以用,安装 ZFVimJob 后就不行了。

ZFVimIM & ZFVimJob

ZSaberLv0 commented 4 years ago

:IMCloudLog 看看有没什么报错? 没有的话, 麻烦更新一下 ZFVimJob 插件, 然后按照以下方式提供一个详细的日志:

  1. vimrc 里面添加 let g:ZFJobVerboseLogEnable = 1
  2. 重启 vim 并复现你的问题
  3. :call writefile(g:ZFJobVerboseLog, 'log.txt'), 然后把 log 贴上来 (注意: 这个 log 可能会包含你的 git 相关信息, 最好先手动删掉再贴上来)
suliveevil commented 4 years ago

: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]
suliveevil commented 4 years ago

现在我面临一个很尴尬的局面: 1 不安装 ZFVimJob,能用 ZFVimIM,但是卡(pinyin_huge+wubi_base)。 2 安装 ZFVimJob,ZFVimIM 无法生效使用。

ZSaberLv0 commented 4 years ago
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 里面读那个临时文件?

suliveevil commented 4 years ago

额,不太懂,你是说可能 Python 没权限读取那个临时文件?

缓存文件能不能存到插件安装位置或者一个可以用户自定义的位置啊?

suliveevil commented 4 years ago

我在 terminal 里能 cat 到内容,但在 netrw 里是看不到内容的。

ZSaberLv0 commented 4 years ago

这种一般是什么特殊原因造成 tempname() 无法读或写

在 portable gVim 偶尔也会出类似问题 (portable gVim 的问题是, 为了 portable, 启动退出的时候会删除 temp 目录本身, 造成某些特殊的情况下无法读写)

典型情况: tempname() 返回 /path/tmp/xxxx, 然后 /path/tmp 目录本身被意外的删掉了, 于是直接向 /path/tmp/xxxx 写入或读取就会失败

我没有 iVim 也没有 iPadOS 环境, 你看看有没什么办法排查下是否是类似问题

suliveevil commented 4 years ago

确实是由于临时文件无法读取引起的一系列Error提醒。 能不能把缓存移动到插件安装位置或者$HOME啊?

还有一个问题是 ZFVimIM 总会自动替换输入的第一个字母,从第二个字母开始匹配,这一点就很难受。

ZSaberLv0 commented 4 years ago

确实是由于临时文件无法读取引起的一系列Error提醒。 能不能把缓存移动到插件安装位置或者$HOME啊?

没有找到具体原因的时候, 由插件来打补丁解决这种环境问题, 实际上是在把问题隐藏起来, 个人不太赞成这种做法, 这边简单粗暴的修了读写权限问题, 别的地方依旧有可能出新的问题

即使你真的希望打补丁简单粗暴的处理, 也应该在 vimrc 里面添加, 不应该在一个不相关的插件里面处理

还有一个问题是 ZFVimIM 总会自动替换输入的第一个字母,从第二个字母开始匹配,这一点就很难受。

let g:ZFVimIME_DEBUG=1 并录个 gif 看看啥现象? 或者写个最简配置及复现步骤

suliveevil commented 4 years ago

没办法复现第二个问题了,卡在 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 
suliveevil commented 4 years ago

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()"

ZSaberLv0 commented 4 years ago

有没有可能是词库的问题? 因为不是完全冲着中文输入做的, 没有对声母韵母逻辑做特殊处理, 目前用的是最简陋的最长匹配算法, 比如以下词库可以复现你的问题:

haha 哈哈
hahah 哈哈好

输入 hahahaha 的时候, 因为 hahah 全词匹配更长, 会被优先选择, 于是剩下的字母就从 aha 开始匹配了

suliveevil commented 4 years ago

我检查一下,用的是你的 pyyin 词库啊……