2016-08-14 3 views
1

Я нашел this thread, но принятое решение не работает для меня. Мне все равно нужно вручную загружать C++ - режим для отступов (!) (Но не подсветка синтаксиса, но это все равно работало), чтобы быть установленным в режиме C++. В моей инициализации у меня есть этот код:Автоматически загружать режим C++ для файлов HPP и CPP

(setq 
c-default-style "stroustrup" 
) 

(add-to-list 'auto-mode-alist '("\\.cpp\\'" . c++-mode)) 
(add-to-list 'auto-mode-alist '("\\.hpp\\'" . c++-mode)) 

(defun my-c++-mode-hook() 
    (setq c-basic-offset 4) 
    (c-set-offset 'substatement-open 0)) 
(add-hook 'c++-mode-hook 'my-c++-mode-hook) 

и весь мой инициализации выглядит следующим образом:

(require 'package) 
(add-to-list 'package-archives 
     '("melpa" . "http://melpa.milkbox.net/packages/") t) 
(package-initialize) 

(setq gc-cons-threshold 100000000) 
(setq inhibit-startup-message t) 

(defalias 'yes-or-no-p 'y-or-n-p) 

(defconst demo-packages 
    '(anzu 
    company 
    duplicate-thing 
    ;; ggtags 
    ;; helm 
    ;; helm-gtags 
    ;; helm-projectile 
    ;; helm-swoop 
    ;; function-args 
    clean-aindent-mode 
    comment-dwim-2 
    ;; dtrt-indent 
    ws-butler 
    ;; iedit 
    yasnippet 
    smartparens 
    ;; projectile 
    ;; volatile-highlights 
    ;; undo-tree 
    zygospore)) 

(defun install-packages() 
    "Install all required packages." 
    (interactive) 
    (unless package-archive-contents 
    (package-refresh-contents)) 
    (dolist (package demo-packages) 
    (unless (package-installed-p package) 
     (package-install package)))) 

(install-packages) 

;; this variables must be set before load helm-gtags 
;; you can change to any prefix key of your choice 
;; (setq helm-gtags-prefix-key "\C-cg") 

(add-to-list 'load-path "~/.emacs.d/custom") 

;; (require 'setup-helm) 
;; (require 'setup-helm-gtags) 
;; (require 'setup-ggtags) 
(require 'setup-cedet) 
(require 'setup-editing) 

(windmove-default-keybindings) 

;; function-args 
;; (require 'function-args) 
;; (fa-config-default) 
;; (define-key c-mode-map [(tab)] 'company-complete) 
;; (define-key c++-mode-map [(tab)] 'company-complete) 

;; company 
(require 'company) 
(add-hook 'after-init-hook 'global-company-mode) 
(delete 'company-semantic company-backends) 
;; (define-key c-mode-map [(tab)] 'company-complete) 
;; (define-key c++-mode-map [(tab)] 'company-complete) 
;; (define-key c-mode-map [(control tab)] 'company-complete) 
(define-key c++-mode-map [(control tab)] 'company-complete) 

;; company-c-headers 
(add-to-list 'company-backends 'company-c-headers) 

;; hs-minor-mode for folding source code 
(add-hook 'c-mode-common-hook 'hs-minor-mode) 

;; Available C style: 
;; “gnu”: The default style for GNU projects 
;; “k&r”: What Kernighan and Ritchie, the authors of C used in their book 
;; “bsd”: What BSD developers use, aka “Allman style” after Eric Allman. 
;; “whitesmith”: Popularized by the examples that came with Whitesmiths C, an early commercial C compiler. 
;; “stroustrup”: What Stroustrup, the author of C++ used in his book 
;; “ellemtel”: Popular C++ coding standards as defined by “Programming in C++, Rules and Recommendations,” Erik Nyquist and Mats Henricson, Ellemtel 
;; “linux”: What the Linux developers use for kernel development 
;; “python”: What Python developers use for extension modules 
;; “java”: The default style for java-mode (see below) 
;; “user”: When you want to define your own style 
(setq 
c-default-style "stroustrup" 
) 

(add-to-list 'auto-mode-alist '("\\.cpp\\'" . c++-mode)) 
(add-to-list 'auto-mode-alist '("\\.hpp\\'" . c++-mode)) 

(defun my-c++-mode-hook() 
    (setq c-basic-offset 4) 
    (c-set-offset 'substatement-open 0)) 
(add-hook 'c++-mode-hook 'my-c++-mode-hook) 



(global-set-key (kbd "RET") 'newline-and-indent) ; automatically indent when press RET 

;; activate whitespace-mode to view all whitespace characters 
(global-set-key (kbd "C-c w") 'whitespace-mode) 

;; show unncessary whitespace that can mess up your diff 
(add-hook 'prog-mode-hook (lambda() (interactive) (setq show-trailing-whitespace 1))) 

;; use space to indent by default 
(setq-default indent-tabs-mode nil) 

;; set appearance of a tab that is represented by 4 spaces 
(setq-default tab-width 4) 

;; Compilation 
(global-set-key (kbd "<f5>") (lambda() 
           (interactive) 
           (setq-local compilation-read-command nil) 
           (call-interactively 'compile))) 

;; setup GDB 
(setq 
;; use gdb-many-windows by default 
gdb-many-windows t 

;; Non-nil means display source file containing the main routine at startup 
gdb-show-main t 
) 

;; Package: clean-aindent-mode 
(require 'clean-aindent-mode) 
(add-hook 'prog-mode-hook 'clean-aindent-mode) 

;; Package: dtrt-indent 
(require 'dtrt-indent) 
(dtrt-indent-mode 1) 

;; Package: ws-butler 
(require 'ws-butler) 
(add-hook 'prog-mode-hook 'ws-butler-mode) 

;; Package: yasnippet 
(require 'yasnippet) 
(yas-global-mode 1) 

;; Package: smartparens 
(require 'smartparens-config) 
(setq sp-base-key-bindings 'paredit) 
(setq sp-autoskip-closing-pair 'always) 
(setq sp-hybrid-kill-entire-symbol nil) 
(sp-use-paredit-bindings) 

(show-smartparens-global-mode +1) 
(smartparens-global-mode 1) 

;; Package: projejctile 
(require 'projectile) 
(projectile-global-mode) 
(setq projectile-enable-caching t) 

;; (require 'helm-projectile) 
;; (helm-projectile-on) 
;; (setq projectile-completion-system 'helm) 
;; (setq projectile-indexing-method 'alien) 

;; Package zygospore 
(global-set-key (kbd "C-x 1") 'zygospore-toggle-delete-other-windows) 

(require 'ggtags) 
(add-hook 'c-mode-common-hook 
      (lambda() 
      (when (derived-mode-p 'c-mode 'c++-mode 'java-mode 'asm-mode) 
       (ggtags-mode 1)))) 

(define-key ggtags-mode-map (kbd "C-c g s") 'ggtags-find-other-symbol) 
(define-key ggtags-mode-map (kbd "C-c g h") 'ggtags-view-tag-history) 
(define-key ggtags-mode-map (kbd "C-c g r") 'ggtags-find-reference) 
(define-key ggtags-mode-map (kbd "C-c g f") 'ggtags-find-file) 
(define-key ggtags-mode-map (kbd "C-c g c") 'ggtags-create-tags) 
(define-key ggtags-mode-map (kbd "C-c g u") 'ggtags-update-tags) 

(define-key ggtags-mode-map (kbd "M-,") 'pop-tag-mark) 

Я получил его отсюда: http://tuhdo.github.io/c-ide.html

И в настоящее время я изменяя его, чтобы соответствовать моим лучше.

Любая идея, что может конфликтовать здесь, вызывая

(add-to-list 'auto-mode-alist '("\\.cpp\\'" . c++-mode)) 
(add-to-list 'auto-mode-alist '("\\.hpp\\'" . c++-mode)) 

не работать?

+0

Как пробовать с ** Emacs -Q ** и только ваши настройки 'auto-mode-alist', а затем, если это работает, рекурсивно делите пополам ваши пользовательские настройки, комментируя материал и перезагружая Emacs, пока не найдете преступник? – lawlist

+0

да только в основном это и нашел две причины. Что делает -Q? Справка говорит «быстро». Что это должно значить? –

ответ

0

Не знаю почему, но комментирование

(require 'dtrt-indent) 
(dtrt-indent-mode 1) 

и

(require 'setup-editing) 

не зафиксировал его.

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