GNU Emacs 中的公司后端

Company Backends in GNU Emacs

在 Emacs 中,我安装了 MELPA company-irony-c-header 包。然后我在网上做了一些研究,显然为了配置包,我的意思是 "activating" 它,我不得不添加这个:

(defun company-my-backend (command &optional arg &rest ignored)
  (interactive (list 'interactive))
  (case command
    (interactive (company-begin-backend 'company-my-backend))
    (prefix (when (looking-back "foo\>") (match-string 0)))
    (candidates (when (equal arg "foo") (list "foobar" "foobaz" "foobarbaz")))
    (meta (format "This value is named %s" arg))))

进入一个叫做“后端”的东西(foo 代表我的文件名)。我完全不知道后端是什么,也不知道如何使用它。任何帮助将不胜感激。

A/ 来自 official doc

Company is a text completion framework for Emacs. The name stands for "complete anything". It uses pluggable back-ends and front-ends to retrieve and display completion candidates.

这意味着 "back-ends" 是公司用来建议完成的信息来源(解析器、数据库...)。

例如,对于 C/C++ 作品,我使用优秀的 RTags。将此后端添加到公司完成,谢谢:

(push 'company-rtags company-backends)

B/ 现在针对您的问题,一个最小的 company-c-headers 工作示例是:

(package-initialize)

(require 'company)
(require 'company-c-headers)

(add-to-list 'company-backends 'company-c-headers)

;; system dirs (for include <...>)
(add-to-list 'company-c-headers-path-system "/usr/include/c++/6")
;; (add-to-list 'company-c-headers-path-system "ANOTHER_SYSTEM_DIR")
;; -> use "gcc -E -Wp,-v -" to get the complete list

;; You can also define (for include "...")
;;(add-to-list 'company-c-headers-path-user "/home/YOUR_PROJECT")

(add-hook 'c++-mode-hook 'company-mode)
(add-hook 'c-mode-hook 'company-mode)

保存此文件 testing_init.el 并使用

启动 emacs
emacs -q --load "testing_init.el" your_prog.cpp

现在如果你输入

 #include<...

your_prog.cpp文件中,公司应该在输入第三个字符后触发自动完成。

有很多很好的教程可以将 Emacs 配置为 C++ 编辑器。如果认为 this one 是一个很好的起点。