1. 클라이언트 설치
패키지 컨트롤 검색 후 YcmdCompletion
2. 서버 설치
서버를 시작하는 방법에는 수동과 자동 두 가지가 있습니다.
2.1 수동 방법:
ycmd 서비스를 컴파일합니다. 이는 해당 플랫폼에서 직접 컴파일해야 합니다. clang과 같은 일부 라이브러리가 다운로드됩니다. 독창적인 컴파일 방법
컴파일 도구 설치
sudo apt-get install build-essential cmake python-dev
ycmd 소스 코드를 다운로드합니다. 빌드가 완료되면 clang 라이브러리가 자동으로 다운로드됩니다.
cd ~/.config/sublime-text-3/User git clone git@github.com:Valloric/ycmd.git && cd ycmd git submodule update --init --recursive ./build.py --all
성공적으로 설치하는 데 약 30분이 걸렸습니다. 이제 컴파일 후에는 하나의 라이브러리인 ycm_core.so만 생성됩니다. 이전에는 ycm_client_support.so
도 있었습니다. 이제 병합되었습니다. ycm_client_support.so
,现在被合并了。
接下来,手工启动服务器(注意当前目录一直是在ycmd这个目录下), 服务器启动需要一个配置文件ycmd/default_settings.json
, 每次启动之后会自动被删除掉,所以我们先拷贝一份到当前目录下
cp ycmd/default_settings.json .
然后打开他进行修改两项,global_ycm_extra_conf
指定默认的.ycm_extra_conf.py的位置和hmac_secret
设定HMAC的key。
默认的.ycm_extra_conf.py
下载,用来配置补全功能的设置,具体参数可以看文档.ycm_extra_conf.py配置
wget https://raw.githubusercontent.com/Valloric/ycmd/master/cpp/ycm/.ycm_extra_conf.py
生成HMAC key
Command Palette > Ycmd: Create HMAC keys
服务器是用python写的,所以在ycmd/ycmd下面有一个__main__.py文件,我们可以启动它。
python ycmd --port 8888 --options_file ycmd/default_settings.json
服务端已经启动了,接下来配置sublime-text客户端,打开Ycmd的配置文件 Preferences > Package Settings > YcmdCompletion > Settings - Default
, 修改ycmd_port
端口。
这个方式的最大的好处就是,服务器可以部署在远程,或者做成Docker image
,只需要指定ip和port就可以任意使用了。
2.2 自动方式
打开Ycmd的配置文件 Preferences > Package Settings > YcmdCompletion > Settings - Default
,设置3个参数即可。
/* ===== YCMD AUTO START MODE =====*/ "use_auto_start_localserver": 1, "ycmd_path": "/home/will/.config/sublime-text-3/Packages/User/ycmd/ycmd", "python_binary_path": "/usr/bin/python",
3. 启动Sublime,进行测试
手下设置补全触发规则,打开Preferences -> Settings - More -> Syntax Specific - User
,插入下面代码。这样当输入, ::, ->
就可以触发自动补全了。我增加了/
다음, 서버를 수동으로 시작합니다(현재 디렉터리는 항상 ycmd 디렉터리에 있음). 서버 시작에는 구성 파일 ycmd/default_settings.json
이 필요합니다. 이 파일은 각 시작 후 자동으로 삭제되므로 복사합니다. 먼저 현재 디렉터리
{ "auto_complete_selector": "source - (comment, string.quoted)", "auto_complete_triggers": [ {"selector": "source.c++", "characters": "."}, {"selector": "source.c++", "characters": "::"}, {"selector": "source.c++", "characters": "->"}, {"selector": "source.c++", "characters": "/"} ] }