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

输入标点符号和左括号后 rime_ls 失效 #31

Open
liubianshi opened this issue Aug 12, 2024 · 19 comments
Open

输入标点符号和左括号后 rime_ls 失效 #31

liubianshi opened this issue Aug 12, 2024 · 19 comments
Labels
bug Something isn't working

Comments

@liubianshi
Copy link

输入标点符号,如 *! 后,rime_ls 能正常提供候选词,输入 [{ 后 rime_ls 也正常,但先输入标点符号再输入括号后,rime_ls 不再能提供候选词。表现如下面这段录屏:

simplescreenrecorder-2024-08-12_21.42.32.mp4

这对日常使用不会带来困扰,只是可能会影响 markdown 的图片插入语法 ![]()

使用配置只是对示例配置做了些许修改:

_shared_data_dir = "/usr/share/rime-data"
local rime_user_dir = "~/.local/share/rime-ls"

local M = {}

function M.setup_rime()
  -- global status
  vim.g.rime_enabled = false

  local lspconfig = require('lspconfig')
  local configs = require('lspconfig.configs')
  if not configs.rime_ls then
    configs.rime_ls = {
      default_config = {
        name = "rime_ls",
        cmd = vim.lsp.rpc.connect('127.0.0.1', 9257),
        filetypes = { '*' },
        single_file_support = true,
      },
      settings = {},
      docs = {
        description = [[
https://www.github.com/wlh320/rime-ls

A language server for librime
]],
      }
    }
  end

  local rime_on_attach = function(client, _)
    local toggle_rime = function()
      client.request('workspace/executeCommand',
        { command = "rime-ls.toggle-rime" },
        function(_, result, ctx, _)
          if ctx.client_id == client.id then
            vim.g.rime_enabled = result
          end
        end
      )
    end
    -- keymaps for executing command
    vim.keymap.set('i', ';f', function() toggle_rime() end)
    vim.keymap.set('i', '<C-x>', function() toggle_rime() end)
    vim.keymap.set('n', '<leader>rs', function() vim.lsp.buf.execute_command({ command = "rime-ls.sync-user-data" }) end)
  end

  -- nvim-cmp supports additional completion capabilities, so broadcast that to servers
  local capabilities = vim.lsp.protocol.make_client_capabilities()
  capabilities = require('cmp_nvim_lsp').default_capabilities(capabilities)

  lspconfig.rime_ls.setup {
    init_options = {
      enabled = vim.g.rime_enabled,
      shared_data_dir = rime_shared_data_dir,
      user_data_dir = rime_user_dir,
      log_dir = rime_user_dir,
      max_candidates = 9,
      trigger_characters = {},
      schema_trigger_character = "&" -- [since v0.2.0] 当输入此字符串时请求补全会触发 “方案选单”
    },
    on_attach = rime_on_attach,
    capabilities = capabilities,
  }
end

return M
@liubianshi
Copy link
Author

rime_ls 版本是最新版(bd728eeb)
系统环境是 arch linux

@wlh320
Copy link
Owner

wlh320 commented Aug 14, 2024

印象中确实有这个问题。最近有事,过段时间我再仔细查一下

@wlh320
Copy link
Owner

wlh320 commented Aug 15, 2024

初步测试是当第二个符号不能直接上屏的时候会出这个问题。
似乎是跟我判断补全的开始位置的那部分代码有关。如果在 rime 配置里让所有符号都直接上屏,就没这个问题。

等我有空再从头捋一下补全的逻辑,看看有没有更好的判断方案。

@Kaiser-Yang
Copy link
Contributor

在某些符号后也不能触发:反引号、分号。

@wlh320
Copy link
Owner

wlh320 commented Dec 16, 2024

在某些符号后也不能触发:反引号、分号。

要触发补全可以把符号加到 paging_characters 这个配置里,例如 paging_characters = {",", ".", "\\", ";"},

@Kaiser-Yang
Copy link
Contributor

在某些符号后也不能触发:反引号、分号。

要触发补全可以把符号加到 paging_characters 这个配置里,例如 paging_characters = {",", ".", "\\", ";"},

我的意思是,输入这些符号后,不能触发中文的补全:

image

image

@Kaiser-Yang
Copy link
Contributor

貌似由于设置了 max_token,所以在四个字符时,能触发一次补全:

image

但只补全了 vb 两个字符。

@wlh320
Copy link
Owner

wlh320 commented Dec 16, 2024

我觉得还是因为之前提到的输入方案里的标点符号的原因,目前的解决方案是需要修改输入方案让所有标点符号直接上屏。

@Kaiser-Yang
Copy link
Contributor

我觉得还是因为之前提到的输入方案里的标点符号的原因,目前的解决方案是需要修改输入方案让所有标点符号直接上屏。

实际我的配制里面就是上屏:

image

@wlh320
Copy link
Owner

wlh320 commented Dec 16, 2024

有点奇怪,我再检查下,我这里测试直接上屏的符号不会有这个问题

@wlh320
Copy link
Owner

wlh320 commented Dec 16, 2024

我试了一下,用 vim + coc.nvim 似乎确实有这个问题,跟用的输入方案没关系。那只能认为是补全插件相关的原因了。不同的编辑器补全插件对于是否弹出补全窗口可能有不同的判断条件。

@Kaiser-Yang
Copy link
Contributor

我试了一下,用 vim + coc.nvim 似乎确实有这个问题,跟用的输入方案没关系。那只能认为是补全插件相关的原因了。不同的编辑器补全插件对于是否弹出补全窗口可能有不同的判断条件。

但我用的是 cmp

@wlh320
Copy link
Owner

wlh320 commented Dec 16, 2024

好吧,那我在检查一下

@Kaiser-Yang
Copy link
Contributor

Kaiser-Yang commented Dec 16, 2024

好吧,那我在检查一下

我的 rime 配制是这个:rime-config-kaiser

方案是 wubi 标点是定义在 symbolssymbols.custom 中的。

需要其他配合请联系我。

@wlh320
Copy link
Owner

wlh320 commented Dec 16, 2024

看了一下分号不行是因为你的方案quick_symbols.dict.yaml里面分号+字母会被映射成标点。

之后补全失效的原因可能跟代码实现里面一些判断有关系。有可能是我 Rime 的 API 用的不对,后面我再仔细检查一下

@Kaiser-Yang
Copy link
Contributor

看了一下分号不行是因为你的方案quick_symbols.dict.yaml里面分号+字母会被映射成标点。

之后补全失效的原因可能跟代码实现里面一些判断有关系。有可能是我 Rime 的 API 用的不对,后面我再仔细检查一下

不是这个原因,因为我在 quick_symbols.custom.yaml 中删除了所有的分号映射:

image

我刚刚也试了直接删除 quick_symbols.yaml 中的映射,依然不能补全。

@Kaiser-Yang
Copy link
Contributor

另外我发现每次部署的时候会出现下面的报错:

image

@wlh320 wlh320 added the bug Something isn't working label Dec 17, 2024
@wlh320
Copy link
Owner

wlh320 commented Dec 17, 2024

好吧,那我在检查一下

我的 rime 配制是这个:rime-config-kaiser

方案是 wubi 标点是定义在 symbolssymbols.custom 中的。

需要其他配合请联系我。

又确认了一下,你提到的分号和反引号不能补全的原因是因为方案里的这两行:

speller:
  alphabet: ;zyxwvutsrqponmlkjihgfedcba`
  initials: ;zyxwvutsrqponmlkjihgfedcba`

其实我也不是很熟悉 rime 的配置,不太清楚这个的具体作用,但是去掉之后确实能补全了。

虽然跟原本 issue 的失效问题原因不太一样,但都和输入方案配置有关。
后续可以单开一个 issue 专门追踪不同输入方案的兼容性问题。

@Kaiser-Yang
Copy link
Contributor

好吧,那我在检查一下

我的 rime 配制是这个:rime-config-kaiser
方案是 wubi 标点是定义在 symbolssymbols.custom 中的。
需要其他配合请联系我。

又确认了一下,你提到的分号和反引号不能补全的原因是因为方案里的这两行:

speller:
  alphabet: ;zyxwvutsrqponmlkjihgfedcba`
  initials: ;zyxwvutsrqponmlkjihgfedcba`

其实我也不是很熟悉 rime 的配置,不太清楚这个的具体作用,但是去掉之后确实能补全了。

虽然跟原本 issue 的失效问题原因不太一样,但都和输入方案配置有关。 后续可以单开一个 issue 专门追踪不同输入方案的兼容性问题。

这个是哪些字符会在 dict 中的 code 部分,initials 表示只出现在开头,我当时在 custom 中去除了分号和引号,结果发现写错了,多写了 delimiter

image

去了 delimiter 就对了,分号在这里面就会找 ; 开头的 code,我的 dict 里面没有就不会补全,非常感谢。正确配制:

image

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