青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

HyJune的專欄

Linux From Scratch

  C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
  10 隨筆 :: 11 文章 :: 6 評(píng)論 :: 0 Trackbacks
本節(jié)主要參考:
    曹樂(lè)的《在Emacs下用C/C++編程》
    王純業(yè)的《Emacs 一個(gè)強(qiáng)大的平臺(tái)》
    emacswiki.org

emcas難學(xué)易用,可擴(kuò)展性強(qiáng)。有人把她當(dāng)作信仰,有人認(rèn)為他是魔鬼!學(xué)習(xí)首先記住基本的鍵盤快捷鍵,學(xué)會(huì)常用插件,深入學(xué)習(xí)還需學(xué)習(xí)lisp語(yǔ)言。本節(jié)緊對(duì)emacs作為開(kāi)發(fā)環(huán)境做一個(gè)基本的介紹。

基本安裝設(shè)置請(qǐng)參考:Ubuntu Ubuntu 8.04 LTS 配置筆記
emacs的基本安裝設(shè)置完成后,使emacs成為C開(kāi)發(fā)環(huán)境還需做如下設(shè)置,新建$HOME/.emacs文件
vim $HOME/.emacs
本文把emacs插件放在 $HOME/.emacs.d/site-lisp/ 目錄下,如果在$HOME下沒(méi)有找到.emacs.d目錄,請(qǐng)手動(dòng)建立
在.emacs文件添加
;;LOAD_PATH
(add
-to-list 'load-path' "~/.emacs.d/site-lisp")

Color theme
在.emacs文件添加
下載Color theme解壓后放到$HOME/.emacs.d/site-lisp/ 目錄下
;;COLOR_THEME
(require 'color
-theme)
(color
-theme-classic)
顯示行號(hào)
http://ann77.stu.cdut.edu.cn/EmacsDisplayLineNumber.html下載,把里面的 display-line-number.el放到加載路徑~/.emacs.d/site-lisp/目錄下。
在.emacs文件添加
(require 'display-line-number)
(setq display
-line-number-format "%3d ")
(add
-hook 'c-mode-hook 'display-line-number-mode)
(add
-hook 'c++-mode-hook 'display-line-number-mode)
參考:http://ann77.stu.cdut.edu.cn/EmacsDisplayLineNumber.html
感覺(jué)ann77的這個(gè)的確比setnu.el好用
session
http://emacs-session.sourceforge.net/ 下載,把里面的 session.el 解壓出來(lái)放到加載路徑~/.emacs.d/site-lisp/目錄下。
在.emacs文件添加
(require 'session)
(add
-hook 'after-init-hook 'session-initialize)
(load 
"desktop")
(desktop
-save-mode)

閱讀代碼

在emacs下讀代碼通常有一下幾種工具,etags,ECB(emacs code browser),cscope,Xref。這幾種工具也可以相互配合使用。其中:etags是emcas自帶的標(biāo)準(zhǔn)插件,注意不是ctags。Xref是的Xrefactory的免費(fèi)版本,非GNU,支持C和java的跳轉(zhuǎn),自動(dòng)補(bǔ)全插等功能,比cedet+ECB組合速度要快,用起來(lái)也很簡(jiǎn)單,回答幾個(gè)問(wèn)題新建一個(gè)project,然后幾個(gè)快捷鍵就可以滿足需要了,美中不足的是對(duì)C++支持是收費(fèi),且狂貴,這個(gè)小東西要400刀,也沒(méi)找到破解的版本,寫C++代碼的時(shí)候還得用CEDET+ECB。

安裝 cscope
sudo apt-get install cscope
找到xcscope.el文件 cp到 ~/.emacs.d/site-lisp/
在.emacs文件添加
(require 'xcscope)
cscope的主要功能和對(duì)應(yīng)的快捷鍵:
;; C-c s a             設(shè)定初始化的目錄,一般是你代碼的根目錄
;; C-s s I             對(duì)目錄中的相關(guān)文件建立列表并進(jìn)行索引
;; C-c s s             序找符號(hào)
;; C-c s g             尋找全局的定義
;; C-c s c             看看指定函數(shù)被哪些函數(shù)所調(diào)用
;; C-c s C             看看指定函數(shù)調(diào)用了哪些函數(shù)
;; C-c s e             尋找正則表達(dá)式
;; C-c s f             尋找文件
;; C-c s i             看看指定的文件被哪些文件include)

安裝CEDET
http://cedet.sourceforge.net/下載cedet,解壓到~/.emacs.d/site-lisp/在cedet目錄下運(yùn)行make。以下載到的cedet-1.0pre4.tar.gz為例
cp cedet-1.0pre4.tar.gz ~/.emacs.d/site-lisp/
cd 
~/.emacs.d/site-lisp/
tar xvzf cedet
-1.0pre4.tar.gz
cd cedet
-1.0pre4
make
詳情請(qǐng)參考INSTALL文檔
在.emacs文件添加
(add-hook 'texinfo-mode-hook (lambda () (require 'sb-texinfo)))
     (load
-file "~/.emacs.d/site-lisp/cedet-1.0pre4/common/cedet.el")
     (semantic
-load-enable-code-helpers)
     (autoload 'speedbar
-frame-mode "speedbar" "Popup a speedbar frame" t)
     (autoload 'speedbar
-get-focus "speedbar" "Jump to speedbar frame" t)
     (define
-key-after (lookup-key global-map [menu-bar tools])
                [speedbar]
                '(
"Speedbar" .
                speedbar
-frame-mode)
                [calendar])
