转载

如何让 YouCompleteMe 和Sublime Text一起工作 - 神佑之园

如何让 YouCompleteMe 和Sublime Text一起工作

神眷之子 四月 27, 2016 科技 No Comments

之前我有一篇博文讲述Sublime text下的好用插件,里面重磅推出的就是 YouCompleteMe 和 YcmdCompletion 。作为Vim下一站式自动完成解决方案,安装起来确实不像其他的插件那么容易。部分原因是因为YouCompleteMe本来是Vim插件,后来作者对client和server端进行了分离,所以并不那么直观,还有有必要写一下的。并且,这个东东装好之后,可以一个服务器,两边使用,自如的在Vim和Sublime Text里面往返切换。 我不是编辑器战争党 :)

好,我们现在开始讲述怎么安装YouCompleteMe。

YouCompleteMe 安装部分:

如果你绝对不用Vim的话,那随便git clone https://github.com/Valloric/YouCompleteMe 到什么地方都可以,如果你用Vim,就把这个克隆到你的vim插件目录,我的vim 插件目录是~/.vim/bundle。

从git上clone了之后,别急着安装,要把submodule也更新了,在ycmd的根目录下面运行 git submodule update –init –recursive

然后就可以开始安装了。在ycmd根目录下面有一个install.py,支持很多参数,因为ycmd是一站式解决方案,支持C/C++, C#, Javascript, TypeScript, Java, Rust,Go, Python, Ruby PHP… 所以首先要决定服务器的支持范围,最简单的是参数是./install.py –all,  安装所有的支持。

  • 如果你想要C/C++, 就加入   --clang-completer
  • 想要python,什么都不用做,因为ycmd后端服务器就是python驱动的, 自带Jedi
  • 想要Rust –racer-completer
  • 想要Javascript –tern-completer
  • 想要Go, –gocode-completer

这个时候编译开始,比较坑的编译脚本会自动寻找你的系统python来进行编译,对于osx和大多数linux来说,这个是python2.7。如果你平时用的就是python2.7,那正好;如果你想用python3,需要修改以下 你PATH里面最靠前的python和python-config软链接指向:说白了吧,如果你装了homebrew,你要修改的就是/usr/local/bin/python -> /usr/local/bin/python3,  /usr/local/bin/python-config -> /usr/local/bin/python3-config,如果你没有装,那就修改/usr/bin/python 和/usr/bin/python-config 指向你安装的python3,改了这两个链接,就可以用python3来驱动了。用virtualenv似乎有时候不能成功,我实验了好几次,还是我这个方法比较稳妥。

如果你选了–all,但是又缺少omnisharp什么的,编译到后来会报错,但是不用理会,因为其实ycmd_core已经编译成功了,你可以在 YouCompleteMe/third_party/ycmd 里面看到 ycmd_core.so.

安装过程会自动下载libclang,有耐心就好。编译成功之后,在third_party 目录还能看到一些资源,比如racerd,可以在里面就地编译,cargo build之后就可以用了。

YcmdCompletion 配置部分:

关于ycmd server本身的配置,在YouCompleteMe/third_party/ycmd/ycmd 里面的 default_settings.json里面。这个文件其实也没什么好改的,主要是那几个binary path,Go语言的就是gocode_binary_path 和godef_binary_path, rust的是rust的源代码和racerd的binary, python的是python的解释器。 还有一个就是hmac 密钥,因为ycmd会在你的后台运行一个服务器,如果谁都可以连的话,就难免有恶意用户利用这一点了。为了防止这个成为一个安全漏洞,所以需要一个密钥,而这个密钥sublime的插件也可以自己生成。

在sublime 里面安装YcmdCompletion之后,首先cmd+shift+P,调出命令栏,输入ycmd,选择 ycmd: create HMAC Keys ,然后这个命令会自动生成一个HMAC key然后加入到你的user configuration file,很贴心。 保险起见我们可以把这个key复制粘贴到default_settings.json里面。不过如果你只用sublime text的话,就不用粘贴了。

其实我建议把YcmdCompletion的配置样板复制过来,因为除了这个HMAC key之外,还有很多可以配置的选项是必须的。

这两个一般默认就可以,除非想玩个花活,在服务器上运行ycmd,然后在自己的机器上自动完成。或者你的端口被占用,想换一个其他的。

“ycmd_server”: “http://127.0.0.1”,

“ycmd_port”: 8080,

这个一般就是1,当开启sublime text的时候,自动完成服务器也开启。

“use_auto_start_localserver”: 1,

这个是ycmd服务器的路径,注意,是 /ycmd/ycmd 外圈的ycmd是project,第二个才是python写的服务器。 因为如果仔细看git上的目录结构的话,ycmd里面有 init .py的那个才是可以当做一个python包直接运行的。

“ycmd_path”: “/home/USERNAME/ycmd/ycmd”,

这个就是上面说的default_settings.json,如果你不希望和vim共用,你可以配置好一个json放到其他地方去。

“default_settings_path”:”/home/USERNAME/ycmd/ycmd/default_settings.json”,

运行服务器的python,你用什么编译的,就用什么运行,这个只是运行服务器的python,即便是用python2.7运行,照样可以支持python3,因为python2.7的ycmd服务器可以运行一个python3的Jedi server。

“python_binary_path”: “/usr/local/bin/python”

语言支持。ycmd原生支持的就是c,python,rust和go,当然我们不一定都要用。

“languages”: [“cpp”, “python”, “rust”],

原文  https://blog.scislab.com/zh/2016/04/如何让youcompleteme-和sublime-text一起工作/
正文到此结束
Loading...