GNU Emacs中的公司后端

时间:2017-07-06 21:58:17

标签: emacs backend

在Emacs中,我安装了MELPA company-irony-c-header包。然后我在网上做了一些研究,显然为了配置包,我采取的意思是“激活”它,我不得不添加:

(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代表我的文件名)。我完全不知道后端是什么,或者如何使用它。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

A /来自official doc

  

公司是Emacs的文本完成框架。这个名字代表着   “完成任何事情”。它使用可插拔的后端和前端   检索并显示完成候选人。

这意味着“后端”是公司用来建议完成的信息来源(解析器,数据库......)。

作为一个例子,对于C / C ++工作,我使用了优秀的RTags。将此后端添加到公司是完成的,谢谢:

(push 'company-rtags company-backends)

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

(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是一个很好的起点。