/******************************************************************************************************************************************/php
原創做品,轉載時請務必以超連接形式標明文章原始出處:http://blog.csdn.net/gqb_driver/article/details/29407717,做者:gqb6661、編譯安裝css
1. 準備工做html
(1)安裝 svn、ssh連接好後,在終端中輸入emacs就可以啓動emacs了。java
2、功能插件配置(代碼閱讀神器)linux
把emacs變成類似sourceinsight代碼瀏覽器c++
所需軟件:
cscope-15.5.tar.gz http://sourceforge.net/projects/cscope
ecb-2.32.tar.gz http://sourceforge.net/projects/ecb
但是對於通常安裝的GNU emacs來講還需要三個額外的包支持即eieio, semantic, speedbar
http://sourceforge.net/projects/cedet
將這三個包的下載並拷貝到/opt/emacs24/下
eieio-0.17.tar.gz
semantic-1.4.4.tar.gz
speedbar-0.14beta4.tar.gz
安裝ecb和三個支持包:
#cd /opt/emacs24/site-lisp
#tar zxfv ecb-2.32.tar.gz
#tar zxfv eieio-0.17.tar.gz
#tar zxfv semantic-1.4.4.tar.gz
#tar zxfv speedbar-0.14beta4.tar.gz
作四個鏈接
ln -s ecb-2.32 ecb
ln -s eieio-0.17 eieio
ln -s semantic-1.4.4 semantic
ln -s speedbar-0.14beta4 speedbar
而後改動
site-start.el文件(有些系統如ubuntu,site-start.el文件在/etc/emacs文件夾下)
加入下面五行
(setq load-path (append load-path '("/opt/emacs24/site-lisp/eieio")))
(setq load-path (append load-path '("/opt/emacs24/site-lisp/semantic")))
(setq load-path (append load-path '("/opt/emacs24/site-lisp/speedbar")))
(setq load-path (append load-path '("/opt/emacs24/site-lisp/ecb")))
(require 'ecb)
又一次啓動一下emacs
M-x ecb-activate
看看出現了什麼
cscope安裝更爲簡單
$tar zxfv cscope-15.5.tar.gz
$cd cscope-15.5
$./configure
$make
#make install
而後把contrib/xcscope/文件夾下的cscope-indexer拷貝到PATH文件夾比方/usr/local/bin
而後把xcscope.el拷貝到
/opt/emacs24/site-lisp
改動/opt/emacs24/site-lisp/site-start.el
加入
(require 'xcscope)
又一次啓動emacs 並且打開一個C文件看看有什麼變化?shell
上述的兩個軟件的使用說明看看他們自帶的文檔,很是清楚bootstrap
3、ECB操做鍵ubuntu
(Emacs_command_tables.pdf http://download.csdn.net/detail/gqb666/7534613)windows
下面是一些簡單的鍵綁定,不少其它信息可以在ecb-minor-mode文檔中查找(C-h a ecb-minor-mode )。
首先列出的是一些基本鍵映射前綴。即一些詳細的命令鍵是由此基礎上加入:
key | binding |
C-c | |
C-c . | |
C-c . f | |
C-c . g | 跳轉類( goto ) |
C-c . l | 佈局類( layout ) |
C-c . m | 窗體最大化類(maximize) |
(1) 跳轉類命令( goto, 前綴: C-c . g )
key |
跳轉位置 |
C-c . g 1 | 編輯區1 |
C-c . g 2 | 編輯區2 |
C-c . g a | analyse窗體 |
C-c . g b | speedbar窗體 |
C-c . g c | compilation窗體 |
C-c . g d | directories窗體 |
C-c . g h | history窗體 |
C-c . g l | 上次編輯 |
C-c . g m | methods窗體 |
C-c . g s | sources窗體 |
(2)佈局類( layout, 前綴 C-c . l )
key | 操做 |
C-c . l c | 更改佈局 |
C-c . l r | 又一次佈局 |
C-c . l t | 佈局鎖定開關 |
C-c . l w | 鎖定可見的ECB窗體 |
(3)窗體最大化類( maximize, 前綴C-c . m )
key | 操做窗體 |
C-c . m a | analyse窗體 |
C-c . m b | speedbar窗體 |
C-c . m d | directories窗體 |
C-c . m h | history窗體 |
C-c . m m | methods窗體 |
C-c . m s | sources窗體 |
4、.emacs配置文件
(config.emacs http://download.csdn.net/detail/gqb666/7534621)
附上.emacs配置文件放到用戶文件夾:cd ~,保存爲.emacs就能夠有多功能插件如顯示行號等。
;;查看根文件夾,按C-X C-F後按~,這時創建配置文件.emacs或_emacs.或者直接把此文件拷貝到根文件夾下 ;; 語言環境字符集設置 ;;這一部份主要用在linux 環境下,windows下沒什麼做用 ;;(set-language-environment 'Chinese-GB) ;;(set-keyboard-coding-system 'utf-8) ;;(set-clipboard-coding-system 'utf-8) ;;(set-terminal-coding-system 'utf-8) ;;(set-buffer-file-coding-system 'utf-8) ;;(set-default-coding-systems 'utf-8) ;;(set-selection-coding-system 'utf-8) ;;(modify-coding-system-alist 'process "*" 'utf-8) ;;(setq default-process-coding-system '(utf-8 . utf-8)) ;;(setq-default pathname-coding-system 'utf-8) ;;(set-file-name-coding-system 'utf-8) ;;(setq ansi-color-for-comint-mode t) ;;處理shell-mode亂碼,好像沒做用 ;; 設置窗體界面 ;;(set-foreground-color "grey") ;;(set-background-color "black") ;;(set-cursor-color "grey") ;;(set-mouse-color "gold1") ;; 顯示行列號 (setq column-number-mode t) (setq line-number-mode t) (global-linum-mode t) ;; 設置顯示格式 (setq display-line-number-format "%4d|") ;; 關閉啓動時的`開機畫面' (setq inhibit-startup-message t) ;; 關閉gnus啓動時的畫面 (setq gnus-inhibit-startup-message t) ;; 語法加亮 (global-font-lock-mode 't) ;; 語法高亮。除shell-mode和text-mode以外的模式中使用語法高亮 (setq font-lock-maximum-decoration t) (setq font-lock-global-modes '(not shell-mode text-mode)) (setq font-lock-verbose t) (setq font-lock-maximum-size '((t . 1048576) (vm-mode . 5250000))) ;; 把c語言風格設置爲k&r風格 (add-hook 'c-mode-hook '(lambda () (c-set-style "k&r"))) ;; 把c++語言風格設置爲stroustrup風格 (add-hook 'c++-mode-hook '(lambda() (c-set-style "stroustrup"))) ;; 括號匹配 ;; 括號匹配時顯示另外一端的括號,而不是跳過去 (show-paren-mode t) (setq show-paren-style 'parentheses) ;; 標題攔顯示buffer的名字 (setq frame-title-format "emacs@%b") ;; Shell 使用 ansi color (autoload 'ansi-color-for-comint-mode-on "ansi-color" nil t) (add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on) ;; 使用Win下的選擇習慣 ;; 用shift+方向鍵進行選擇 (pc-selection-mode) ;; 讓Emacs可以直接打開和顯示圖片。 (require 'thumbs) (auto-image-file-mode t) ;; 設置顯示時間 (display-time-mode 1);;啓用時間顯示設置。在minibuffer上面的那個槓上 (setq display-time-24hr-format t);;時間使用24小時制 (setq display-time-day-and-date t);;時間顯示包含日期和詳細時間 (setq display-time-use-mail-icon t);;時間欄旁邊啓用郵件設置 (setq display-time-interval 10);;時間的變化頻率 ;; 取消滾動條 ;;(set-scroll-bar-mode nil) ;; 取消工具欄 ;;(tool-bar-mode nil) ;; 設置打開文件的缺省路徑 (setq default-directory "F:/") ;; 改變Emacs執拗的要你回答 yes 的行爲。按 y 或空格鍵表示 yes,n 表示 no (fset 'yes-or-no-p 'y-or-n-p) ;; 不用TAB字符來indent, 這會引發很是多奇怪的錯誤。編輯Makefile的時候也不用操心,因爲 makefile-mode會把TAB鍵設置成真正的TAB字符,並且加亮顯示的 (setq-default indent-tabs-mode nil) (setq default-tab-width 8) (setq tab-stop-list ()) ;; 設置sentence-end可以識別中文標點。不用在 fill 時在句號後插入兩個空格 (setq sentence-end "\\([。。?]\\|……\\|[.?!][]\"')}]*\\($\\|[ \t]\\)\\)[ \t\n]*") (setq sentence-end-double-space nil) ;; 光標靠近鼠標指針時,讓鼠標指針本身主動讓開。別擋住視線 ;;(setq mouse-avoidance-mode 'animate) ;; 打開壓縮文件時本身主動解壓縮 (auto-compression-mode 1) ;; 在行首C-k時,同一時候刪除該行 (setq-default kill-whole-line t) ;; 設定不產生備份文件 (setq make-backup-files nil) ;; 本身主動保存模式 (setq auto-save-mode nil) ;; 不生成暫時文件 (setq-default make-backup-files nil) ;; 贊成emacs和外部其它程序的粘貼 (setq x-select-enable-clipboard t) ;; 使用鼠標中鍵可以粘貼 ;;(setq mouse-yank-at-point t) ;; 設置實用的我的信息,這在很是多地方實用 (setq user-full-name "XXXXXX") (setq user-mail-address "XXXXXX@163.com") ;; 本身主動的在文件末添加一新行 ;;(setq require-final-newline t) ;; 設置home鍵指向buffer開頭。end鍵指向buffer結尾 (global-set-key [home] 'beginning-of-buffer) (global-set-key [end] 'end-of-buffer) ;; 調用Lisp擴展包 ;; 載入ido.el (require 'ido) (ido-mode t) ;; 所見即所得作表格 (autoload 'table-insert "table" "WYGIWYS table editor") ;; C-F5, 設置編譯命令; F5, 保存所有文件而後編譯當前窗體文件 ;; M-x gdb啓動gdb, C-c C-n是Next line,C-c C-s是step in (defun du-onekey-compile () "Save buffers and start compile" (interactive) (save-some-buffers t) (switch-to-buffer-other-window "*compilation*") (compile compile-command)) (global-set-key [C-f5] 'compile) (global-set-key [f5] 'du-onekey-compile) ;; F6設置爲在Emacs中調用gdb (global-set-key [f6] 'gdb) ;; C-F4, 設置跳到上一個錯誤,F4跳到下一個錯誤 (global-set-key [C-f4] 'previous-error) (global-set-key [f4] 'next-error) ;; 目的是開一個shell的小buffer,用於更方便地測試程序(也就是執行程序了),我經常會用到。 ;; F8就是另開一個buffer而後打開shell,C-f8則是在當前的buffer打開shell (defun open-eshell-other-buffer () "Open eshell in other buffer" (interactive) (split-window-vertically) (eshell)) (global-set-key [(f8)] 'open-eshell-other-buffer) (global-set-key [C-f8] 'eshell) ;; 設置F9調用speedbar命令 ;; 使用 n 和 p 可以上下移動, ;; + 展開文件夾或文件進行瀏覽,- 收縮,RET 訪問文件夾或文件。g 更新 speedbar (setq speedbar-show-unknown-files t);;可以顯示所有文件夾以及文件 (setq dframe-update-speed nil);;不本身主動刷新。手動 g 刷新 (setq speedbar-update-flag nil) ;;(setq speedbar-use-images nil);;不使用 image 的方式 (setq speedbar-verbosity-level 0) (global-set-key [f9] 'speedbar) ;; 設置[C-f9]爲調用dired命令 (global-set-key [C-f9] 'dired) ;; 讓dired 可以遞歸的拷貝和刪除文件夾 (setq dired-recursive-copies 'top) (setq dired-recursive-deletes 'top) ;; 設置F10爲撤銷 ;;(global-set-key [f10] 'undo) ;; 設置F11快捷鍵指定Emacs 的日曆系統 ;;(global-set-key [f11] 'calendar) ;; 設置F12 高速察看日程安排 ;;(global-set-key [f12] 'list-bookmarks) ;; 設置時間戳,標識出最後一次保存文件的時間 (setq time-stamp-active t) (setq time-stamp-warn-inactive t) (setq time-stamp-format "%:y-%02m-%02d %3a %02H:%02M:%02S chunyu") ;; 設置C-g爲goto-line (global-set-key (kbd "C-g") 'goto-line) ;; 設置M-空格 來setmark了,這樣我就不用按 C-@ 來 setmark 了, C-@ 很是很差按 (global-set-key (kbd "M-<SPC>") 'set-mark-command) ;; 設置陰曆顯示。在 calendar 上用 pC 顯示陰曆 (setq calendar-remove-frame-by-deleting t) (setq calendar-week-start-day 1) ; 設置星期一爲每週的第一天 (setq mark-diary-entries-in-calendar t) ; 標記calendar上有diary的日期 (setq mark-holidays-in-calendar nil) ; 爲了突出有diary的日期,calendar上不標記節日 (setq view-calendar-holidays-initially nil) ; 打開calendar的時候不顯示一堆節日 ;; 去掉不關心的節日,設定本身在乎的節日,在 calendar 上用 h 顯示節日 (setq christian-holidays nil) (setq hebrew-holidays nil) (setq islamic-holidays nil) (setq solar-holidays nil) (setq general-holidays '((holiday-fixed 1 1 "元旦") (holiday-fixed 2 14 "情人節") (holiday-fixed 3 14 "白色情人節") (holiday-fixed 4 1 "愚人節") (holiday-fixed 5 1 "勞動節") (holiday-float 5 0 2 "母親節") (holiday-fixed 6 1 "兒童節") (holiday-float 6 0 3 "父親節") (holiday-fixed 7 1 "建黨節") (holiday-fixed 8 1 "建軍節") (holiday-fixed 9 10 "教師節") (holiday-fixed 10 1 "國慶節") (holiday-fixed 12 25 "聖誕節"))) ;; Calendar模式支持各類方式來更改當前日期 ;; (這裏的「前」是指尚未到來的那一天,「後」是指已通過去的日子) ;; q 退出calendar模式 ;; C-f 讓當前日期向前一天 ;; C-b 讓當前日期向後一天 ;; C-n 讓當前日期向前一週 ;; C-p 讓當前日期向後一週 ;; M-} 讓當前日期向前一個月 ;; M-{ 讓當前日期向後一個月 ;; C-x ] 讓當前日期向前一年 ;; C-x [ 讓當前日期向後一年 ;; C-a 移動到當前周的第一天 ;; C-e 移動到當前周的最後一天 ;; M-a 移動到當前月的第一天 ;; M-e 多動到當前月的最後一天 ;; M-< 移動到當前年的第一天 ;; M-> 移動到當前年的最後一天 ;; Calendar模式支持移動多種移動到特珠日期的方式 ;; g d 移動到一個特別的日期 ;; o 使某個特殊的月分做爲中間的月分 ;; . 移動到當天的日期 ;; p d 顯示某一天在一年中的位置,也顯示本年度還有多少天。;; C-c C-l 刷新Calendar窗體 ;; Calendar支持生成LATEX代碼。 ;; t m 按月生成日曆 ;; t M 按月生成一個美化的日曆 ;; t d 按當天日期生成一個當天日曆 ;; t w 1 在一頁上生成這個周的日曆 ;; t w 2 在兩頁上生成這個周的日曆 ;; t w 3 生成一個ISO-SYTLE風格的當前週日歷 ;; t w 4 生成一個從週一開始的當前週日歷 ;; t y 生成當前年的日曆 ;; EMACS Calendar支持配置節日: ;; h 顯示當前的節日 ;; x 定義當天爲某個節日 ;; u 取消當天已被定義的節日 ;; e 顯示所有這先後共三個月的節日。 ;; M-x holiday 在另外的窗體的顯示這先後三個月的節日。
;; 另外,另外一些特殊的。有意思的命令: ;; S 顯示當天的日出日落時間(是大寫的S) ;; p C 顯示農曆可以使用 ;; g C 使用農曆移動日期可以使用 ;;========== CC-Mode配置 begin ========== ;; CC-mode配置 http://cc-mode.sourceforge.net/ ;;(add-to-list 'load-path "~/lisp/cc-mode") ;;(require 'cc-mode) (c-set-offset 'inline-open 0) (c-set-offset 'friend '-) (c-set-offset 'substatement-open 0) ;; 個人C/C++語言編輯策略 (defun my-c-mode-common-hook() (setq tab-width 4 indent-tabs-mode nil) (c-toggle-auto-hungry-state 1) ;;按鍵定義 (define-key c-mode-base-map [(control \`)] 'hs-toggle-hiding) (define-key c-mode-base-map [(return)] 'newline-and-indent) ;;(define-key c-mode-base-map [(f5)] 'compile) (define-key c-mode-base-map [(meta \`)] 'c-indent-command) (define-key c-mode-base-map [(tab)] 'my-indent-or-complete) (define-key c-mode-base-map [(meta ?
/)] 'semantic-ia-complete-symbol-menu) ;;預處理設置 (setq c-macro-shrink-window-flag t) (setq c-macro-preprocessor "cpp") (setq c-macro-cppflags " ") (setq c-macro-prompt-flag t) (setq hs-minor-mode t) (setq abbrev-mode t) ) (add-hook 'c-mode-common-hook 'my-c-mode-common-hook) ;; 個人C++語言編輯策略 (defun my-c++-mode-hook() (setq tab-width 4 indent-tabs-mode nil) (c-set-style "stroustrup") ) ;; 導入cedet ;;(load-file "~/lisp/cedet/common/cedet.el") ;; 配置Semantic的檢索範圍 (setq semanticdb-project-roots (list (expand-file-name "/"))) ;;本身定義本身主動補齊命令,假設在單詞中間就補齊,不然就是tab (defun my-indent-or-complete () (interactive) (if (looking-at "\\>") (hippie-expand nil) (indent-for-tab-command)) ) (global-set-key [(control tab)] 'my-indent-or-complete) ;; hippie的本身主動補齊策略。優先調用了senator的分析結果 (autoload 'senator-try-expand-semantic "senator") (setq hippie-expand-try-functions-list '( senator-try-expand-semantic try-expand-dabbrev try-expand-dabbrev-visible try-expand-dabbrev-all-buffers try-expand-dabbrev-from-kill try-expand-list try-expand-list-all-buffers try-expand-line try-expand-line-all-buffers try-complete-file-name-partially try-complete-file-name try-expand-all-abbrevs try-complete-lisp-symbol-partially try-complete-lisp-symbol try-expand-whole-kill ) ) ;; ========== CC-Mode配置 end ========== ;; 五筆輸入法設置,用快捷鍵C-\ (同一時候按住 Ctrl和反斜線鍵)喚出五筆字型輸入法了 ;;(add-to-list 'load-path "~/lisp/wubi") ;;(require 'wubi) ;;(register-input-method "chinese-wubi" "Chinese-GB" 'quail-use-package "wubi" "wubi") ;;(wubi-load-local-phrases) ;;(setq default-input-method "chinese-wubi") ;; 設置快捷鍵,Ctrl-+來喚出add-wubi添加詞組、Ctrl--來喚出del-wubi刪除一個詞組 ;;(global-set-key [?\C-+] 'add-wubi) ;;(global-set-key [?\C--] 'del-wubi) ;; cscope設置,使用cscope瀏覽源代碼 ;;(add-to-list 'load-path "~/lisp/cscope") ;; 將軟件包所在的路徑加到 EMACS的load-path ;;(require 'xcscope) ;; 載入對應的軟件 ;;C-c s a 設定初始化的文件夾。一般是你代碼的根文件夾 ;;C-s s I 對文件夾中的相關文件創建列表並進行索引 ;;C-c s s 序找符號 ;;C-c s g 尋找全局的定義 ;;C-c s c 看看指定函數被哪些函數所調用 ;;C-c s C 看看指定函數調用了哪些函數 ;;C-c s e 尋找正則表達式 ;;C-c s f 尋找文件 ;;C-c s i 看看指定的文件被哪些文件include ;; tabbar設置 ;;(add-to-list 'load-path "~/lisp/tabbar") ;;(require 'tabbar) ;;(tabbar-mode) ;; ========== cedet設置 ========== ;;(add-to-list 'load-path "~/lisp/cedet/speedbar") ;;(add-to-list 'load-path "~/lisp/cedet/eieio") ;;(add-to-list 'load-path "~/lisp/cedet/semantic") ;;(add-to-list 'load-path "~/lisp/cedet/common") ;;(require 'cedet) ;;(add-to-list 'load-path "~/lisp/ecb") ;;(require 'ecb) ;; Ecb的操做: ;; C-c . g d 文件夾列表窗體 ;; C-c . g s 源代碼窗體 ;; C-c . g m 方法和變量窗體 ;; C-c . g h 歷史窗體 ;; C-c . g l 最後選擇過的編輯窗體 ;; C-c . g 1 編輯窗體1 ;; C-c . g n 編輯窗體n ;; C-c . l c 選擇版面 ;; C-c . l r 重畫版面 ;; C-c . l t 拴牢版面(鎖定版面) ;; C-c . l w 拴牢可見的ecb窗體 ;; C-c . \ 拴牢編繹窗體 ;; 當中l爲小寫字母(L),你們別看錯!! ;; ========== cedet設置結束 ========== ;; emacs的默認compile命令是調用make -k。我把它改爲了mingw32-make -f MakeFile。
你也可以把它改爲其它的,比方gcc之類的 (setq compile-command "mingw32-make -f MakeFile") ;; 把一個代碼塊縮起來,需要的時候再展開 (load-library "hideshow") (add-hook 'c-mode-hook 'hs-minor-mode) (add-hook 'c++-mode-hook 'hs-minor-mode) (add-hook 'java-mode-hook 'hs-minor-mode) (add-hook 'perl-mode-hook 'hs-minor-mode) (add-hook 'php-mode-hook 'hs-minor-mode) (add-hook 'emacs-lisp-mode-hook 'hs-minor-mode) ;; M-x hs-minor-mode ;; C-c @ ESC C-s show all ;; C-c @ ESC C-h hide all ;; C-c @ C-s show block ;; C-c @ C-h hide block ;; C-c @ C-c toggle hide/show ;;輸入左邊的括號,就會本身主動補全右邊的部分.包含(), "", [] , {} , 等等 (defun my-c-mode-auto-pair () (interactive) (make-local-variable 'skeleton-pair-alist) (setq skeleton-pair-alist '( (?` ?` _ "''") (?\( ?
_ " )") (?\[ ? _ " ]") (?{ \n > _ \n ?} >))) (setq skeleton-pair t) (local-set-key (kbd "(") 'skeleton-pair-insert-maybe) (local-set-key (kbd "{") 'skeleton-pair-insert-maybe) (local-set-key (kbd "`") 'skeleton-pair-insert-maybe) (local-set-key (kbd "[") 'skeleton-pair-insert-maybe)) (add-hook 'c-mode-hook 'my-c-mode-auto-pair) (add-hook 'c++-mode-hook 'my-c-mode-auto-pair) (custom-set-variables ;; custom-set-variables was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. '(ecb-options-version "2.32")) (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. ) ;;AUCTEX 2012-06-11 (load "auctex.el" nil t t) (load "preview-latex.el" nil t t) (setq TeX-auto-save t) (setq TeX-parse-self t) (setq-default TeX-master nil)