Emacs 自动补全插件 ycmd
Emacs 自动补全,最好的插件当属 ycmd。以下记录我的安装过程。
1. 安装 ycmd server
github 官方地址: https://github.com/Valloric/ycmd
- git 克隆 ycmd 到本地 ~/ycmd
$ git clone https://github.com/Valloric/ycmd.git ~/ycmd
- 安装必要的编译工具和库
$ sudo apt-get install build-essential cmake python-dev
- 进入文件夹 ycmd,下载完整的 submodule (比较大哦。。。)
$ git submodule update --init --recursive
- 编译 (比较慢哦。。。)
$ cd ~/ycmd
$ ./build.py --all
注意:对于最新的 ycmd,最好有选择的 build,(因为实在没必要在 Linux 下支持 C-sharp 的补全,而且要支持还得安装 xbuild (xbuild 可在 sourceforge 下载,解压缩就能用,不用装 Mono 的 msbuild),麻烦!)
我选择只要支持 c, c++, go, java, javascript 即可,
$ ./build.py --clang-completer --go-completer --java-completer --ts-completer --clang-tidy
编译完成之后,会在当前目录下生成一个 ycmd 文件夹,现在就像这样 ~/ycmd/ycmd
2. 安装 ycmd client,还有必要的工具
- 打开 Emacs,命令 M-x list-packages, 分别安装 ycmd, company-ycmd, flycheck-ycmd
3. 配置,如下内容添加到 ~/.emacs
;;;;================================================= < for ycmd start >
;;;; To use ycmd-mode in all supported modes
(require 'ycmd)
(add-hook 'after-init-hook #'global-ycmd-mode)
;;;; Specify only support c/c++ mode
;;(require 'ycmd)
;;(add-hook 'c++-mode-hook 'company-mode)
;;(add-hook 'c++-mode-hook 'ycmd-mode)
;;;; Specify how to run the server
(set-variable 'ycmd-server-command '("/usr/bin/python" "/home/peterpan/ycmd/ycmd"))
;;(set-variable 'ycmd-server-command '("/usr/bin/python" "~/ycmd/ycmd")) ;; Cannot use ~, should use abspath
;;;; Specify a global emacs configuration
(set-variable 'ycmd-global-config "/home/peterpan/ycmd/examples/.ycm_extra_conf.py")
;;(set-variable 'ycmd-global-config "~/ycmd/examples/.ycm_extra_conf.py") ;; Cannot use ~, should use abspath
;;;; Completion framework
(require 'company-ycmd)
(company-ycmd-setup)
(add-hook 'after-init-hook #'global-company-mode)
;;;; Enable flycheck
(require 'flycheck-ycmd)
(flycheck-ycmd-setup)
(add-hook 'after-init-hook #'global-flycheck-mode)
;;;; Set always complete immediately
(setq company-idle-delay 0)
;;;;================================================== < for ycmd end >
补全的时候,弹出 tip 窗口,用 Meta + n 或 Meta + p 去 cycle 可选项,选中后,直接按 Enter 确认。
4. 当有新库加入,需要更新文件 ~/ycmd/examples/.ycm_extra_conf.py
例如,我要支持 boost 的补全,则要加入 boost 头文件路径 /usr/local/boost_1_67_0,加到 flags 的最后即可,
flags = [ ... # for boost complete
'-isystem',
'/usr/local/boost_1_67_0'
]
对于 Ubuntu 18.04 的 workaround 方法
因为我之前一直用 Ubuntu 14.04 和 CentOS 7,这两个操作系统默认的 gcc 版本是 4.8,我在这两个系统下完成了对 emacs 的各种配置(包括 ycmd 的配置),并且各项功能都调好了。
因项目需要,在升级系统到 Ubuntu 18.04 后,为方便起见,我把旧系统的 .emacs 和 .emacs.d 拷贝到新系统的 home 目录下, 并调整 ycmd 配置文件的内容,使其指向新系统的 c++ 头文件目录,但是却不能实现 c++ 的自动补全。目前怀疑和 Ubuntu 18.04 的 gcc 和 g++ 版本有关,新系统默认的版本是 7.4。
workaround 方法是:安装 gcc 4.8 ( $ sudo apt-get install gcc-4.8 ) 和 g++ 4.8 ( $ sudo apt-get install g++-4.8 ),并调整 ycmd 配置文件,使其指向 c++ 4.8 的头文件目录。
完。
Emacs 自动补全插件 ycmd的更多相关文章
- CentOS7 Vim自动补全插件----YouCompleteMe安装与配置
最近刚装了新系统CentOS7,想要把编码环境配置一下,使用Vim编写程序少不了使用自动补全插件,我以前用的是neocomplcache+code_complete+omnicppcomplete.但 ...
- VIM自动补全插件 - YouCompleteMe--"大神级vim补全插件"
VIM自动补全插件 - YouCompleteMe 序言 vim 之所以被称为编辑器之神多半归功于其丰富的可DIY的灵活插件功能,( 例如vim下的这款神级般的代码补全插件YouCompleteMe) ...
- Vimer的福音 新时代的Vim C++自动补全插件 clang_complete
使用vim的各位肯定尝试过各种各样的自动补全插件,比如说大名鼎鼎的 OmniCppComplete .这一类的插件都是对 Ctags 生成的符号表进行字符串匹配来获得可能的补全项.他们在编写 C 代码 ...
- 新时代的Vim C++自动补全插件 clang_complete
Vimer的福音 新时代的Vim C++自动补全插件 clang_complete 使用vim的各位肯定尝试过各种各样的自动补全插件,比如说大名鼎鼎的 OmniCppComplete .这一类的插 ...
- 【转】Vim自动补全插件----YouCompleteMe安装与配置
原文网址:http://www.cnblogs.com/zhongcq/p/3630047.html 使用Vim编写程序少不了使用自动补全插件,在Linux下有没有类似VS中的Visual Assis ...
- Vim自动补全插件----YouCompleteMe安装与配置
Vim自动补全插件----YouCompleteMe安装与配置 使用Vim编写程序少不了使用自动补全插件,在Linux下有没有类似VS中的Visual Assist X这么方便快捷的补全插件呢?以前用 ...
- vim python自动补全插件:pydiction
vim python自动补全插件:pydiction 可以实现下面python代码的自动补全: 1.简单python关键词补全 2.python 函数补全带括号 3.python 模块补全 4.pyt ...
- vim中自动补全插件snipmate使用
vim中自动补全插件snipmate使用 1.下载snipMatezip:https://github.com/msanders/snipmate.vim/archive/master.zip 2.解 ...
- YouComplete:vim自动补全插件
在github上下载插件,按照README.md安装 1,ubuntu安装 vim插件管理:vundle插件安装同样按照 README.md 操作 2,user guide General Usage ...
随机推荐
- angular $watch 一个变量的变化
$scope.$watch('custArea', function(newValue, oldValue) { angular.forEach(newValue, function(item, ke ...
- 洛谷P4064 [JXOI2017]加法(贪心 差分)
题意 题目链接 Sol 这题就是一个很显然的贪心... 首先二分一个答案,然后check是否可行.check的时候我们需要对每个位置\(i\),维护出所有左端点在\(i\)左侧,右端点在\(i\)右侧 ...
- git命令详解( 九 )
此为git第九篇记录 整理提交记录 Git Cherry-pick 交互式的 rebase Git Tags Git Describe 整理提交记录 之前我们已经学习了 Git 的基础知识 ...
- Dynamics 365-部分用户访问环境缓慢
链接来自MS MVP 罗勇大神的Dynamics 365中部分账号使用系统明显缓慢怎么办?先这么干! 之前项目中也遇到过客户部分账户访问环境缓慢的问题,在此做个记录,等再碰到了,以此思路进行尝试
- getCacheDir()、getFilesDir()、getExternalFilesDir()、getExternalCacheDir()
一.getCacheDir.getCacheDir getCacheDir()方法用于获取/data/data//cache目录 getFilesDir()方法用于获取/data/data//file ...
- Android EditText手机号格式化输入XXX-XXXX-XXXX
先来效果图: 设置手机格式化操作只需要设置EditText的addTextChangedListener的监听,下面看代码 /*editText输入监听*/ et_activity_up_login_ ...
- leetcode-69.x的平方根
leetcode-69.x的平方根 Points 二分查找 牛顿迭代 题意 实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型是整数,结果只保 ...
- katalon之web文件上传
参考:https://docs.katalon.com/katalon-studio/docs/webui-upload-file.html#example- 适用范围:tag=input, type ...
- adb入门学习笔记
连接模拟器(模拟器桥接模式) 使用adb devices列出已连接到工作站的设备. 使用adb shell 启动设备或模拟器上的shell. 列出设备已安装的所有软件包 将电脑文件移动到手机模拟器上( ...
- C# -- 交错数组的使用
C# -- 交错数组的使用 交错数组是元素为数组的数组.交错数组元素的维度和大小可以不同.交错数组有时称为“数组的数组”. 1. 举例一:子数组是长度相同的一维数组 static void Main( ...