比 deoplete 更快!比 YCM 更轻!支持 neovim/vim8 的自动补全框架!

2017-03-04 14:19:02 +08:00
 pony279

一大波 gif 在这里: https://github.com/roxma/nvim-completion-manager/issues/12

关于为什么更快的问题,请移步 项目 README 文档。

当然可以和 @autozimuLanguageClient-neovim 配合使用

34548 次点击
所在节点    Vim
107 条回复
jsfaint
2017-03-15 10:55:17 +08:00
@pony279 #79 升级到 master 的最新提交,突然工作正常了……只不过在 windows 下反应很慢
pony279
2017-03-15 11:31:01 +08:00
@jsfaint 反应很慢指的视所有补全都很慢?还是 js 补全很慢?

> FileNotFoundError: [WinError 2] 系统找不到指定的文件。

这个估计是指运行 `gocode` 命令失败,需要检查下环境变量。
pony279
2017-03-15 11:32:39 +08:00
@jsfaint

js 补全慢的问题已经有解决方案, https://github.com/roxma/nvim-cm-tern/pull/4
jsfaint
2017-03-15 11:49:06 +08:00
@pony279 #82 gocode 的问题已经搞定了,是之前重装系统 PATH 没设好

python 补全速度很快, js, go, c 都比较慢
jsfaint
2017-03-15 11:56:35 +08:00
@pony279 #82 deoplete 有三个 clang 的扩展
clang_complete
deoplete_clang
deoplete_clang2

前两个用的都是 libclang ,第三个调用 clang -cc1 ,速度比前两个快不少

completor.vim 的 clang source 也是通过调用 clang binary 实现的。不过 completor.vim 的 clang source 在 windows 工作有问题。提了 issue 很久没人回应……
pony279
2017-03-15 12:38:25 +08:00
@jsfaint 谢谢,我会试下切换不用 python 库
fantiq
2017-04-02 13:01:31 +08:00
@river1007 quickfix 窗口开着就会出现你的情况

准备提 ISSUE 了
NoAnyLove
2017-08-25 23:42:47 +08:00
从 YouCompleteMe 切换到了 NCM,感觉速度和响应快了不少。不过有一点小小的问题,切换到 NCM 之后,语法检查可以用 syntastic 代替,不知道查看文档、跳转到定义这些功能有没有什么好用的插件可以推荐一下。
pony279
2017-08-28 10:54:11 +08:00
@NoAnyLove

流行的语言一般都有对应的 vim 插件。例如 python 可以用 jedi-vim,golang 有 vim-go,NCM 目前只做补全。

https://github.com/autozimu/LanguageClient-neovim 如果能找到对应的 Language Server 也可以用这个,功能齐全。
NoAnyLove
2017-08-28 11:41:23 +08:00
@pony279 jedi-vim 的补全和文档、跳转功能都不错,不过 rename 功能有点太不靠谱了,还不如自己手动搜索替换靠谱。第一次知道 Language Server 这个东西,看起来很厉害的样子,抽空试试。感谢推荐。
ashfinal
2017-08-29 19:43:54 +08:00
不错,目前用的就是这个补全插件。个人感觉比 deoplete 要好,除了名字长了点…… 😂

之前还给另一个插件 vimtex 提 issue,让作者在文档里加了 ncm 的相关说明。
pony279
2017-09-05 11:14:48 +08:00
@ashfinal

这个名字比方便合被 google 搜索出来,其次是表明项目的野心 。

看了下项目的 traffic 也确实如此。现在每天会有少量用户通过 google 搜索进去观光,偶尔贡献点 issue,方便我控制开发的节奏。推广的时候一下来一波 issue,有点受不了。
ashfinal
2017-09-05 14:31:06 +08:00
@pony279 有个好点的名字固然好,不过相对功能而言,反而没那么重要了

我个人目前是 vim8 用的 neocomplete,neovim 用的 ncm。(配置文件里判断一下就好),体验基本一致。