安裝ECB
http://ecb.sourceforge.net/ 下載ECB,解壓到~/.emacs.d/site-lisp/ 即可
在.emacs文件添加
(add-to-list 'load-path "~/.emacs.d/site-lisp/ecb-2.32")
(load
-file "~/.emacs.d/site-lisp/ecb-2.32/ecb.el")
(require 'ecb)
(setq ecb
-auto-activate t
          ecb
-tip-of-the-day nil
          ecb
-tree-indent 4
          ecb
-windows-height 0.5
          ecb
-windows-width 0.20)
          ecb
-auto-compatibility-check nil
          ecb
-version-check nil
          inhibit
-startup-message t
重啟Emacs
在emacs執(zhí)行M-x ecb-byte-complie編譯,可以加快ECB運(yùn)行速度
M-x ecb-show-help看在線幫助
M-x customize-option RET ecb-source-path RET設(shè)置源碼目錄

ECB默認(rèn)是不支持鼠標(biāo)響應(yīng)的,需作如下設(shè)置:
打開(kāi)emacs中的菜單 ECB->Preferences->Most important...,
找到Ecb Primary Secondary Mouse Buttons:并點(diǎn)擊Show Value,
選擇第三個(gè)選項(xiàng):Primary:mouse-1,secondary:mouse-2
保存選項(xiàng)為以后所用

設(shè)置自動(dòng)補(bǔ)全
在.emacs文件添加
;;;;C/C++語(yǔ)言啟動(dòng)時(shí)自動(dòng)加載semantic對(duì)/usr/include的索引數(shù)據(jù)庫(kù)
(setq semanticdb
-search-system-databases t)
  (add
-hook 'c-mode-common-hook
          (lambda ()
            (setq semanticdb
-project-system-databases
                  (list (semanticdb
-create-database
                           semanticdb
-new-database-class
                           
"/usr/include")))))

;; project root path
(setq semanticdb
-project-roots
          (list
        (expand
-file-name "/")))
;; 避免semantic占用CPU過(guò)多
(setq
-default semantic-idle-scheduler-idle-time 432000)

(defun my
-indent-or-complete ()
   (interactive)
   (
if (looking-at "\\>")
          (hippie
-expand nil)
          (indent
-for-tab-command)))
(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-whole-kill
        )
)
;;快捷鍵
在.emacs文件添加
(global-set-key [M-/] 'hippie-expand)
;;右Ctrl
+\ 自動(dòng)補(bǔ)全menu
(global
-set-key "\C-\\" 'semantic-ia-complete-symbol-menu)
;; 跳轉(zhuǎn)到全局定義
(global
-set-key "\C-xg" 'cscope-find-global-definition-no-prompting)
安裝Xref
http://xref-tech.com/xrefactory/downloads/下載1.X.X linux版本(1.X.X為免費(fèi)版,2.X.X為收費(fèi)版)。解壓后放到~/.emacs.d/site-lisp/目錄下。以下載的xref-1.6.10-i86pcLinux.tar.gz為例
cp xref-1.6.10-i86pcLinux.tar.gz ~/.emacs.d/site-lisp/
cd 
~/.emacs.d/site-lisp/xref
sh .
/xrefsetup
.........
請(qǐng)參考INSTALL文檔
安裝程序在.emacs文件上追加了
;; Xrefactory configuration part ;;
;; some Xrefactory defaults can be set here
(defvar xref
-current-project nil) ;; can be also "my_project_name"
(defvar xref
-key-binding 'global) ;; can be also 'local or 'none
(setq load
-path (cons "/home/uiu/.emacs.d/site-lisp/xref/emacs" load-path))
(setq exec
-path (cons "/home/uiu/.emacs.d/site-lisp/xref" exec-path))
(load 
"xrefactory")
;; end of Xrefactory configuration part ;;
(message 
"xrefactory loaded")
為使上次建立的project仍有效,需將
(defvar xref-current-project nil) ;; can be also "my_project_name"
改為
(defvar xref-current-project t) ;; can be also "my_project_name"
;; c-mode設(shè)置
在.emacs文件添加
;; c-mode公共設(shè)置
(defun my
-c-mode-common-hook ()
  (setq 
default-tab-width 4)
  (setq tab
-width 4)
  (setq c
-basic-offset 4)
  (hs
-minor-mode t))
(add
-hook 'c-mode-common-hook 'my-c-mode-common-hook)

;; C語(yǔ)言設(shè)置
(defun my
-c-mode-hook ()
  (c
-set-style "cc-mode"))
(add
-hook 'c-mode-hook 'my-c-mode-hook)

;; C
++設(shè)置
(defun my
-c++-mode-hook ()
  (c
-set-style "stroustrup"))
(add
-hook 'c++-mode-hook 'my-c++-mode-hook)
輸入左邊的括號(hào),就會(huì)自動(dòng)補(bǔ)全右邊的部分.包括(), "", [] , {} , 等
在.emacs文件添加
(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)

我的.emacs相關(guān)的配置,僅供參考
;;LOAD_PATH
(add
-to-list 'load-path' "~/.emacs.d/site-lisp")
;
=========================================END==============================================;


;;COLOR_THEME
(require 'color
-theme)
(color
-theme-classic) 
;
=========================================END==============================================;


;;LANG
(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亂碼,好像沒(méi)作用
;
=========================================END==============================================;

;;MY CUSTOMIZE
(auto
-image-file-mode t);打開(kāi)圖片顯示功能
(display
-time-mode 1);顯示時(shí)間,格式如下
(setq display
-time-24hr-format t)
(setq display
-time-day-and-date t)
(transient
-mark-mode t);允許臨時(shí)設(shè)置標(biāo)記
(setq frame
-title-format '("" buffer-file-name "@emacs" ));在標(biāo)題欄顯示buffer名稱
(setq 
default-fill-column 80);默認(rèn)顯示 80列就換行 
(set
-scroll-bar-mode nil)  ; 取消滾動(dòng)欄
;;(tool
-bar-mode nil)        ; 取消工具欄
(setq 
default-directory "~/")     ; 設(shè)置打開(kāi)文件的缺省路徑
(ido
-mode t)             ; 打開(kāi)ido,使打開(kāi)文件時(shí)后面有提示,在emacs23帶有ido
(setq visible
-bell t)          ; 關(guān)閉煩人的出錯(cuò)時(shí)的提示聲
(setq inhibit
-startup-message t) ; 關(guān)閉emacs啟動(dòng)時(shí)的畫面
(setq gnus
-inhibit-startup-message t) ; 關(guān)閉gnus啟動(dòng)時(shí)的畫面
(fset 'yes
-or-no-p 'y-or-n-p)    ; 按 y 或空格鍵表示 yes,n 表示 no
(setq mouse
-yank-at-point t)    ; 不在鼠標(biāo)點(diǎn)擊的那個(gè)地方插入剪貼板內(nèi)容
(setq kill
-ring-max 200)    ; 設(shè)置粘貼緩沖條目數(shù)量
(setq auto
-save-mode nil)    ; 自動(dòng)保存模式
(setq x
-select-enable-clipboard t) ; 允許emacs和外部其他程序的粘貼
(setq user
-full-name "XXXXXX")
(setq user
-mail-address "XXXXXX@gmail.com")    ; 設(shè)置有用的個(gè)人信息,這在很多地方有用。
(setq global
-font-lock-mode t)    ; 進(jìn)行語(yǔ)法加亮。
(setq
-default kill-whole-line t) ; 在行首 C-k 時(shí),同時(shí)刪除該行
(setq show
-paren-mode t) ;打開(kāi)括號(hào)匹配顯示模式
(setq show
-paren-style 'parenthesis) ;括號(hào)匹配時(shí)可以高亮顯示另外一邊的括號(hào),但光標(biāo)不會(huì)煩人的跳到另一個(gè)括號(hào)處。
(setq mouse
-avoidance-mode 'animate) ;光標(biāo)靠近鼠標(biāo)指針時(shí),讓鼠標(biāo)指針自動(dòng)讓開(kāi),別擋住視線。
(setq auto
-image-file-mode t) ;讓 Emacs 可以直接打開(kāi)和顯示圖片
(setq 
default-major-mode 'text-mode)
; (add
-hook 'text-mode-hook 'turn-on-auto-fill) ; 設(shè)置缺省主模式是text,,并進(jìn)入auto-fill次模式.而不是基本模式fundamental-mode
(setq
-default auto-fill-function 'do-auto-fill) ; Autofill in all modes;;

;(setq
-default indent-tabs-mode nil)
;(setq 
default-tab-width 8)
;(setq tab
-stop-list ())
;;不用 TAB 字符來(lái)indent, 這會(huì)引起很多奇怪的錯(cuò)誤。編輯 Makefile 的時(shí)候也不用擔(dān)心,因?yàn)?nbsp;makefile
-mode 會(huì)把 TAB 鍵設(shè)置成真正的 TAB 字符,并且加亮顯示的。注:還沒(méi)搞清楚
(setq column
-number-mode t)
(setq line
-number-mode t) ; 顯示行號(hào)
(setq display
-time-24hr-format t)
(setq display
-time-day-and-date t)
(display
-time) ; 顯示時(shí)間
(setq sentence
-end "\\([。!?]\\|……\\|[.?!][]\"')}]*\\($\\|[ \t]\\)\\)[ \t\n]*")
(setq sentence-end-double-space nil)     ; 設(shè)置 sentence-end 可以識(shí)別中文標(biāo)點(diǎn)。不用在 fill 時(shí)在句號(hào)后插入兩個(gè)空格。
(setq enable-recursive-minibuffers t)     ; 可以遞歸的使用 minibuffer
(setq scroll-margin 3  scroll-conservatively 10000) 
;;防止頁(yè)面滾動(dòng)時(shí)跳動(dòng), scroll-margin 3 可以在靠近屏幕邊沿3行時(shí)就開(kāi)始滾動(dòng),可以很好的看到上下文。
(setq track-eol t)    ; 當(dāng)光標(biāo)在行尾上下移動(dòng)的時(shí)候,始終保持在行尾。
(setq Man-notify-method 'pushy) ; 當(dāng)瀏覽 man page 時(shí),直接跳轉(zhuǎn)到 man buffer。
(setq next-line-add-newlines nil)    ; Emacs 21 中已經(jīng)是缺省設(shè)置。按 C-n 或向下鍵時(shí)不添加新行。
(setq speedbar-show-unknown-files t);;可以顯示所有目錄以及文件
(setq dframe-update-speed nil);;不自動(dòng)刷新,手動(dòng) g 刷新
(setq speedbar-update-flag nil)
(setq speedbar-use-images nil);;不使用 image 的方式
(setq speedbar-verbosity-level 0)
(setq time-stamp-active t)
(setq time-stamp-warn-inactive t)
(setq time-stamp-format 
"%:y-%02m-%02d %3a %02H:%02M:%02S chunyu") ; 設(shè)置時(shí)間戳,標(biāo)識(shí)出最后一次保存文件的時(shí)間。
(setq dired-recursive-copies 'top)
(setq dired-recursive-deletes 'top) ;讓 dired 可以遞歸的拷貝和刪除目錄。
;=========================================END==============================================;


;;xcscope
(require 'xcscope)
;; C-c s a             設(shè)定初始化的目錄,一般是你代碼的根目錄
;; C-s s I             對(duì)目錄中的相關(guān)文件建立列表并進(jìn)行索引
;; C-c s s             序找符號(hào)
;; C-c s g             尋找全局的定義
;; C-c s c             看看指定函數(shù)被哪些函數(shù)所調(diào)用
;; C-c s C             看看指定函數(shù)調(diào)用了哪些函數(shù)
;; C-c s e             尋找正則表達(dá)式
;; C-c s f             尋找文件
;; C-c s i             看看指定的文件被哪些文件include
;=========================================END==============================================;

;;文件頭header設(shè)置
(require 'header2)
;;(require 'header)
(setq make-header-hooks '(header-mode-line
                            header-blank
                            header-file-name
                            header-blank
                            header-copyright
                            header-blank
                            header-author
                            header-creation-date
                            header-modification-author
                            header-modification-date
                            header-update-count
                            header-blank
                            header-history
                            header-blank
                            ))
(setq header-copyright-notice 
"  XXXXXXX" )
(make-local-variable 'user-full-name)
(make-local-variable 'user-mail-address)
;=========================================END==============================================;



;;setnu
;(add-hook 'c-mode-common-hook '(lambda()  (require 'setnu+)  ) ) ;;設(shè)置C/C++mode顯示行號(hào)
;(add-hook 'c++-mode-common-hook '(lambda()  (require 'setnu+)  ) )

;; 加載顯示行號(hào)模塊
(require 'display-line-number)
;;(add-hook 'c-mode-common-hook '(lambda()  (require 'display-line-number)  ) )
;; 如果想所有打開(kāi)的文件都顯示行的話就打開(kāi)下面的注釋
;;(global-display-line-number-mode 1)
;; 設(shè)置顯示格式
(setq display-line-number-format 
"%3d ")
;; 在 tool bar 上增加一個(gè)圖標(biāo),
;; 注意: 一定要在 load-path 中 可以找到 display-line-nuber.xpm 文件才行。
;;
;;(tool-bar-add-item 
"display-line-number"
;;                   'display-line-number-mode
;;                   'display-line-number-mode
;;                  :help 
"display line number!"
;;                   :button (cons :toggle  '(and (boundp
;;                                                 display-line-number-mode)
;;                                                display-line-number-mode)))
;;
;; 使用方法
;; M-x display-line-number-mode
;; 用來(lái) toggle 顯示行號(hào)的模式
;; M-x display-line-number-mode-on
;; 啟動(dòng)顯示行號(hào)的模式
;; M-x display-line-number-mode-off
;; 關(guān)閉顯示行號(hào)的模式
;; 僅對(duì)某種 mode 啟動(dòng)顯示行號(hào)的模式
;; (add-hook 'c-mode-hook 'display-line-number-mode)
(add-hook 'c-mode-hook 'display-line-number-mode)
(add-hook 'c++-mode-hook 'display-line-number-mode)
;=========================================END==============================================;

;;tabbar
(require 'tabbar)
(tabbar-mode)
;=========================================END==============================================;

;加入會(huì)話功能
(require 'session)
(add-hook 'after-init-hook 'session-initialize)
(load 
"desktop")
(desktop-save-mode) 
;=========================================END==============================================;

;; 啟用redo
(require 'redo)
;=========================================END==============================================;

;;cedet ecb安裝
(add-hook 'texinfo-mode-hook (lambda () (require 'sb-texinfo)))
     (load-file 
"~/.emacs.d/site-lisp/cedet-1.0pre4/common/cedet.el")
     (semantic-load-enable-code-helpers)
     (autoload 'speedbar-frame-mode 
"speedbar" "Popup a speedbar frame" t)
     (autoload 'speedbar-get-focus 
"speedbar" "Jump to speedbar frame" t)
     (define-key-after (lookup-key global-map [menu-bar tools])
                [speedbar]
                '(
"Speedbar" .
                speedbar-frame-mode)
                [calendar])

;; 指定semantic臨時(shí)文件的路徑,避免到處都是臨時(shí)文件
(setq semanticdb-default-save-directory 
"~/backups/emacs/semantic")

;;;;C/C++語(yǔ)言啟動(dòng)時(shí)自動(dòng)加載semantic對(duì)/usr/include的索引數(shù)據(jù)庫(kù)
(setq semanticdb-search-system-databases t)
  (add-hook 'c-mode-common-hook
          (lambda ()
            (setq semanticdb-project-system-databases
                  (list (semanticdb-create-database
                           semanticdb-new-database-class
                           
"/usr/include")))))

;; project root path
(setq semanticdb-project-roots
          (list
        (expand-file-name 
"/")))
;; 避免semantic占用CPU過(guò)多
(setq-default semantic-idle-scheduler-idle-time 432000)

;;ecb
(add-to-list 'load-path 
"~/.emacs.d/site-lisp/ecb-2.32")
(load-file 
"~/.emacs.d/site-lisp/ecb-2.32/ecb.el")
(require 'ecb)
(setq ecb-auto-activate nil
          ecb-tip-of-the-day nil
          ecb-tree-indent 4
          ecb-windows-height 0.5
          ecb-windows-width 0.13)
          ecb-auto-compatibility-check nil
          ecb-version-check nil
          inhibit-startup-message t
;;重啟Emacs
;;運(yùn)行M-x ecb-byte-complie編譯,可以加快運(yùn)行速度
;;M-x ecb-show-help看在線幫助
;;M-x customize-option RET ecb-source-path RET設(shè)置源碼目錄

;;設(shè)置自動(dòng)補(bǔ)全
(defun my-indent-or-complete ()
   (interactive)
   (if (looking-at 
"\\>")
          (hippie-expand nil)
          (indent-for-tab-command)))
(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-whole-kill
        )
)
;=========================================END==============================================;


;; c-mode設(shè)置
;; c-mode公共設(shè)置
(defun my-c-mode-common-hook ()
  (setq default-tab-width 4)
  (setq tab-width 4)
  (setq c-basic-offset 4)
  (hs-minor-mode t))
(add-hook 'c-mode-common-hook 'my-c-mode-common-hook)

(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)
;;能把一個(gè)代碼塊縮起來(lái),需要的時(shí)候再展開(kāi)
;;  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

;; C語(yǔ)言設(shè)置
(defun my-c-mode-hook ()
  (c-set-style 
"cc-mode"))
(add-hook 'c-mode-hook 'my-c-mode-hook)

;; C++設(shè)置
(defun my-c++-mode-hook ()
  (c-set-style 
"stroustrup"))
(add-hook 'c++-mode-hook 'my-c++-mode-hook)

;=========================================END==============================================;

(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)
;;輸入左邊的括號(hào),就會(huì)自動(dòng)補(bǔ)全右邊的部分.包括(), 
"", [] , {} , 等等。
;=========================================END==============================================;


;;bakup
(setq auto-save-default nil)    ;不生成 #filename# 文件
(setq make-backup-files t)    ;設(shè)定不產(chǎn)生備份文件
(setq auto-save-mode nil)    ;自動(dòng)保存模式
;;(setq-default make-backup-files t)    ; 不生成臨時(shí)文件
(setq   delete-old-versions   t)
(setq version-control 'never)    ; 啟用版本控制,即可以備份多次
(setq kept-old-versions 2)    ; 備份最原始的版本兩次,及第一次編輯前的文檔,和第二次編輯前的文檔
(setq kept-new-versions 1)    ; 備份最新的版本1次,理解同上
(setq delete-old-versions t)    ;刪掉不屬于以上3中版本的版本
(setq backup-directory-alist '((
" " . "~/backups/emacs/")))    ; 設(shè)置備份文件的路徑
(setq backup-by-copying t)    ;備份設(shè)置方法,直接拷貝
   
;; Emacs 中,改變文件時(shí),默認(rèn)都會(huì)產(chǎn)生備份文件(以 ~ 結(jié)尾的文件)??梢酝耆サ?br>;; (并不可取),也可以制定備份的方式。這里采用的是,把所有的文件備份都放在一
;; 個(gè)固定的地方(
"~/backups")。對(duì)于每個(gè)備份文件,保留最原始的兩個(gè)版本和最新的
;; 1個(gè)版本。并且備份的時(shí)候,備份文件是復(fù)本,而不是原件。
;=========================================END==============================================;


;;HOT KEY
;;保留F3、F4、F5、F6、F7、F8 for Xrefactory
(global-set-key [f1] 'shell)                              ; 進(jìn)入shell
(global-set-key [C-f9] 'gdb)                              ; 調(diào)試
(setq compile-command 
"make -f Makefile")                 ; 編譯
(global-set-key [f9] 'do-compile)
(global-set-key [f10] 'speedbar)                          ; 啟動(dòng)/關(guān)閉speedbar

(global-set-key (kbd 
"M-\[") 'hs-hide-block)              ; 隱藏塊
(global-set-key (kbd 
"M-\]") 'hs-show-block)              ; 顯示塊
(global-set-key [C-f12] 'comment-or-uncomment-region)     ; 注釋 / 取消注釋
(global-set-key [f12] 'c-indent-line-or-region)           ; 格式化代碼

(global-set-key (kbd 
"C-`") 'ecb-goto-window-sources)     ; 切換到ecb sources窗口
(global-set-key [C-tab] 'other-window)                    ; 切換窗口
(global-set-key [M-return] 'delete-other-windows)         ; 關(guān)閉其他窗口
(global-set-key 
"\C-xk" 'kill-this-buffer)                ; 關(guān)閉當(dāng)前buffer
(global-set-key (kbd 
"s-SPC") 'set-mark-command)          ; 改變set mark鍵

;; 顯示buffer列表
(global-set-key (kbd 
"C-x C-b") 'ibuffer)

;; 跳轉(zhuǎn)到當(dāng)前目錄的Dired
(global-set-key 
"\C-x\C-j" 'dired-jump)

;; 跳轉(zhuǎn)到寄存器指定的位置
(global-set-key 
"\C-xj" 'jump-to-register)

;; 跳轉(zhuǎn)到全局定義
(global-set-key 
"\C-xg" 'cscope-find-global-definition-no-prompting) 

(global-set-key (kbd 
"S-<SPC>") 'set-mark-command) ;用shift+space 來(lái) setmark 了, C-@ 很不好按。

(global-set-key [C-=] 'my-indent-or-complete)     ;自動(dòng)補(bǔ)全或縮進(jìn)
(global-set-key [\C-f12] 'ecb-activate)         ;啟用ECB
(global-set-key [\C-S-f12] 'ecb-deactivate)     ;退出ECB
;; 補(bǔ)全命令 右Ctrl+\ 自動(dòng)補(bǔ)全menu
(global-set-key [M-/] 'hippie-expand)
;;(global-set-key [(control return)] 'senator-complete-symbol);
;;(global-set-key [(control return)] ' senator-completion-menu-popup)
(global-set-key 
"\C-\\" 'semantic-ia-complete-symbol-menu)
;;tabbar
(global-set-key (kbd 
"S-<up>") 'tabbar-backward-group)
(global-set-key (kbd 
"S-<down>") 'tabbar-forward-group)
(global-set-key (kbd 
"S-<left>") 'tabbar-backward)
(global-set-key (kbd 
"S-<right>") 'tabbar-forward)
(global-set-key ( kbd 
"C-.") 'redo) 
;=========================================END==============================================;


(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")
 '(ecb-primary-secondary-mouse-buttons (quote mouse-1--mouse-2)))
(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.
 )
;=========================================END==============================================;


;; Xrefactory configuration part ;;
;; some Xrefactory defaults can be set here
(defvar xref-current-project t) ;; can be also 
"my_project_name"
;;注:這里的nil改為了t
(defvar xref-key-binding 'global) ;; can be also 'local or 'none
(setq load-path (cons 
"/home/uiu/.emacs.d/site-lisp/xref/emacs" load-path))
(setq exec-path (cons 
"/home/uiu/.emacs.d/site-lisp/xref" exec-path))
(load 
"xrefactory")
;; end of Xrefactory configuration part ;;
(message 
"xrefactory loaded")
;=========================================END==============================================;

posted on 2008-05-21 16:23 martin0501 閱讀(11630) 評(píng)論(3)  編輯 收藏 引用 所屬分類: 1. 軟件開(kāi)發(fā)工具

評(píng)論

# re: Linux下開(kāi)發(fā)環(huán)境搭建---2. emacs篇 2008-06-20 20:57 phoenix
好像同時(shí)使用自動(dòng)補(bǔ)全括號(hào)功能時(shí),newline-and-indent沒(méi)法正確縮進(jìn)????
縮進(jìn)樣式:
void test()
{
}
why? and how to solve it ? thank you !  回復(fù)  更多評(píng)論
  

# re: Linux下開(kāi)發(fā)環(huán)境搭建---2. emacs篇[未登錄](méi) 2009-02-09 08:07 paul
SO COOL!  回復(fù)  更多評(píng)論
  

# re: Linux下開(kāi)發(fā)環(huán)境搭建---2. emacs篇 2012-06-17 21:43 馮赫龍
這邊:
;; c-mode設(shè)置
在.emacs文件添加
;; c-mode公共設(shè)置
(defun my-c-mode-common-hook ()
(setq default-tab-width 4)
(setq tab-width 4)
(setq c-basic-offset 4)
(hs-minor-mode t))
(add-hook 'c-mode-common-hook 'my-c-mode-common-hook)

;; C語(yǔ)言設(shè)置
(defun my-c-mode-hook ()
(c-set-style "cc-mode"))
(add-hook 'c-mode-hook 'my-c-mode-hook)

;; C++設(shè)置
(defun my-c++-mode-hook ()
(c-set-style "stroustrup"))
(add-hook 'c++-mode-hook 'my-c++-mode-hook)
如果按照你的來(lái)的話不會(huì)報(bào)錯(cuò),但是按tag鍵就會(huì)不能自動(dòng)補(bǔ)全,我的設(shè)置是:
;;;cc-mode配置 (c-set-offset 'inline-open 0)
(c-set-offset 'friend '-)
(c-set-offset 'substatement-open 0)

;;;;我的C/C++語(yǔ)言編輯策略
(defun my-c-mode-common-hook())
(setq tab-width 4 indent-tabs-mode nil)
;;;hungry-delete and auto-newline
(c-toggle-auto-hungry-state 1)
;;;;我的C++語(yǔ)言編輯策略
(defun my-c++-mode-hook())
(setq tab-width 4 indent-tabs-mode nil)
(add-hook 'c++-mode-hook
'(lambda()
(c-set-style "stroustrup")))
;;(define-key c++-mode-map [f3] 'replace-regexp)  
回復(fù)  更多評(píng)論
  

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久成人一区二区| 欧美在线资源| 欧美激情精品| 国内偷自视频区视频综合| 亚洲一二三区在线| 欧美激情一区二区三区在线视频| 亚洲男人的天堂在线aⅴ视频| 欧美精品自拍| 亚洲国产裸拍裸体视频在线观看乱了| 欧美一区二区成人| 一区二区黄色| 欧美日韩国产精品自在自线| 亚洲国产日韩一区| 噜噜噜躁狠狠躁狠狠精品视频| 亚洲欧美综合精品久久成人| 欧美午夜不卡在线观看免费 | 日韩一级大片在线| 欧美高清在线视频观看不卡| 欧美在线免费一级片| 国产九九精品| 香蕉成人久久| 亚洲男女自偷自拍| 国产噜噜噜噜噜久久久久久久久| 亚洲一区999| 一区二区高清视频| 欧美特黄一级| 亚洲欧美日韩精品一区二区| 99v久久综合狠狠综合久久| 欧美激情亚洲自拍| 日韩视频一区二区三区| 亚洲高清视频中文字幕| 久久综合中文| 亚洲区第一页| 91久久夜色精品国产网站| 欧美成人综合| 99在线精品免费视频九九视| 亚洲人成艺术| 欧美日韩亚洲一区二区三区在线观看 | 一本久道久久综合婷婷鲸鱼| 欧美人牲a欧美精品| 日韩午夜在线视频| 亚洲经典在线看| 欧美日韩日日骚| 亚洲综合丁香| 亚洲欧美激情视频| 国产偷国产偷精品高清尤物| 久久久青草婷婷精品综合日韩| 欧美有码在线观看视频| 狠狠色综合色区| 蜜桃av一区| 欧美电影资源| 亚洲一区二区在线视频| 亚洲午夜视频在线| 国产一区香蕉久久| 欧美顶级艳妇交换群宴| 欧美激情aaaa| 亚洲欧美日产图| 欧美一区二区三区四区夜夜大片| 好吊妞**欧美| 欧美激情视频一区二区三区免费| 欧美黑人多人双交| 亚洲一区自拍| 欧美亚洲尤物久久| 亚洲国产精品一区二区www| 亚洲精品老司机| 国产精品美女久久| 免费91麻豆精品国产自产在线观看| 免费日本视频一区| 亚洲天堂免费观看| 欧美在线|欧美| 亚洲茄子视频| 亚洲免费小视频| 在线精品视频在线观看高清| 亚洲日本激情| 国产伦精品一区二区三| 免费不卡中文字幕视频| 欧美精品一二三| 久久av一区二区三区亚洲| 久久综合狠狠综合久久综青草| 日韩午夜在线| 欧美一二三视频| 亚洲乱码国产乱码精品精天堂| 亚洲性感激情| 亚洲电影观看| 亚洲性感美女99在线| 在线免费观看日韩欧美| 一区二区三区精品| 亚洲高清久久| 在线亚洲一区二区| 亚洲高清不卡| 亚洲女同精品视频| 亚洲精品一区二区三区婷婷月| 亚洲一区三区电影在线观看| 亚洲第一区在线| 亚洲午夜激情网站| 亚洲精品黄网在线观看| 亚洲午夜激情在线| 亚洲精品国产精品国自产观看| 亚洲免费视频网站| 99精品国产在热久久婷婷| 久久综合伊人| 久久精品国产综合精品| 国产精品99久久久久久白浆小说 | 亚洲人成在线播放网站岛国| 国产视频观看一区| 日韩视频三区| 亚洲国内高清视频| 欧美一级大片在线观看| 亚洲一区二区毛片| 麻豆成人在线观看| 久久久久久久一区| 国产精品盗摄久久久| 亚洲国产欧美一区二区三区同亚洲| 国产欧美二区| 99视频+国产日韩欧美| 亚洲国产精品综合| 久久九九精品| 欧美综合第一页| 欧美系列亚洲系列| 亚洲国产精品久久久久秋霞不卡| 国内精品伊人久久久久av一坑| 亚洲一卡久久| 中日韩美女免费视频网站在线观看| 久热综合在线亚洲精品| 久久婷婷综合激情| 国产欧美一区二区三区在线老狼 | 影音先锋久久久| 欧美一级久久久| 亚洲欧美日韩成人| 欧美视频在线观看 亚洲欧| 亚洲二区免费| 亚洲国产精品久久| 久久久中精品2020中文| 久久久综合网站| 国产亚洲人成网站在线观看| 亚洲网站在线播放| 亚洲欧美国产视频| 欧美午夜精品久久久久久人妖| 亚洲欧洲日韩综合二区| 亚洲日本成人女熟在线观看| 久久综合中文字幕| 欧美成人午夜免费视在线看片| 在线观看欧美精品| 久久亚洲欧美| 欧美jjzz| 亚洲国产激情| 免费亚洲电影在线| 欧美黄色片免费观看| 91久久精品国产91性色tv| 老司机一区二区| 欧美国产先锋| 99av国产精品欲麻豆| 欧美日本成人| 一区二区三区高清在线观看| 亚洲欧美日韩视频二区| 国产精品美女久久| 欧美一区二区三区免费大片| 久久九九热免费视频| 影音先锋日韩精品| 麻豆精品传媒视频| 亚洲经典在线| 亚洲一区亚洲二区| 国产精品视频久久| 欧美诱惑福利视频| 欧美wwwwww| 日韩一级精品视频在线观看| 欧美精品xxxxbbbb| 一区二区三区免费网站| 亚洲欧美日韩直播| 国产亚洲欧洲997久久综合| 久久婷婷丁香| 亚洲欧洲日本专区| 亚洲欧美中文在线视频| 国产日韩一区| 每日更新成人在线视频| 亚洲片区在线| 午夜视频在线观看一区二区三区 | 久久久国产视频91| 亚洲高清在线| 欧美日韩麻豆| 午夜精品999| 欧美成人精品福利| 一本色道综合亚洲| 国产伦精品一区二区三区| 久久蜜臀精品av| 亚洲欧洲精品一区二区三区波多野1战4 | 亚洲性感美女99在线| 国产亚洲人成网站在线观看| 久久人人爽人人爽爽久久| 亚洲精品1234| 欧美制服丝袜第一页| 1769国内精品视频在线播放| 欧美伦理91| 午夜在线a亚洲v天堂网2018| 女女同性精品视频| 亚洲天堂免费在线观看视频| 国产专区精品视频| 欧美激情按摩在线| 亚洲欧美日韩一区在线| 欧美激情亚洲另类|