• 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 的头文件目录。

    完。

     

  • 相关阅读:
    给JFinal添加 Sqlite 数据库支持
    超强、超详细Redis数据库入门教程
    HTML5实现多文件的上传示例代码
    JAVA 使用Dom4j 解析XML
    【VBA研究】Excel VBA利用ADODB访问数据库使用小结
    JFinal 部署在 Tomcat 下推荐方法
    Java WebService 简单实例
    关于XML的验证(DTD与XSD)一点实践
    基于机器学习的web异常检测
    30万奖金!还带你奔赴加拿大相约KDD!?阿里聚安全算法挑战赛带你飞起!
  • 原文地址:https://www.cnblogs.com/gaowengang/p/5745027.html
Copyright © 2020-2023  润新知