wlh320 / rime-ls

A language server for Rime input method engine 通过 LSP 代码补全使用 Rime 输入法
BSD 3-Clause "New" or "Revised" License
208 stars 13 forks source link

copilot-chat窗口不能正常触发 #29

Closed Kaiser-Yang closed 3 months ago

Kaiser-Yang commented 3 months ago

当我打开一个copilot-chat的窗口的时候,通过lspinfo查看信息: image

我设置了文件类型为markdownvimwiki的时候自动启动,我检查了copilot-chat打开的窗口文件类型为markdown

wlh320 commented 3 months ago

https://github.com/CopilotC-Nvim/CopilotChat.nvim 这个插件吗?我还没有用过。

在这个窗口里其他的 LSP server 能通过 cmp 来补全吗?

Kaiser-Yang commented 3 months ago

https://github.com/CopilotC-Nvim/CopilotChat.nvim 这个插件吗?我还没有用过。

在这个窗口里其他的 LSP server 能通过 cmp 来补全吗?

是这个插件,其他lsp能不能补全不清楚,因为这个我没有为markdown设置lsp,所以这个应该不会启动其他lsp,但是cmp的补全菜单是可以正常弹出的: image

等我后面测试一下其他的lsp是否能够触发。

rainzm commented 3 months ago

我也有这个问题,但是我觉得这个应该不是rime-ls的问题,我是自己写了lua,进入窗口 attach 一下 buffer 和 rime-ls 。

Kaiser-Yang commented 3 months ago

我也有这个问题,但是我觉得这个应该不是rime-ls的问题,我是自己写了lua,进入窗口 attach 一下 buffer 和 rime-ls 。

你解决这个问题了吗? 能分享一下代码片段吗?

rainzm commented 3 months ago

https://github.com/rainzm/rainvim/blob/main/lua/plugins/lsp/rime_ls.lua

之前写得,最近没大在用copilot-chat了,你可以参考一下。

Kaiser-Yang commented 3 months ago

https://github.com/rainzm/rainvim/blob/main/lua/plugins/lsp/rime_ls.lua

之前写得,最近没大在用copilot-chat了,你可以参考一下。

我参考了你写的这一部分,然后我写出了下面的代码:

vim.api.nvim_create_autocmd('FileType', {
    pattern = rime_ls_filetypes,
    callback = function (env)
        -- copilot cannot attach client automatically, we must attach manually.
        local buf = env.buf
        local filetype = vim.api.nvim_buf_get_option(buf, 'filetype')
        if filetype == 'copilot-chat' then
            local rime_ls_client = vim.lsp.get_clients({ name = 'rime_ls' })
            if #rime_ls_client > 0 then
                vim.lsp.buf_attach_client(buf, rime_ls_client[1].id)
            end
        end
    end
})

但是这个代码修复了部分问题,如果我先打开一个其他的markdown文件,然后我再打开copilot-chat的窗口,那么此时输入法便可以在copilot-chat中使用,但是如果我一开始直接打开copilot-chat,此时输入法依然不能在copilot-chat窗口中使用。也就是如果直接打开copilot-chat不会启动任何的rime-lsclient。另外我尝试在lspconfig.rime_ls.setup部分增加root_dir选项,也是没有任何效果。

Kaiser-Yang commented 3 months ago

解决了,如果没有rime-ls,启动一个便可以了:

vim.api.nvim_create_autocmd('FileType', {
    pattern = rime_ls_filetypes,
    callback = function (env)
        -- copilot cannot attach client automatically, we must attach manually.
        local rime_ls_client = vim.lsp.get_clients({ name = 'rime_ls' })
        if #rime_ls_client == 0 then
            vim.cmd('LspStart rime_ls')
            rime_ls_client = vim.lsp.get_clients({ name = 'rime_ls' })
        end
        if #rime_ls_client > 0 then
            vim.lsp.buf_attach_client(env.buf, rime_ls_client[1].id)
        end
    end
})

不过这样有个潜在的问题,会创建一个新的缓冲区。

pxwg commented 3 weeks ago

这个做法似乎是最好的,但在我自己复现这个做法时发现nvim会将copilot开启的buffer识别成copilot-chat而不是markdown,我的解决方法是

vim.api.nvim_create_autocmd("FileType", {
  pattern = "copilot-chat",
  callback = function()
    vim.cmd("setlocal filetype=markdown")
  end,
})

把两个文件看作一种即可