2014-11-15 2 views
0

Я пытаюсь установить emacs для программирования на C++. В основном следовали инструкциям здесь .. http://truongtx.me/2013/03/10/emacs-setting-up-perfect-environment-for-cc-programming/ Все прекрасно работает, кроме автозаполнения, для которой я следовал инструкциям здесь http://truongtx.me/2013/03/06/emacs-ccpp-autocomplete-with-clang/emacs autocomplete для C++

согласно инструкции, [C-] должно быть, но когда связанного приложения I нажмите [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 "[email protected]") '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) 
+0

Похоже, вы связали 'C- \' ', а не' C - ', с' ac-complete-clang'. Правильно ли эта комбинация запускает завершение? – Chris

+0

@ Крис: Да, вы правы. Кроме того, это, похоже, делает завершение кода для моих библиотек, но есть ли способ сделать завершение кода для стандартных библиотек C++ (скажем, string, iostream и для сторонних библиотек (скажем, boost)) ?? – Fraz

ответ

2

Вы получили ac-complete-clang обязаны C-`, не C--; он должен работать, если вы активируете его с правильной привязкой.

Как объяснено в the troubleshooting section of auto-complete-clang's README, возможно, придется вручную указать auto-complete-clang в библиотеках системы:

  • лязг не удается найти стандартный inlcude файлы?

    Это потому, что неверный путь поиска файла clang. Вот решение:

  • узнать инклюдник поиск трактов вашего г ++:

    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. 
    
  • установки AC-Clang-флагов для включения этих дефолтных включений. например,

    (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 
    " 
           ))) 
    

Вы можете поместить его в файл .emacs.

Тогда код завершения работ просто отлично!

Смежные вопросы