coc.nvim 是一款针对 neovim 所开发的智能感知插件,设计目标是基于微软的 language server protocol 协议,为用户提供全面、可靠的智能感知体验。
鉴于智能补全算是智能感知当中最重要的部分,本文就先来介绍一下 coc 里面的补全功能。
snippet 参数补全同时通过 additinalTextEdit 插入 import
neovim 的 remote 插件确实不那么容易安装,对此我暂时也没想到好的办法,或许将来 deno 可以解决。
项目使用微软设计并开源的 typescript 进行开发并且借鉴了微软 VSCode 部分设计,同时使用了相当数量的微软代码以及微软提供的 node 模块,在此要特别感谢微软对于开源的大力支持。
coc.nvim 的基本功能已经就绪,文档部分还有所欠缺,欢迎体验~
1
skt041959 2018-07-09 16:57:34 +08:00
emmmm....又一个 LSP client for neovim。赞赏一下楼主造轮子的速度和行动力……
不知道测试过哪些 server ? |
2
chemzqm OP @skt041959 我对 coc 定位不是轮子,它是为追求极致开发体验的开发者创造的产品。
coc 已经内置的 language 服务包含:tsserver,css(可支持 css less scss wxss),html,json,stylelint,tslint,wxml,solargraph。内置服务无需额外安装配置即可使用,另外使用 node-ipc 通讯方式通讯效率更高,也很容易使用 Chrome devtools 等工具调试。 |
3
chemzqm OP > 不知道测试过哪些 server ?
使用的 code 与 VSCode 基本一致(部分功能被阉割)理论上只要 VSCode 能支持的,coc 就肯定可以支持。 coc 实现了 VSCode 一部分接口,可以轻松的移植 VSCdoe 的 language server 插件。 后续文章会有更详细的介绍。 |
4
lancelock 2018-07-10 09:25:26 +08:00
vim 的补全我还是没怎么弄明白,一直想试试的,不过配置太麻烦了。我现在用的 deoplete,目前的补全就是 snippet 和文件内已经存在的单词可以补全,但是怎么实现分析代码结构的功能,就是比如我一个实例,怎样能够输入实例的名称后再输入点号,能够提示出属性和方法呢?
|
6
yuuko 2018-07-10 23:01:04 +08:00 via Android
支持,看着很棒,有时间试试
|
7
yuuko 2018-07-10 23:58:55 +08:00
试了一下,可以说很棒了,就是不知道参数不全后怎么跳转下个参数?
|
8
chemzqm OP @lancelock coc 里面没有也不需要 deoplete 搞的那些麻烦配置,无需配置就可以良好工作的。
> 但是怎么实现分析代码结构的功能,就是比如我一个实例,怎样能够输入实例的名称后再输入点号,能够提示出属性和方法呢? 这个是 language server 实现的事情,用户和客户端不用操心。 @yuuko https://github.com/neoclide/coc.nvim/blob/788df1eb26bca4b81628f44f375b0610499acc09/doc/coc.txt#L162 文档里有的,默认 <c-j> 和 <c-k> |
10
chemzqm OP @lancelock 补全功能不需要设置的,没效果就说明没装好 https://github.com/neoclide/coc.nvim/wiki/Install-coc.nvim
|
11
lancelock 2018-07-11 13:38:36 +08:00
我装好了,checkhealth 没问题。我又试了下 css、html 之类的可以,但是 js、py 之类的不支持吗?另外还需要装别的插件吗?好像不能 snippet
|
12
chemzqm OP @lancelock 需要 <c-y> 确认(建议绑定到 <cr>) snippet 才会生效。
js 默认应该就可以的,自带的 tsserver,py 后续会加,现在可以通过配置文件添加,不过这块还没有文档。 |
13
lancelock 2018-07-13 07:02:27 +08:00
@chemzqm 我打开 js 文件都报这个 "Local tsserver not found, Falling back to global TypeScript version" 。另外支持 vim8 吗?
|
14
chemzqm OP @lancelock "Local tsserver not found, Falling back to global TypeScript version" 这个是正常的,你在项目下 `npm i typescript` 就不会有这个问题了,如果你希望 tsserver 不报错,可能还需要设置 jsconfig.json https://code.visualstudio.com/docs/languages/jsconfig
vim8 没有 node-client 也没有 buffer-notification,没办法支持。 |
16
chemzqm OP @lancelock 不是啊, "Local tsserver not found, Falling back to global TypeScript version" 只是个提示,功能应该都是正常的。只要有这行 [coc.nvim] service tsserver started 就说明 tsserver 服务可用了
|
17
yuuko 2018-07-15 10:28:55 +08:00 via Android
在选择了一个提示或者没有提示之后,删除字符,一直删都不会有提示了,不知道是不是这么设计的
|
18
chemzqm OP @yuuko 嗯,vim 是这样的,因为你选择一个提示的时候进入了第二阶段,再输入会在 TextChange 触发之前触发 CompleteDone,这里做判定就非常麻烦了。没有提示会触发 CompleteDone,补全就算结束了,所以删除也没有提示。
不必过度依赖自动触发,此时可以使用绑定的快捷键: ``` inoremap <silent><expr> <TAB> \ pumvisible() ? "\<C-n>" : \ <SID>check_back_space() ? "\<TAB>" : \ coc#refresh() inoremap <silent><expr> <c-space> coc#refresh() ``` |
19
Yggdroot 2018-07-16 12:51:43 +08:00
如果支持 vim 就好了。
|
20
leoatchina 2018-07-23 10:46:24 +08:00
如何支持 python 呢?
|
21
chemzqm OP |
24
leoatchina 2018-08-22 11:11:01 +08:00 via Android
同事用来写 js 很爽
|
25
lancelock 2018-09-01 17:32:27 +08:00
更新之后我又试了一下,感觉很不错,不过有两个问题很影响体验。
1. 如果有语法错误左边栏会显示错误标记,导致左边栏忽宽忽窄,整个界面一直在闪烁 2. 查看补全项的文档会在上方打开一个窗口,很不舒服,可以调成放在下面或者在浮动窗口里显示吗? |