注:后面有解决过程,要是我的解决方法不适用于你,你可以看下我的解决过程,应该会对你有帮助
问题描述:
Windows 7 系统下,安装了Vim8,安装好了 YouCompleteMe,能够安装 C 语言和 java 的补全功能,但是打开 vim 的时候却出现 “no module name ycm” 的错误。
解决
在 YouCompleteMe\autoload
下的 youcompleteme.vim
文件的第255行插入 Windows 系统下的指向真正的 YouCompleteMe 目录的路径即可,比如我插入的路径是:
root_folder = "C:\\Users\\Administrator\\.vim\\bundle\\YouCompleteMe"
之后,再次在 vim 里面执行 :py3 print(__import__('sys').path)
就不再是下图:
而是下图:
你会发现路径的表示方式变成了 Windows 系统的路径表示方式。
解决过程:
- 百度了这个错误,发现很多都是什么 future 或者是 ycmd 模块不存在,没有看了。
- 到 YouCompleteMe 的 github 的 issue 发现有人提过这个问题并且已经被 close,那说明已经解决了这个问题。解决问题的是下图的评论,里面说到的是 Windows 系统下的目录的表示问题,不过还是看不懂。
- 打开了上面的图片说到的 gitter 链接,发现是类似聊天室的问题提问和解决。要知道,上图issue里解决了问题的时间是1月30号,现在已经是2021年5月29日了,而这些信息又超级多,因为没有登录,所以没有任何搜索功能。登录之后搜索这个问题,找了很多才找到下图的提问的地方:
- 从上面的帖子开始往下读,也说到了输出python的sys模块的path列表,也说到了
:scriptnames
,但我还是看不懂,往下看发现那个需要移除什么东西,我以为是移除俩文件,但发现并不行。但是scriptnames
我也找不到能够删除一个元素的指令。
- 因为之前学过一点 vim 配置文件的编写,我觉得可以到那几个 vim 文件找一下有没有包含 ycm 的 python 代码,输出我的 vim 的
scriptname
列表的 youcompleteme 配置文件列表,如下图:
- 打开了
autoload
文件夹下面的那个文件,搜索字符串ycm
,找了很久,到第247行找到了SetUpPython
函数,试验了一下发现就是这个函数里面的 python 代码使用的 ycm 模块,分析了一下,发现就是这里添加的 path 的元素的,所以这里是问题的关键,欲改之(这里是我修改之后的文件截图)。
7. 本来我试着修改了第258行的denpendencies的一个元素,但发现没什么用。联想到前面说的 Windows 系统下路径的表示问题,我直接在255行插入我的 ycm 的第三方代码的路径,插入之后就没问题了。