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 是一个很好的起点。
在 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 并使用
启动 emacsemacs -q --load "testing_init.el" your_prog.cpp
现在如果你输入
#include<...
在your_prog.cpp文件中,公司应该在输入第三个字符后触发自动完成。
有很多很好的教程可以将 Emacs 配置为 C++ 编辑器。如果认为 this one 是一个很好的起点。