emacs 使用 auto-complete clang 实现 c++ 代码补全

自从将 <CTRL> 与 <CAPS> 按键调换后,控 emacs 的心又回来了。再也不用 vim 小打小闹了。

 

auto-complete本身就是一款在 emacs 下非常强大的代码补全插件,可是受不了 cedet 的补全速度,只能干着急。众里寻她千百度,重要找到了一款在 emacs 下相当不错的代码补全插件,auto-compete-clang,速度快,配置简单,提示优美~

如下图



 很漂亮吧~

 

贴一份 .emacs 文件吧

 

;; 开启 auto-complete
(add-to-list 'load-path "~/.emacs.d/el-get/auto-complete/")
(require 'auto-complete)
(add-to-list 'ac-dictionary-directories "~/.emacs.d/el-get/auto-complete/ac-dict/")
(add-to-list 'ac-user-dictionary-files "~/.emacs.d/el-get/auto-complete/dict/guotf.dict")
(require 'auto-complete-config)
;; 结束

;; 开启 auto-complete-clang
(add-to-list 'load-path "~/.emacs.d/el-get/auto-complete-clang/")
(require 'auto-complete-clang)  
;;(setq ac-clang-auto-save t)  
;; 设置不自动启动
(setq ac-auto-start nil)  
;; 设置响应时间 0.5
(setq ac-quick-help-delay 0.5)  
;;(ac-set-trigger-key "TAB")  
;;(define-key ac-mode-map  [(control tab)] 'auto-complete)  
;; 提示快捷键为 M-/
(define-key ac-mode-map  (kbd "M-/") 'auto-complete) 
(defun my-ac-config ()  
  (setq ac-clang-flags  
        (mapcar(lambda (item)(concat "-I" item))  
               (split-string  
                "
 /usr/include/c++/4.6
 /usr/include/c++/4.6/i686-linux-gnu/.
 /usr/include/c++/4.6/backward
 /usr/lib/gcc/i686-linux-gnu/4.6/include
 /usr/local/include
 /usr/lib/gcc/i686-linux-gnu/4.6/include-fixed
 /usr/include/i386-linux-gnu
 /usr/include
"
)))  
  (setq-default ac-sources '(ac-source-abbrev ac-source-dictionary ac-source-words-in-same-mode-buffers))  
  (add-hook 'emacs-lisp-mode-hook 'ac-emacs-lisp-mode-setup)  
  (add-hook 'c-mode-common-hook 'ac-cc-mode-setup)  
  (add-hook 'ruby-mode-hook 'ac-ruby-mode-setup)  
  (add-hook 'css-mode-hook 'ac-css-mode-setup)  
  (add-hook 'auto-complete-mode-hook 'ac-common-setup)  
  (global-auto-complete-mode t))  
(defun my-ac-cc-mode-setup ()  
  (setq ac-sources (append '(ac-source-clang ac-source-yasnippet) ac-sources)))  
(add-hook 'c-mode-common-hook 'my-ac-cc-mode-setup)  
;; ac-source-gtags  
(my-ac-config)  
(ac-config-default)
;; 结束

 

详细的配置方式还是自己摸索比较好!可以参考一下两篇

这里 、还有这里

 

<think>好的,我现在需要帮助用户设置Emacs代码自动补全功能。首先,我得回忆一下Emacs中常用的补全工具。常见的包括company-mode、auto-complete和helm。其中,company-mode现在比较流行,可能更适合推荐给用户。 接下来,我要考虑安装方法。用户可能需要通过包管理器来安装,比如使用内置的package.el或者use-package。需要确保他们已添加了MELPA源,这样安装起来更方便。然后,给出具体的安装命令,比如M-x package-install RET company RET。 然后,配置部分。用户可能需要在init文件中启用全局的company-mode,并设置一些快捷键,比如M-TAB或者C-M-i来触发补全。另外,针对不同编程模式,可能需要不同的后端,比如company-capf,这部分需要说明如何配置。 还要考虑到用户可能需要更多的定制选项,比如补全延迟时间、最小前缀字符数等。这时候需要给出一些常用的配置示例,比如调整company-idle-delay和company-minimum-prefix-length。 另外,可能还需要提到如何针对特定语言进行配置,比如通过hook来添加不同的后端。例如,对于C语言使用company-clang,或者通过lsp-mode结合company-lsp,这样用户可以根据自己的需求调整。 最后,要提醒用户如果遇到问题,可能需要安装额外的包,比如company-lsp或者language-specific的后端。同时,建议他们查看官方文档或社区资源,以便进一步定制和解决问题。 整个过程中,要确保步骤清晰,语法正确,用中文简洁明了地解释每个步骤,避免使用复杂术语,让用户能够一步步跟着操作。同时,检查是否有遗漏的细节,比如包管理器的初始化,或者常见错误的解决方法,可能需要简单提及。</think>在 Emacs 中设置代码补全功能可通过以下步骤实现,推荐使用功能强大的 `company-mode`(Complete Anything): --- ### 1. 安装 company-mode 通过内置包管理器安装: ```elisp M-x package-install RET company RET ``` --- ### 2. 基础配置 在 `~/.emacs.d/init.el` 添加: ```elisp ;; 全局启用 company-mode (require 'company) (add-hook 'after-init-hook 'global-company-mode) ;; 设置快捷键(默认使用 Meta+TAB 触发补全) (define-key company-active-map (kbd "M-<tab>") 'company-complete) ``` --- ### 3. 核心功能调优 ```elisp ;; 调整补全延迟(单位:秒) (setq company-idle-delay 0.2) ;; 设置最小触发前缀字符数 (setq company-minimum-prefix-length 1) ;; 启用即时补全(输入时自动显示候选) (setq company-selection-wrap-around t) ``` --- ### 4. 语言专属配置 #### 示例:C/C++ 开发 ```elisp (add-hook 'c-mode-hook (lambda () (setq company-backends '(company-capf company-keywords)))) (add-hook 'c++-mode-hook (lambda () (setq company-backends '(company-capf company-keywords)))) ``` #### 示例:Python 开发 ```elisp (add-hook 'python-mode-hook (lambda () (setq company-backends '((company-elisp company-capf :with company-yasnippet))))) ``` --- ### 5. 扩展增强 - **语义级补全**:安装 `lsp-mode` + `company-lsp` ```elisp (use-package lsp-mode :ensure t :hook ((python-mode . lsp) (js-mode . lsp))) ``` - **代码片段**:配合 `yasnippet` ```elisp (use-package yasnippet :ensure t :config (yas-global-mode 1)) ``` --- ### 6. 验证配置 重启 Emacs 后: 1. 打开代码文件(如 `.py`/`.c`) 2. 输入部分字符后按 `TAB` 或等待自动触发 3. 用方向键选择候选,按 `RET` 确认 --- ### 常见问题排查 -补全菜单不显示:检查 `company-mode` 是否激活 (`M-x company-mode`) - 语言专属补全失效:确认对应语言后端是否加载 - 快捷键冲突:通过 `C-h k` + 按键组合检查绑定情况 建议通过 `M-x customize-group RET company RET` 进行图形化设置。详细文档可查看官方手册:`C-h i m company RET`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值