C+的emacs自动完成+; 我试图为C++编程设置Emacs。 大部分人都是按照这里的指示做的。。 除了我按照这里的说明进行的自动完成之外,其他一切都很好

C+的emacs自动完成+; 我试图为C++编程设置Emacs。 大部分人都是按照这里的指示做的。。 除了我按照这里的说明进行的自动完成之外,其他一切都很好 ,emacs,Emacs,按照说明,[C-]应该绑定,但当我按[ctrl+'-']时,我看不到任何建议。。 这是我的.emacs文件 (require 'package) (add-to-list 'package-archives '("marmalade" . "http://marmalade-repo.org/packages/")) (package-refresh-contents) (require 'cc-mode) (setq-default c-basic-offset

按照说明,[C-]应该绑定,但当我按[ctrl+'-']时,我看不到任何建议。。 这是我的.emacs文件

(require 'package)
(add-to-list 'package-archives
             '("marmalade" . "http://marmalade-repo.org/packages/"))
(package-refresh-contents)


(require 'cc-mode)
(setq-default c-basic-offset 4 c-default-style "linux")
(setq-default tab-width 4 indent-tabs-mode t)
(define-key c-mode-base-map (kbd "RET") 'newline-and-indent)

(add-to-list 'load-path "/home/mohit/Documents/scratch/autopair")
(require 'autopair)
(autopair-global-mode 1)
(setq autopair-autowrap t)

(add-to-list 'load-path "/home/mohit/Documents/scratch/ecb")
(require 'ecb)
(setq ecb-layout-name "left8")
(setq ecb-show-sources-in-directories-buffer 'always)
(setq ecb-compile-window-height 12)

;;; activate and deactivate ecb
(global-set-key (kbd "C-x C-;") 'ecb-activate)
(global-set-key (kbd "C-x C-'") 'ecb-deactivate)
;;; show/hide ecb window
(global-set-key (kbd "C-;") 'ecb-show-ecb-windows)
(global-set-key (kbd "C-'") 'ecb-hide-ecb-windows)
;;; quick navigation between ecb windows
(global-set-key (kbd "C-)") 'ecb-goto-window-edit1)
(global-set-key (kbd "C-!") 'ecb-goto-window-directories)
(global-set-key (kbd "C-@") 'ecb-goto-window-sources)
(global-set-key (kbd "C-#") 'ecb-goto-window-methods)
(global-set-key (kbd "C-$") 'ecb-goto-window-compilation)

;;; replacement for built-in ecb-deactive, ecb-hide-ecb-windows and
;;; ecb-show-ecb-windows functions
;;; since they hide/deactive ecb but not restore the old windows for me
(defun tmtxt/ecb-deactivate ()
  "deactive ecb and then split emacs into 2 windows that contain 2 most recent buffers"
  (interactive)
  (ecb-deactivate)
  (split-window-right)
  (switch-to-next-buffer)
  (other-window 1))
(defun tmtxt/ecb-hide-ecb-windows ()
  "hide ecb and then split emacs into 2 windows that contain 2 most recent buffers"
  (interactive)
  (ecb-hide-ecb-windows)
  (split-window-right)
  (switch-to-next-buffer)
  (other-window 1))
(defun tmtxt/ecb-show-ecb-windows ()
  "show ecb windows and then delete all other windows except the current one"
  (interactive)
  (ecb-show-ecb-windows)
  (delete-other-windows))

(global-set-key (kbd "C-x C-'") 'tmtxt/ecb-deactivate)
(global-set-key (kbd "C-;") 'tmtxt/ecb-show-ecb-windows)
(global-set-key (kbd "C-'") 'tmtxt/ecb-hide-ecb-windows)

(add-to-list 'load-path "~/.emacs.d/elpa/yasnippet-0.8.0/")
(require 'yasnippet)
(yas-global-mode 1)

(setq package-user-dir "~/.emacs.d/elpa/")
(package-initialize)

;;; (add-to-list 'load-path "~/.emacs.d/elpa/auto-complete-1.4/")
(require 'auto-complete-config)
(add-to-list 'ac-dictionary-directories "~/.emacs.d/ac-dict")
(ac-config-default)
;;; set the trigger key so that it can work together with yasnippet on tab key,
;;; if the word exists in yasnippet, pressing tab will cause yasnippet to
;;; activate, otherwise, auto-complete will
(ac-set-trigger-key "TAB")
(ac-set-trigger-key "<tab>")
(add-to-list 'load-path "~/.emacs.d/elpa/auto-complete-clang/")
(require 'auto-complete-clang)
(global-set-key (kbd "C-`") 'ac-complete-clang)
(需要“包”)
(添加到“文件包档案”列表中
“(“果酱”。”http://marmalade-repo.org/packages/"))
(包刷新内容)
(需要“抄送模式”)
(setq默认c-basic-offset 4 c-default-style“linux”)
(setq默认制表符宽度4缩进制表符模式t)
(定义键c-mode-base-map(kbd“RET”)“换行和缩进)
(添加到列表“加载路径”/home/mohit/Documents/scratch/autopair)
(需要“自动飞行”)
(自动飞行全球模式1)
(setq自动空气自动包裹t)
(添加到列表“加载路径”/home/mohit/Documents/scratch/ecb)
(欧洲央行)
(setq ecb布局名称“left8”)
(setq ecb在目录缓冲区“始终”中显示源)
(设置窗高12)
;;; 激活和停用ecb
(全局设置键(kbd“C-x C-;”)ecb激活)
(全局设置键(kbd“C-x C-”)ecb停用)
;;; 显示/隐藏ecb窗口
(全局设置键(kbd“C-;”)的ecb显示ecb窗口)
(全局设置键(kbd“C-”)“ecb隐藏ecb窗口)
;;; 在ecb窗口之间快速导航
(全局设置键(kbd“C-”)ecb-goto-window-edit1)
(全局设置键(kbd“C-!”)的ecb转到窗口目录)
(全局设置键(kbd“C-”)‘ecb转到窗口源)
(全局设置键(kbd“C-#”)的ecb转到窗口方法)
(全局设置键(kbd“C-$”)的ecb转到窗口编译)
;;; 替换内置ecb停用、ecb隐藏ecb窗口和
;;; ecb显示ecb窗口功能
;;; 因为他们隐藏/关闭了ecb,但没有为我恢复旧窗口
(解除tmtxt/ecb停用()
“停用ecb,然后将emacs拆分为包含2个最新缓冲区的2个窗口”
(互动)
(欧洲央行)
(右拆分窗口)
(切换到下一个缓冲区)
(其他窗口(1))
(取消tmtxt/ecb隐藏ecb窗口()
“隐藏ecb,然后将emacs拆分为包含2个最新缓冲区的2个窗口”
(互动)
(隐藏ecb窗口)
(右拆分窗口)
(切换到下一个缓冲区)
(其他窗口(1))
(定义tmtxt/ecb显示ecb窗口()
“显示ecb窗口,然后删除除当前窗口外的所有其他窗口”
(互动)
(欧洲央行展示欧洲央行窗口)
(删除其他窗口)
(全局设置键(kbd“C-x C-”)tmtxt/ecb停用)
(全局设置键(kbd“C-;”)的tmtxt/ecb显示ecb窗口)
(全局设置键(kbd“C-”)tmtxt/ecb隐藏ecb窗口)
(添加到列表“加载路径”~/.emacs.d/elpa/yasnippet-0.8.0/”)
(需要“yasnippet”)
(yas全球模式1)
(setq包用户目录“~/.emacs.d/elpa/”)
(包初始化)
;;; (添加到列表“加载路径”~/.emacs.d/elpa/auto-complete-1.4/”)
(需要“自动完成配置”)
(添加到列表“ac字典目录”~/.emacs.d/ac dict”)
(ac配置默认值)
;;; 设置触发键,使其可以与tab键上的yasnippet一起工作,
;;; 如果yasnippet中存在该单词,则按tab键将导致yasnippet
;;; 激活,否则将自动完成
(交流设置触发键“TAB”)
(ac设置触发键“”)
(添加到列表“加载路径”~/.emacs.d/elpa/auto complete clang/”)
(需要“自动完成叮当声”)
(全局设置键(kbd“C-”)“ac完整叮当声)

您已将
ac complete clang
绑定到
C-`
,而不是
C--
;如果您使用正确的绑定触发它,它应该可以工作

如中所述,您可能需要手动指向系统库中的
auto complete clang

  • clang找不到标准的inlcude文件

    这是因为clang的包含文件搜索路径不正确。以下是解决方案:

  • 查找您的g++的包含文件搜索路径:

    echo "" | g++ -v -x c++ -E -
    
    你会得到这样的结果:

    #include "..." search starts here:
    #include <...> search starts here:
     /usr/include/c++/4.6
     /usr/include/c++/4.6/x86_64-linux-gnu/.
     /usr/include/c++/4.6/backward
     /usr/lib/gcc/x86_64-linux-gnu/4.6.1/include
     /usr/local/include
     /usr/lib/gcc/x86_64-linux-gnu/4.6.1/include-fixed
     /usr/include/x86_64-linux-gnu
     /usr/include
    End of search list.
    
您可以将其放入.emacs文件中

那么代码完成就可以了


看起来您将
C-`
,而不是
C--
,绑定到了
ac complete clang
。那个组合键能正确触发完成吗?@Chris:是的,你说得对。。而且,这似乎是在为我的库完成代码,但是有没有一种方法可以完成标准C++库的代码完成(比如说字符串、IoString和第三方库(比如Boost))?
(setq ac-clang-flags
      (mapcar (lambda (item)(concat "-I" item))
              (split-string
               "
 /usr/include/c++/4.6
 /usr/include/c++/4.6/x86_64-linux-gnu/.
 /usr/include/c++/4.6/backward
 /usr/lib/gcc/x86_64-linux-gnu/4.6.1/include
 /usr/local/include
 /usr/lib/gcc/x86_64-linux-gnu/4.6.1/include-fixed
 /usr/include/x86_64-linux-gnu
 /usr/include
"
               )))