尝试了一下company-mode,什么都没有发生怎么回事


如果我直接用company-clang


这是怎么回事??

补全需要不同的backend的吧,这个要安装不同的package的。

我应该怎么做呢

你是什么操作系统?Company的后端装了哪些?LLVM的安装路径放到环境变量中了吗?

ubuntu
后端装了哪些我不知道,从CSDN找的教程,直接装company了

Linux下的话,你先装这几个包:irony, company-irony-c-headers,company-irony, flycheck

然后添加下面的配置:

(require 'irony)
(require 'company-irony-c-headers)
(eval-after-load 'company
  '(add-to-list
    'company-backends '(company-irony-c-headers company-irony)))
(eval-after-load 'flycheck
  '(add-hook 'flycheck-mode-hook #'flycheck-irony-setup))
(add-hook 'c++-mode-hook 'irony-mode)
(add-hook 'c++-mode-hook 'company-mode)
(add-to-list 'auto-mode-alist '("\\.cpp\\'" . c++-mode))
(add-to-list 'auto-mode-alist '("\\.h\\'" . c++-mode))
(add-to-list 'auto-mode-alist '("\\.c\\'" . c++-mode))
(add-to-list 'auto-mode-alist '("\\.cc\\'" . c++-mode))
(add-to-list 'auto-mode-alist '("\\.hh\\'" . c++-mode))
(setq c-default-style "k&r"
      c-basic-offset 4)

再用apt查找并安装python的flycheck包,llvm及其lib和headers,clang及其相关工具(我不知道debian系下分成的哪些包,自己找找吧)

然后重启电脑,再试试看?

你说的那些包

apt里没有,emacs里也找不到

(setq package-archives '(("gnu"   . "http://mirrors.cloud.tencent.com/elpa/gnu/")
                         ("melpa" . "http://mirrors.cloud.tencent.com/elpa/melpa/")
			 ("melpa-stable" . "http://mirrors.cloud.tencent.com/elpa/melpa-stable/")))

(package-refresh-contents)

刷新一下

我也真是搞不懂,前几天package-refresh-contents都不成功,现在偏偏可以了

顺便问一下,这个company-clang是一次性的,其他补全都是这样吗

不是一次性的,它是company的一个后端,你用它也可以,用irony也可以。在linux下,我建议用irony,你也可以都试试。

我的意思是,这个company是不像其他IDE那样实时给你提供补全信息,
而是要你手动命令才显示补全信息的吗??

company是一个补全框架,有一些默认的补全的内容,但更多的是需要其它的来补充它的,company-clang和irony都是这样的补充的工具。不过现在我已经不用irony了,换用了论坛大佬做的nox,也是配合company的,你可以在坛子里搜一下。

请问你当初有company + irony的配置吗??我想手抄一份

irony的配置文件已经删除了,不过以前做了点记录,像下面这样,不确定从哪里抄的了,是否是最后用过的设置也不太清楚,谨供参考:

(require 'irony)
(require 'company-irony-c-headers)
(setq company-idle-delay 0.1)
(eval-after-load 'company
  '(add-to-list
    'company-backends '(company-irony-c-headers company-irony company-shell company-files)))
(eval-after-load 'flycheck
  '(add-hook 'flycheck-mode-hook #'flycheck-irony-setup))
(add-hook 'c++-mode-hook 'irony-mode)