• 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

    - 安装必要的编译工具和库

    $ build-essential cmake python-dev

    - 下载完整的 submodule (比较大哦。。。)

    $ git submodule update --init --recursive

    - 编译 (比较慢哦。。。)

    $ cd ~/ycmd

    $ ./build.py --all

    编译完成之后,会在当前目录下生成一个 ycmd 文件夹,这个文件夹中有一些python脚本,emacs-ycmd就从这个文件夹中启动ycmd server。

    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/cobbliu/ycmd/ycmd"))

    ;;;; Specify a global emacs configuration
    (set-variable 'ycmd-global-config "/home/cobbliu/ycmd/examples/.ycm_extra_conf.py")

    ;;;; 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)

    补全的时候,弹出 tip 窗口,用 Meta + n 或 Meta + p 去 cycle 可选项,选中后,直接按 Enter 确认。

    对于大型项目来说,为ycmd server提供每个cpp文件的编译列表会使ycmd更快速地补全,这个文件名叫compile_commands.json。生成这个文件的方法见:https://github.com/astroidmail/astroid/issues/14

    生成好compile_commands.json之后,将它放到你的项目根目录下面,然后再在.ycm_extra_conf.py配置中将项目根目录写到compilation_database_folder = '/Users/cobbliu/share/'中。

    参考:http://www.cnblogs.com/gaowengang/p/5745027.html

  • 相关阅读:
    Python 正则表达式匹配两个指定字符串中间的内容
    Switch Case 和 If Else
    MYSQL LETT/RIGHT/INNER/FUll JOIN 注意事项
    MYSQL 批处理 Packet for query is too large
    Junit单元测试不支持多线程
    postman中 form-data、x-www-form-urlencoded、raw、binary的区别
    一个项目中:只能存在一个 WebMvcConfigurationSupport (添加swagger坑)
    Nginx 转发特点URL到指定服务
    基于UDP协议的程序设计
    TcpClient类与TcpListener类
  • 原文地址:https://www.cnblogs.com/cobbliu/p/7455322.html
Copyright © 2020-2023  润新知