ncm 比较爽的一点是 scope 功能,markdown 文档里能直接补全 python 代码了。
jsfaint
2017-09-27 13:41:55 +08:00
@pony279 看到你 github 新增了 ncm-clang 这个插件~
看了下代码,似乎目前只支持 cpp,还有就是只有在->还有::的时候才触发补全?
ncm-clang 你有计划下一步要加哪些特性吗?我看看有没有什么我可以做的贡献 :)

另外,ncm 目前有一个问题或者说是少一个特性
在用 neocomplete 的时候如果有一条 abc_def 这样的内容
当你输入 def 之后要往前边插入 abc,时候会弹出 abc_def 的补全,当选择了这个补全的时候,最终的结果是 abc_def
而 ncm 目前的行为是 adc_defdef
这个有办法设置或者有修改的计划吗?

谢谢~
pony279
2017-09-27 14:26:58 +08:00
@jsfaint


> 看了下代码,似乎目前只支持 cpp,还有就是只有在->还有::的时候才触发补全?

因为我做 cpp 开发,其他语言没测试过。c 应该也可以。

除了 -> 和 ::,输入足够多的字符(默认 3 个)也会触发补全。`:help NCM-source-examples` 后面有解释补全的触发过程。



> ncm-clang 你有计划下一步要加哪些特性吗?我看看有没有什么我可以做的贡献 :)

snippet 支持,需要解析 clang 的输出

识别 .clang_complete 和 compile_commands.json。这个插件只做补全,但是实现了这个功能可以尝试配合其他 vim clang 插件,实现跳转定义。比如 https://github.com/justmao945/vim-clang。vim-clang 本身有 compile_commands.json 的识别,还没测试过,如果 OK 的话也可以考虑直接用 vim-clang 的。

目的是想替换掉 clang_complete 这个插件,不想继续维护它了。



> 在用 neocomplete 的时候如果有一条 abc_def 这样的内容
当你输入 def 之后要往前边插入 abc,时候会弹出 abc_def 的补全,当选择了这个补全的时候,最终的结果是 abc_def
而 ncm 目前的行为是 adc_defdef
这个有办法设置或者有修改的计划吗?

并没有打算实现这个功能。我比较倾向于使用 ce 清除掉再重新输入
jsfaint
2017-09-27 14:42:52 +08:00
@pony279 明白~
现在的实现只有支持 cpp,而我用 c 比较多,所以之后如果你没有计划的话,我会来帮忙增加 c 的支持。
如果为 c 补全加一个单独的 source,会不会被你打?看到现有的实现是直接去 call clang++的

另外.clang_complete 的支持应该不难做到,不过 compile_commands.json 的支持我没什么概念了,不知道是不是 clang 会直接识别它

跳转之类的支持可能等 language server 实现比较好,ncm 专心做补全就够
vim-clang 的代码有点不清晰,所有东西都塞在一个文件里。。

第二个问题可能和 fuzzy 也有关,目前的 fuzzy matcher 行为有时候怪怪的
pony279
2017-09-27 15:23:35 +08:00
@jsfaint

为 c 语言支持 fork 出一份应该没什么关系。如果区别比较小最终还是有办法合并的。
pony279
2017-09-30 11:05:06 +08:00
@jsfaint

简单改了下, 现在可以做 C 语言的补全了
NoAnyLove
2017-10-01 11:51:15 +08:00
看到了 ncm-clang 的更新,不过如果想要使用 goto 特性还需要安装 clang_complete 并且添加一大段配置代码,感觉有点重复和麻烦。个人还是比较喜欢能安装一个插件就搞定的解决方案。好奇问问,为什么不直接增强对 Rip-Rip/clang_complete 的集成呢?
pony279
2017-10-02 18:37:14 +08:00
@NoAnyLove

clang_complete 采用的是 python 调用 libclang.so 。用系统的 python 还好,我在一些机器装了 conda,有可能无法使用,因为他们编译使用的 libstdc++ 版本不一致。

clang_complete 使用时间久了内存占用会越来越高

不想维护 clang_complete 的代码,比较困难

---

目前体验到的 goto 特性有几个选择,但是 clang_complete 的表现最好,所以还是在文档里面做了说明

一旦出现更好的方案,我会更新文档,把 clang_complete 那段去掉。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/344868

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX