一大波 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 1
已经用上了,很不错
|
2
pony279 OP 不知道是标题的原因,还是文案的原因,还是其他啥原因, 15 天前发过 https://www.v2ex.com/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 1
@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 原版有支持 python3
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 那段去掉。 |