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 ...
随机推荐
- vuejs自定义过滤器根据搜索框输入的值,筛选复杂的列表数据
如题所示,自定义过滤器根据搜索框输入的值,筛选复杂的列表数据.如图所示: html代码: <input type="text" placeholder="姓名/账号 ...
- cf932E. Team Work(第二类斯特灵数 组合数)
题意 题目链接 Sol 这篇题解写的非常详细 首先要知道第二类斯特灵数的一个性质 \[m^n = \sum_{i = 0}^m C_{n}^i S(n, i) i!\] 证明可以考虑组合意义:\(m^ ...
- Android面试题总结(不定期更新、附答案)
1.Activity的启动模式? activity一共有4种启动模式:standard.singleTop singleTask .singleInstance standard:(标准模式)默认的就 ...
- WebView内存泄露的解决方案
一.简介: 做Android开发的相信都对webview不会陌生,而且也对系统自带的webview本身存在的问题也是怨念很久了,一方面是本身对js的支持不是很好另外一方面就是经常被人诟病的内存泄露了, ...
- html-edm(邮件营销)编写规则
最近写了一个edm邮件 以前没有接触过 使用的是很老的html页面编写规则 只能用table标签 在此记录一下edm编写的一些规则 个人参考的是这两个网址,转载一下 http://www.zco ...
- 使用Visual Studio Team Services持续集成(四)——使用构建运行测试
使用Visual Studio Team Services持续集成(四)--使用构建运行测试 使用构建来运行测试来验证集成是一个很好的实践. MyHealth.API.IntegrationTests ...
- (面试题)python面试题集锦-附答案
1.一行代码实现1-100的和 sum_1_100 = sum(range(1, 101)) 2.如何在一个函数内修改全局变量的值 a = 100 def foo(): global a a = 30 ...
- win10 出现0x80072efd错误
0x80072efd 0x80072efd 是网络问题,windows更新或windows应用商店出现0x80072efd问题,请检查本机代理,是否开着小飞机(Shadowsocks)之类的代理工具. ...
- 关于C#List中FindAll用法的一些简单示例
using System; using System.Collections.Generic; public partial class List : System.Web.UI.Page { pro ...
- c/c++拷贝构造函数和关键字explicit
c/c++拷贝构造函数和关键字explicit 关键字explicit 修饰构造方法的关键字,加上了,就告诉编译器,不可以隐式初始化对象:不加就可以隐式初始化对象: 下面的代码是可以正常编译执行的,但 ...