Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

补全一次之后再次输入无法触发补全 #4

Open
416207298 opened this issue Mar 1, 2023 · 11 comments
Open

补全一次之后再次输入无法触发补全 #4

416207298 opened this issue Mar 1, 2023 · 11 comments
Labels
bug Something isn't working

Comments

@416207298
Copy link

补全了一次后,直接输入就不再能触发补全了,需要输入一个“空格”之后才可以。

@wlh320
Copy link
Owner

wlh320 commented Mar 1, 2023

如果说的是补全后删掉,从之前的起始位置重新输入相同的拼音,发现不能触发补全,这个确实是这个版本引入的已知 bug,是我在判断输入状态时有些问题,我会尝试在下个版本修复。

@wlh320 wlh320 added the bug Something isn't working label Mar 1, 2023
wlh320 added a commit that referenced this issue Mar 2, 2023
- fix: wrong detection of new input, maybe the reason of #4
- fix: press an extra ESC when clear composition
- feat: sync is_incomplete state between rime and LSP
@wlh320
Copy link
Owner

wlh320 commented Mar 4, 2023

可以试一下 Release v0.2.1 或者编译最新的 master 。我这边没有复现不能再次触发的问题。如果还是存在问题,提供下环境信息,比如编辑器,补全插件,配置等

@416207298
Copy link
Author

416207298 commented Mar 6, 2023

rime-issue
可能是我没有表达清楚,我录了一段gif,是更新到 Release v0.2.1 之后的;

环境是:ubuntu20.04,运行在WSL2
编辑器:nvim0.9.0
补全插件:coc
coc配置:

"languageserver": {
     "clangd": {
         "command": "clangd",
         "rootPatterns": [
             "compile_flags.txt",
             "compile_commands.json",
             ".git"
         ],
         "filetypes": [
             "c",
             "cc",
             "cpp",
             "c++",
             "objc",
             "objcpp",
             "h",
             "hpp"
         ]
     },
     "rime-ls": {
         "command": "/usr/local/bin/rime_ls",
         "filetypes": [
             "text",
             "md"
         ],
         "initializationOptions": {
             "enabled": true,
             "shared_data_dir": "/usr/share/rime-data", // rime 公共目录
             "user_data_dir": "~/.local/share/rime-ls", // 指定用户目录,最好新建一个
             "log_dir": "~/.local/share/rime-ls", // 日志目录
             "max_candidates": 9, // [v0.2.0 后不再有用] 与 rime 的候选数量配置最好保持一致
             "trigger_characters": [], // 为空表示全局开启
             "schema_trigger_character": "&" // [since v0.2.0] 当输入此字符串时请求补全会触发 “方案选单”
         }
     }
 },
.......

@wlh320
Copy link
Owner

wlh320 commented Mar 6, 2023

收到,我再确认下。之前也许是我自己对 coc 做的其他配置导致没有复现这个问题。

@wlh320
Copy link
Owner

wlh320 commented Mar 10, 2023

我没有完全一样的环境,试了一下 WSL2 + kali 和直接安装的 Ubuntu 20.04,都是 neovim nightly ,用的是 coc.nvim 的推荐配置,还是没有复现出来。我推测原因是 coc.nvim 的某些配置项或者其他插件会对补全的触发条件有影响,如果方便的话你可以通过修改自己的 nvim 配置尝试下

@416207298
Copy link
Author

好的,那我用minimal配置调试一下。

@416207298
Copy link
Author

我在init.vim里只配置了Plugin coc和官方的coc配置,还是无法连续补全。

@wlh320
Copy link
Owner

wlh320 commented Mar 14, 2023

这个问题确实比较棘手,我找了一台机器装了个 WSL2,还是没能复现这个问题。

记录了一下我的复现过程:
https://gist.github.com/wlh320/d33391bb9fef0e2ce97f58726e70323b

我猜测可能是依赖的这些插件、软件等在某些特殊版本的组合下会触发这个问题。

@nibon7
Copy link

nibon7 commented Dec 30, 2023

用emacs 29.1 company + eglot是一样的现象,另外发现在 3748398 之后,逗号(,)强制触发补全自动选择第一个,其他的候选字没有了,但是 3748398 之前的版本都可以显示。

  • emacs配置
(use-package company
  :hook
  (after-init . global-company-mode)
  :custom
  (company-minimum-prefix-length 1)
  (company-tooltip-align-annotations t)
  (company-selection-wrap-around t)
  (company-show-quick-access t))

(use-package eglot
  :hook
  (text-mode . eglot-ensure)
  :config
  (add-to-list 'eglot-server-programs `(text-mode . ("/path/to/rime-ls/target/debug/rime_ls"))))
Screencast.from.2023-12-30.22-36-21.webm

@wlh320
Copy link
Owner

wlh320 commented Dec 30, 2023

  1. 第一个问题我猜测跟编辑器的 lsp client 的实现有关。我尝试过目前只能保证 vim/neovim/vscode 的连续输入体验比较正常,在 helix,qt creator 等编辑器里也会有类似的无法再次补全的行为。
  2. 第二个问题我猜测是所用的 rime 配置造成的,如果配置了标点符号直接上屏就会这样。用小狼毫输入法+雾凇拼音配置也是这个表现,输入逗号会把当前的第一项给一起上屏。原因是在 3748398 这个 commit 之前不会调用 librime 的提交功能,拿到候选列表后就清空 librime 这边的输入,这个 commit 之后为了记住用户操作 rime-ls 就是无脑把输入都交给 librime。

另外, emacs 用户可以尝试下 https://github.com/DogLooksGood/emacs-rime ,毕竟 rime-ls 用的是 LSP ,还是会有一定的局限性,比如第一个问题我猜就是因为 LSP 是为了代码补全设计,所以很多编辑器在实现时不会把紧跟中文的英文当作可以补全的对象。

@wlh320
Copy link
Owner

wlh320 commented May 17, 2024

最近的更新对 helix,zed,Qt creator 都做了适配。目前这几个编辑器通过 rime-ls 新加的额外配置项都可以正常连续输入了。

上面几个编辑器都是因为补全边界判断导致的,我不清楚 emacs 这边是什么情况,有可能是一样的原因。如果愿意可以再试试

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

3 participants