一大波 gif 在这里: https://github.com/roxma/nvim-completion-manager/issues/12
关于为什么更快的问题,请移步 项目 README 文档。
当然可以和 @autozimu 的 LanguageClient-neovim 配合使用
简单说明下
有评论支持认为 nvim-completion-manager 比 deoplete 快,看这里。
除了评论里提到的 async 架构的区别,在贡献者的帮助下,还有其它优化让 NCM 更快,比如看这里
当然 deoplete 的作者也有重构 deoplete 的改进计划,包括 vim8 的支持,看这里,和这里。vim8 支持可能会用上我发起的 vim-hug-neovim-rpc,有心的同学可以提供必要关注,我由于竞争关系就不会在 deoplete 上面花太多的时间了。
关于比 YCM 更轻的说法,老实说 NCM 使用的多进程架构对内存来说视比较重的,但是根据我过去对 YCM 的体验,YCM 对 VIM 的启动时间影响非常明显,而 NCM 选择了延迟加载,在neovim窗口显示后才启动,在 neovim 退出后直接 detach NCM 管理进程,NCM 管理进程继续做必要的清理工作,所以对 neovim 的启动和退出都是影响非常小的。
刚刚看到 Shougo 大神的 twitter,
deopleteの最化をめている。 完方法を更する予定だ。 少しはマシになるだろう。 これは列化のための布石にすぎない。 deopleteは最の完プラグインになる。それは今ではない。
Google 翻译:
Deoplete's rival is nvim-completion-manager. To be honest, I am better than my complementary plugin. That is why I can not lose.
倍感荣幸,我也会加油的 ( _)
刚刚的日文引用复制错了,我不懂日文,抱歉 (/ω\)
deopleteのライバルはnvim-completion-managerである。正直言ってこれまでの完プラグインより良くできている。 だからこそ私はけられない。
![]() | 1 yuuko 2017-03-04 17:31:59 +08:00 via Android ![]() 已经用上了,很不错 |
2 pony279 OP 不知道是标题的原因,还是文案的原因,还是其他啥原因, 15 天前发过 t/341176#reply2 ,到现在也有 400 多点击了,才 1 人收藏,今天发现由 vim 这个板块又发了一次,结果 400 多点击, 7 人收藏 (·ω·`) |
![]() | 3 lll9p 2017-03-04 20:12:30 +08:00 好东西,不过标题起的不够好啊。 |
![]() | 6 tracyone 2017-03-04 21:14:29 +08:00 补全的准确性呢?语言的支持呢 |
7 pony279 OP @tracyone 目前支持 c/c++, php, go, python, Javascript, css 配合 autozimu 的 LanguageClient-neovim 的话是有非常强的扩充能力的,当然精力有限我只测试了 PHP , autozimu 应该由测试过 Javascript 和其他语言 具体怎么评价准确性我说的太主观,希望能亲自试一下,有疑问或者不好用的地方发 issue 即可 |
8 simple26 2017-03-04 22:27:15 +08:00 一点小建议: 关于文档 1. 英文 README 可能需要花费一些时间,所以建议先准备一份详实的中文 README 。这么做的主要目的是可以理清思路,毕竟母语比较容易组织语言。有了中文准备以后,再做一份英文的相信会轻松不少。 2. 更快,更轻。既然已经有了比较,那么最好就好好排排版,放到一起两两对比,既然教给大家一些知识,也能让大家鲜明地感受到此间差异。如果觉得这么做不合适的话,也可以只简略地提两句更快更轻的主导因素。相信很多人不会去点开 *这里* 的链接.... 3. 偶尔可以当回标题党 :) 至于怎么当这个标题党,就看你的语言能力了, 我只能说注意拿捏... 关于试用 neovim 试用起来没啥问题,但是 vim 可能还是需要再调整...... 同样一份 vim 配置, neovim 下 python 正常补全,但是 vim 下无法自动补全。 加油 |
![]() | 9 rashawn 2017-03-05 00:12:48 +08:00 via iPhone 楼主 楼上提建议的 问问他们能不能提 PR |
![]() | 10 reus 2017-03-05 00:20:08 +08:00 没有 deoplete 那样的 fuzzy match? 就是打 pf / pt 等可以选中 Printf 的 |
11 NoAnyLove 2017-03-05 01:59:46 +08:00 有参数补全吗? YCM 官方分支一直没有支持参数补全,不过有一个 fork 的分支倒是支持了,但是一直没有合并回去。 |
12 PythonAnswer 2017-03-05 08:46:33 +08:00 via Android 目前的行情是用 vim8 还是 neovim ?哪种人多 |
13 pony279 OP @reus 支持 fuzzy match ,有点问题,光标容易闪,不过我估计 deoplete 也面临着同样的问题, https://github.com/roxma/nvim-completion-manager/issues/8 @NoAnyLove 你是指类似 ultisnips 的参数补全?这个在我的 todo 里面,还没开始 https://github.com/roxma/nvim-completion-manager/issues/36 @PythonAnswer 哪种人多我不清楚 如果你是 linux/mac 用户,个人强烈推荐 neovim 。 windows 下的 neovim 我没有用过,就不评价了。 对我这样的插件开发者来说 RPC 是一个大 killer 。除此以外还有其他我关注的小的特性,都将会在 neovim 里面实现,比如 `<c-h>` 和 `<Backspace>` 按键的区分。又比如我之前写的小插件, https://github.com/roxma/vim-tmux-clipboard ,也依赖着 neovim 的 TextYankPost 。 |
![]() | 15 htfy96 2017-03-05 09:18:49 +08:00 via Android lang-server 是个好东西,可惜对 cpp 的支持还没有 ycm 完善 |
16 NoAnyLove 2017-03-05 09:22:04 +08:00 ![]() @pony279 我是指向 vim-jedi 那种,输入函数名后,会提示对应位置的参数是什么。比如像这种悬浮窗口的提示方法: https://github.com/davidhalter/jedi/raw/master/docs/_screenshots/screenshot_function.png 或者像这种,在输入完函数名后,将函数调用和形参一起补完,然后再依次移动到每个参数的地方,替换成真正的实参 https://camo.githubusercontent.com/a823bf9ec55b5b31aaf5a28946f7a0a80f7fc560/687474703a2f2f692e696d6775722e636f6d2f6d7873713959792e676966 比如输入 os.setgid ,补完会自动补全 os.setgid(gid),然后按下 Tab 键(或者其他的什么键),会自动移动到 gid ,填写真正的实参。 你提到的 issue#36 好像有点像第二种,不过不知道有没有包含输入实参自动替换掉原来的内容,以及按下某个按钮,自动跳到下一个参数 |
17 pony279 OP @NoAnyLove vim-jedi 的悬浮窗有些 BUG 和不想要的特性,比如会改变文档的是否已修改的属性。 https://github.com/neovim/neovim/issues/5808 NCM 有类似的特性,当你的光标停留在 `(` 或者 `,` 后面,会有一个 popup menu ,什么都不补全,只是显示函数参数。 ``` foo_bar(|) ``` |
19 PythonAnswer 2017-03-05 09:31:03 +08:00 @NoAnyLove 多谢!不过我是 win 用户啊。。 |
22 NoAnyLove 2017-03-05 12:12:01 +08:00 @PythonAnswer 亲,你 at 错认了。。。。。。。不过,话说为啥 Windows 下 Vim 和 NeoVim 都不太好用啊。。。。。。 |
25 simple26 2017-03-05 19:18:17 +08:00 @pony279 按照你的 README 该下载的都下载了 但是 vim 打开 python 无法补全 neovim 正常 不太清楚是“我的”问题还是 “你的” 问题 |
26 pony279 OP @simple26 有空的话希望能调试下,这是第一种方法,打日志,如果插件和 python 补全进程正常启动,会看到 cm_core 和 cm_jedi 的日志文件。如果从这里面可以看到异常,可以直接发 issue 给我,通常也比较好解决。 ``` NVIM_PYTHON_LOG_FILE=nvim.log NVIM_NCM_LOG_LEVEL=DEBUG vim test.py ``` 超详细的日志文件。 NVIM_PYTHON_LOG_FILE=nvim.log NVIM_PYTHON_LOG_LEVEL=DEBUG vim test.py ``` 如果日志文件都看不到,任何错误提示都没有,可以按照这个步骤尝试打开插件主进程,看下有无错误提示: 获取 vim-hug-neovim-rpc 的服务端口: ``` :echo g:_cm_servername 127.0.0.1:41579 ``` 启动主进程,(前面的日志设定也可以在这里使用) ``` python3 pythonx/cm_start.py core 127.0.0.1:41579 ``` |
27 simple26 2017-03-05 20:15:33 +08:00 |
![]() | 28 autozimu 2017-03-05 21:23:16 +08:00 via iPhone 建议可以发到 reddit 相关社区去,效果要比这里好很多。 再有,确实如上面建议,可以备一份中文 README ,方便中文用户。 |
29 pony279 OP @autozimu 谢谢,平时看资料英文居多,所以一开始选择写英文会舒服一点,有些词汇经常想不起对应的中文,比如我发帖里面用的 detach 中文文档会有计划出,优先级相对低一些,毕竟现在 neovim 项目本身英文较少,我估计 neovim 用户群对英文的阅读阻力也会小一些 |
30 pony279 OP @simple26 vim8 支持需要安装 https://github.com/roxma/vim-hug-neovim-rpc neovim_rpc#serveraddr() 这个是调用的结果就是刚刚的 g:_cm_servername 的真身 |
31 pony279 OP 我得先 fix 完这波 issue 再去别的社区发。 (·ω·`) |
32 simple26 2017-03-05 22:05:48 +08:00 |
34 pony279 OP @simple26 刚更新了文档, vim8 需要安装 neovim 的 pip 模块, 也就是说 `:python3 import neovim` 或者 `:python import neovim` 需要有一个可以工作。 |
![]() | 35 congeec 2017-03-06 07:30:01 +08:00 via iPad 在 markdown 里补全 python 、 go 。厉害了我的哥 看你给的链接,估摸着最近一年内主流语言有成熟的 language server |
36 simple26 2017-03-06 07:44:07 +08:00 @pony279 >vim8 需要安装 neovim 的 pip 模块 什么意思?不是 pip3 install neovim 就行了? vim8 的 Python 的确找不到 neovim module |
38 simple26 2017-03-06 09:34:57 +08:00 @pony279 那么我该做的应该都做了 但是 vim8 的 python3 的确是找不到 neovim module $ which python /Users/xlc/anaconda3/bin/python |
![]() | 39 waruqi 2017-03-06 10:59:01 +08:00 supertab 已完全够用了。。 |
![]() | 41 waruqi 2017-03-06 13:10:56 +08:00 @pony279 嗯嗯,确实每个人需求不一样,我习惯了敲代码的时候,默认不希望有自动补全来干扰我码字,能够让我安安静静写代码,只有在需要补全的时候,主动 tab 下就好。 你的项目很不错哦,赞一个。。! |
42 pony279 OP @waruqi 顺便安利一下, NCM 支持手动触发模式, https://github.com/roxma/nvim-completion-manager/blob/6a83d8d0fd8482183b2723a6f1e8da3c4dba1e42/doc/nvim-completion-manager.txt#L446 设置 `g:cm_auto_popup=0` 然后把需要的按键映射到 `<Plug>(cm_force_refresh)` 这个就可以了 |
43 pony279 OP @simple26 这个问题比较奇怪,我也不知到怎么排查了,这个属于在 vim 里面无法使用安装好的 pip 模块的问题 |
44 pony279 OP @waruqi 我还有打算尝试有点类似 mulcomplete 的模式,因为 <Plug>(cm_force_refresh) 可能会强制弹出多个 source 的一大堆补全,我想通过重复某个按键,从优先级高到低来尝试不同的 source 。 |
45 pony279 OP 说错了,是 mucomplete https://github.com/lifepillar/vim-mucomplete |
46 pony279 OP |
![]() | 49 ipconfiger 2017-03-06 18:01:33 +08:00 我的内心毫无波动, 默默的打开了 PyCharm |
53 pony279 OP @simple26 好的,谢谢! @NoAnyLove 参数展开利用 neosnippet 实现了,就是不知道为啥感觉有点粗糙,我在这里加了段 demo : https://github.com/roxma/nvim-completion-manager/issues/36#issuecomment-284701703 |
![]() | 54 kepbod 2017-03-08 02:44:03 +08:00 支持一下。既然也支持 vim8 ,叫 nvim-completion-manager 就好像只支持 neovim ,如果换个更霸气的名字就更好了。 |
55 NoAnyLove 2017-03-08 04:03:01 +08:00 @pony279 这种函数之后的 Place holder 看起来确实有点奇怪。而且需要安装 neosnippet 作为依赖,感觉加上了额外的限制(我的意思是,如果有用户本来不用 neosnippet ,或者本身是用 Ultisnips 的用户,为了使用这个功能就必须要切换到 neosnippet ,感觉这种限制比较大) |
56 NoAnyLove 2017-03-08 04:04:53 +08:00 @kepbod 赞同。看 nvim-completion-manager 这个名字我一直以为是 neovim 专属的插件 |
57 pony279 OP |
![]() | 58 river1007 2017-03-08 10:48:07 +08:00 支持支持,加油, deoplete 看起来好重。 |
59 pony279 OP ![]() |
![]() | 62 kenzi 2017-03-10 20:40:10 +08:00 关注点不同。。。。字体用的啥? timinus? |
63 pony279 OP ttystudio 生成 gif 的时候重新渲染的默认字体,不是我使用的字体 |
![]() | 65 river1007 2017-03-11 10:51:24 +08:00 @pony279 在自动补全的时候,大概率报这种错误,知道怎么解决不?:-) error caught while executing async callback: NvimError(b'Vim(sign):E474: Invalid argument',) Traceback (most recent call last): File "/Users/test/.config/nvim/plugged/LanguageClient-neovim/rplugin/python3/LanguageClient/LanguageClient.py", line 799, in addHighlightAndSign self.signid, startline + 1, signname, buf.number)) File "/usr/local/lib/python3.4/site-packages/neovim/api/nvim.py", line 218, in command return self.request('nvim_command', string, **kwargs) File "/usr/local/lib/python3.4/site-packages/neovim/api/nvim.py", line 131, in request res = self._session.request(name, *args, **kwargs) File "/usr/local/lib/python3.4/site-packages/neovim/msgpack_rpc/session.py", line 98, in request raise self.error_wrapper(err) neovim.api.nvim.NvimError: b'Vim(sign):E474: Invalid argument' the call was requested at File "/Users/test/.config/nvim/plugged/LanguageClient-neovim/rplugin/python3/LanguageClient/RPC.py", line 91, in serve self.handle(msg) File "/Users/test/.config/nvim/plugged/LanguageClient-neovim/rplugin/python3/LanguageClient/RPC.py", line 122, in handle self.onNotification(message) File "/Users/test/.config/nvim/plugged/LanguageClient-neovim/rplugin/python3/LanguageClient/LanguageClient.py", line 928, in handleRequestOrNotification getattr(self, method)(message['params']) File "/Users/test/.config/nvim/plugged/LanguageClient-neovim/rplugin/python3/LanguageClient/LanguageClient.py", line 769, in textDocument_publishDiagnostics self.nvim.async_call(self.addHighlightAndSign, params) |
66 pony279 OP @river1007 addHighlightAndSign 感觉跟 LanguageClient 的关系比较大,能把复现的方法整理一下发到 github 吗? https://github.com/autozimu/LanguageClient-neovim/issues |
67 jsfaint 2017-03-14 14:51:23 +08:00 看 github 上 ncm 的 clang 支持是 @pony279 fork 了一个版本,这个其实 ok 可是为啥是 python2 …… 目前 ncm 的 source 比起 deoplete 有点少 |
68 pony279 OP ![]() @jsfaint clang 官方库里面把 python3 支持去掉了,我还不清楚是什么原因 据 clang_complete 的维护者说,旧版本的 clang 库 python3 还是可以用的 我还没测试过 python3 ,要求 python2 也是保守起见。 |
69 pony279 OP |
70 jsfaint 2017-03-14 15:33:16 +08:00 @pony279 #68 clang_complete 原版有支持 pytho3 archlinux 默认是 python3 ,然后我 windows , mac 装的都是 python3 如果只能 python2 就有点蛋疼了…… |
71 pony279 OP NCM 是直接使用 python2 命令,一般视不会和 python3 冲突的。 |
72 pony279 OP ![]() @jsfaint let g:cm_sources_override = { \ 'clang_complete': {'channel': {'module': 'cm_sources.clang_complete', 'type': 'python3'}} \ } 把这个加到 vimrc 里面,可以强制 python3 |
73 jsfaint 2017-03-14 15:47:35 +08:00 |
74 pony279 OP @jsfaint 这个比较麻烦, 跟 completeopt 的 noselect 选项有关,现在是被 NCM 写死的,暂时不支持改动 此外 NCM 和 deoplete 的实现机制也有些区别,在 NCM 里面直接改 completeopt 还不行,关了 menu 以后可能会重新弹出来 所以,暂时不支持这种配置。 推荐配置是这个 inoremap <expr> <CR> (pumvisible() ? "\<c-y>\<cr>" : "\<CR>") enter 直接关闭 popup 并换行。 |
75 jsfaint 2017-03-14 16:10:54 +08:00 @pony279 #74 其实我有看到你 github 里面的这个配置……但是我就特不习惯换行的这个动作…… 我写成 ``` inoremap <expr> <CR> (pumvisible() ? "\<c-n>\<c-y>" : "\<CR>") ``` 第一个需求倒是满足了,可是如果有选中时候就傻逼了 orz |
76 pony279 OP ![]() |
77 jsfaint 2017-03-14 16:32:05 +08:00 @pony279 #76 哈哈~我也刚搞定这个 inoremap <expr> <CR> (pumvisible() ? (empty(v:completed_item) ? "\<C-n>\<C-y>" : "\<C-y>") : "\<CR>") popup menu 没关系啦~这个可以接受 |
78 jsfaint 2017-03-14 16:59:42 +08:00 @pony279 #76 Linux 下工作一切正常, windows(vim/neovim)下只有 python 的补全正常,其他的补全( c, js, go )不知道什么原因都没工作 ![]() 换回 neocomplete ( vim )和 deoplete ( neovim )都可以正常工作 |
79 pony279 OP @jsfaint 用这种方式打日志复现下试试 ``` NVIM_PYTHON_LOG_FILE=nvim.log NVIM_NCM_LOG_LEVEL=DEBUG vim test.js ``` windows 的话是 set NVIM_PYTHON_LOG_FILE=nvim.log set NVIM_NCM_LOG_LEVEL=DEBUG nvim test.js 然后看下相关的日志文件, js 的话是 nvim.log_xxx_cm_tern 还有 nvim.log_cm_core |
80 jsfaint 2017-03-15 09:42:32 +08:00 @pony279 #79 按照这个方法打开了日志 打开 index.js 出现了一堆 log ,但是没有 nvim.log_xxx.cm_tern ![]() cm_core 中有如下内容。看起来是 cm_tern 注册失败了 ``` 2017-03-15 09:18:43,110 [ERROR @ cm_core.py:__init__:115] 10164 - register_source for cm_sources.cm_tern failed Traceback (most recent call last): File "C:\Users\jia.sui\vimfiles\plugged\nvim-completion-manager\pythonx\cm_core.py", line 110, in __init__ m = importlib.import_module(modulename) File "C:\Users\jia.sui\AppData\Local\Programs\Python\Python35\lib\importlib\__init__.py", line 126, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 986, in _gcd_import File "<frozen importlib._bootstrap>", line 969, in _find_and_load File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 673, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 673, in exec_module File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed File "C:\Users\jia.sui\vimfiles\plugged\nvim-cm-tern\pythonx\cm_sources\cm_tern.py", line 6, in <module> ``` 打开 main.go ,有 cm_gocode 生成,但是在执行 cm_refresh 时候报错了 ``` 2017-03-15 09:18:44,009 [ERROR @ cm_start.py:on_notification:168] 5028 - Failed processing method: cm_refresh, args: [{'early_cache': 1, 'enable': 1, 'priority': 9, 'sort': 1, 'scopes': ['go'], 'channel': {'events': [], 'type': 'python3', 'id': 6, 'module': 'cm_sources.cm_gocode'}, 'scoping': 1, 'cm_refresh_patterns': ['\\.(\\w*)$'], 'abbreviation': 'Go', 'cm_refresh_min_word_len': 3, 'name': 'cm-gocode'}, {'scope_match': 'go', 'base': 'f', 'changedtick': 8, 'curpos': [0, 8, 6, 0, 6], 'bufnr': 1, 'col': 6, 'lnum': 8, 'startcol': 5, 'early_cache': 1, 'typed': ' f', 'scope': 'go', 'filetype': 'go', 'force': 0, 'filepath': 'D:\\Downloads\\js_test\\main.go'}] Traceback (most recent call last): File "C:\Users\jia.sui\vimfiles\plugged\nvim-completion-manager\pythonx\cm_start.py", line 165, in on_notification func(*args) File "C:\Users\jia.sui\vimfiles\plugged\nvim-completion-manager\pythonx\cm_sources\cm_gocode.py", line 56, in cm_refresh stderr=subprocess.DEVNULL) File "C:\Users\jia.sui\AppData\Local\Programs\Python\Python35\lib\subprocess.py", line 676, in __init__ restore_signals, start_new_session) File "C:\Users\jia.sui\AppData\Local\Programs\Python\Python35\lib\subprocess.py", line 955, in _execute_child startupinfo) FileNotFoundError: [WinError 2] 系统找不到指定的文件。 ``` |
82 pony279 OP @jsfaint 反应很慢指的视所有补全都很慢?还是 js 补全很慢? > FileNotFoundError: [WinError 2] 系统找不到指定的文件。 这个估计是指运行 `gocode` 命令失败,需要检查下环境变量。 |
83 pony279 OP |
84 jsfaint 2017-03-15 11:49:06 +08:00 |
85 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 很久没人回应…… |
88 NoAnyLove 2017-08-25 23:42:47 +08:00 从 YouCompleteMe 切换到了 NCM,感觉速度和响应快了不少。不过有一点小小的问题,切换到 NCM 之后,语法检查可以用 syntastic 代替,不知道查看文档、跳转到定义这些功能有没有什么好用的插件可以推荐一下。 |
89 pony279 OP ![]() @NoAnyLove 流行的语言一般都有对应的 vim 插件。例如 python 可以用 jedi-vim,golang 有 vim-go,NCM 目前只做补全。 https://github.com/autozimu/LanguageClient-neovim 如果能找到对应的 Language Server 也可以用这个,功能齐全。 |
90 NoAnyLove 2017-08-28 11:41:23 +08:00 @pony279 jedi-vim 的补全和文档、跳转功能都不错,不过 rename 功能有点太不靠谱了,还不如自己手动搜索替换靠谱。第一次知道 Language Server 这个东西,看起来很厉害的样子,抽空试试。感谢推荐。 |
91 ashfinal 2017-08-29 19:43:54 +08:00 不错,目前用的就是这个补全插件。个人感觉比 deoplete 要好,除了名字长了点…… 之前还给另一个插件 vimtex 提 issue,让作者在文档里加了 ncm 的相关说明。 |
92 pony279 OP @ashfinal 这个名字比方便合被 google 搜索出来,其次是表明项目的野心 。 看了下项目的 traffic 也确实如此。现在每天会有少量用户通过 google 搜索进去观光,偶尔贡献点 issue,方便我控制开发的节奏。推广的时候一下来一波 issue,有点受不了。 |
93 ashfinal 2017-09-05 14:31:06 +08:00 @pony279 有个好点的名字固然好,不过相对功能而言,反而没那么重要了 我个人目前是 vim8 用的 neocomplete,neovim 用的 ncm。(配置文件里判断一下就好),体验基本一致。 ncm 比较爽的一点是 scope 功能,markdown 文档里能直接补全 python 代码了。 |
94 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 这个有办法设置或者有修改的计划吗? 谢谢~ |
95 pony279 OP @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 清除掉再重新输入 |
96 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 行为有时候怪怪的 |
99 NoAnyLove 2017-10-01 11:51:15 +08:00 看到了 ncm-clang 的更新,不过如果想要使用 goto 特性还需要安装 clang_complete 并且添加一大段配置代码,感觉有点重复和麻烦。个人还是比较喜欢能安装一个插件就搞定的解决方案。好奇问问,为什么不直接增强对 Rip-Rip/clang_complete 的集成呢? |
100 pony279 OP ![]() @NoAnyLove clang_complete 采用的是 python 调用 libclang.so 。用系统的 python 还好,我在一些机器装了 conda,有可能无法使用,因为他们编译使用的 libstdc++ 版本不一致。 clang_complete 使用时间久了内存占用会越来越高 不想维护 clang_complete 的代码,比较困难 --- 目前体验到的 goto 特性有几个选择,但是 clang_complete 的表现最好,所以还是在文档里面做了说明 一旦出现更好的方案,我会更新文档,把 clang_complete 那段去掉。 |