• <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>

            HyJune的專欄

            Linux From Scratch

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

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

            基本安裝設(shè)置請參考:Ubuntu Ubuntu 8.04 LTS 配置筆記
            emacs的基本安裝設(shè)置完成后,使emacs成為C開發(fā)環(huán)境還需做如下設(shè)置,新建$HOME/.emacs文件
            vim $HOME/.emacs
            本文把emacs插件放在 $HOME/.emacs.d/site-lisp/ 目錄下,如果在$HOME下沒有找到.emacs.d目錄,請手動建立
            在.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)
            顯示行號
            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
            感覺ann77的這個的確比setnu.el好用
            session
            http://emacs-session.sourceforge.net/ 下載,把里面的 session.el 解壓出來放到加載路徑~/.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的免費版本,非GNU,支持C和java的跳轉(zhuǎn),自動補全插等功能,比cedet+ECB組合速度要快,用起來也很簡單,回答幾個問題新建一個project,然后幾個快捷鍵就可以滿足需要了,美中不足的是對C++支持是收費,且狂貴,這個小東西要400刀,也沒找到破解的版本,寫C++代碼的時候還得用CEDET+ECB。

            安裝 cscope
            sudo apt-get install cscope
            找到xcscope.el文件 cp到 ~/.emacs.d/site-lisp/
            在.emacs文件添加
            (require 'xcscope)
            cscope的主要功能和對應(yīng)的快捷鍵:
            ;; C-c s a             設(shè)定初始化的目錄,一般是你代碼的根目錄
            ;; C-s s I             對目錄中的相關(guān)文件建立列表并進(jìn)行索引
            ;; C-c s s             序找符號
            ;; 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目錄下運行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
            詳情請參考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運行速度
            M-x ecb-show-help看在線幫助
            M-x customize-option RET ecb-source-path RET設(shè)置源碼目錄

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

            設(shè)置自動補全
            在.emacs文件添加
            ;;;;C/C++語言啟動時自動加載semantic對/usr/include的索引數(shù)據(jù)庫
            (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過多
            (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
            +\ 自動補全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為免費版,2.X.X為收費版)。解壓后放到~/.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
            .........
            請參考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語言設(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)
            輸入左邊的括號,就會自動補全右邊的部分.包括(), "", [] , {} , 等
            在.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亂碼,好像沒作用
            ;
            =========================================END==============================================;

            ;;MY CUSTOMIZE
            (auto
            -image-file-mode t);打開圖片顯示功能
            (display
            -time-mode 1);顯示時間,格式如下
            (setq display
            -time-24hr-format t)
            (setq display
            -time-day-and-date t)
            (transient
            -mark-mode t);允許臨時設(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)  ; 取消滾動欄
            ;;(tool
            -bar-mode nil)        ; 取消工具欄
            (setq 
            default-directory "~/")     ; 設(shè)置打開文件的缺省路徑
            (ido
            -mode t)             ; 打開ido,使打開文件時后面有提示,在emacs23帶有ido
            (setq visible
            -bell t)          ; 關(guān)閉煩人的出錯時的提示聲
            (setq inhibit
            -startup-message t) ; 關(guān)閉emacs啟動時的畫面
            (setq gnus
            -inhibit-startup-message t) ; 關(guān)閉gnus啟動時的畫面
            (fset 'yes
            -or-no-p 'y-or-n-p)    ; 按 y 或空格鍵表示 yes,n 表示 no
            (setq mouse
            -yank-at-point t)    ; 不在鼠標(biāo)點擊的那個地方插入剪貼板內(nèi)容
            (setq kill
            -ring-max 200)    ; 設(shè)置粘貼緩沖條目數(shù)量
            (setq auto
            -save-mode nil)    ; 自動保存模式
            (setq x
            -select-enable-clipboard t) ; 允許emacs和外部其他程序的粘貼
            (setq user
            -full-name "XXXXXX")
            (setq user
            -mail-address "XXXXXX@gmail.com")    ; 設(shè)置有用的個人信息,這在很多地方有用。
            (setq global
            -font-lock-mode t)    ; 進(jìn)行語法加亮。
            (setq
            -default kill-whole-line t) ; 在行首 C-k 時,同時刪除該行
            (setq show
            -paren-mode t) ;打開括號匹配顯示模式
            (setq show
            -paren-style 'parenthesis) ;括號匹配時可以高亮顯示另外一邊的括號,但光標(biāo)不會煩人的跳到另一個括號處。
            (setq mouse
            -avoidance-mode 'animate) ;光標(biāo)靠近鼠標(biāo)指針時,讓鼠標(biāo)指針自動讓開,別擋住視線。
            (setq auto
            -image-file-mode t) ;讓 Emacs 可以直接打開和顯示圖片
            (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 字符來indent, 這會引起很多奇怪的錯誤。編輯 Makefile 的時候也不用擔(dān)心,因為 makefile
            -mode 會把 TAB 鍵設(shè)置成真正的 TAB 字符,并且加亮顯示的。注:還沒搞清楚
            (setq column
            -number-mode t)
            (setq line
            -number-mode t) ; 顯示行號
            (setq display
            -time-24hr-format t)
            (setq display
            -time-day-and-date t)
            (display
            -time) ; 顯示時間
            (setq sentence
            -end "\\([。!?]\\|……\\|[.?!][]\"')}]*\\($\\|[ \t]\\)\\)[ \t\n]*")
            (setq sentence-end-double-space nil)     ; 設(shè)置 sentence-end 可以識別中文標(biāo)點。不用在 fill 時在句號后插入兩個空格。
            (setq enable-recursive-minibuffers t)     ; 可以遞歸的使用 minibuffer
            (setq scroll-margin 3  scroll-conservatively 10000) 
            ;;防止頁面滾動時跳動, scroll-margin 3 可以在靠近屏幕邊沿3行時就開始滾動,可以很好的看到上下文。
            (setq track-eol t)    ; 當(dāng)光標(biāo)在行尾上下移動的時候,始終保持在行尾。
            (setq Man-notify-method 'pushy) ; 當(dāng)瀏覽 man page 時,直接跳轉(zhuǎn)到 man buffer。
            (setq next-line-add-newlines nil)    ; Emacs 21 中已經(jīng)是缺省設(shè)置。按 C-n 或向下鍵時不添加新行。
            (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)
            (setq time-stamp-active t)
            (setq time-stamp-warn-inactive t)
            (setq time-stamp-format 
            "%:y-%02m-%02d %3a %02H:%02M:%02S chunyu") ; 設(shè)置時間戳,標(biāo)識出最后一次保存文件的時間。
            (setq dired-recursive-copies 'top)
            (setq dired-recursive-deletes 'top) ;讓 dired 可以遞歸的拷貝和刪除目錄。
            ;=========================================END==============================================;


            ;;xcscope
            (require 'xcscope)
            ;; C-c s a             設(shè)定初始化的目錄,一般是你代碼的根目錄
            ;; C-s s I             對目錄中的相關(guān)文件建立列表并進(jìn)行索引
            ;; C-c s s             序找符號
            ;; 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顯示行號
            ;(add-hook 'c++-mode-common-hook '(lambda()  (require 'setnu+)  ) )

            ;; 加載顯示行號模塊
            (require 'display-line-number)
            ;;(add-hook 'c-mode-common-hook '(lambda()  (require 'display-line-number)  ) )
            ;; 如果想所有打開的文件都顯示行的話就打開下面的注釋
            ;;(global-display-line-number-mode 1)
            ;; 設(shè)置顯示格式
            (setq display-line-number-format 
            "%3d ")
            ;; 在 tool bar 上增加一個圖標(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
            ;; 用來 toggle 顯示行號的模式
            ;; M-x display-line-number-mode-on
            ;; 啟動顯示行號的模式
            ;; M-x display-line-number-mode-off
            ;; 關(guān)閉顯示行號的模式
            ;; 僅對某種 mode 啟動顯示行號的模式
            ;; (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==============================================;

            ;加入會話功能
            (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臨時文件的路徑,避免到處都是臨時文件
            (setq semanticdb-default-save-directory 
            "~/backups/emacs/semantic")

            ;;;;C/C++語言啟動時自動加載semantic對/usr/include的索引數(shù)據(jù)庫
            (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過多
            (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
            ;;運行M-x ecb-byte-complie編譯,可以加快運行速度
            ;;M-x ecb-show-help看在線幫助
            ;;M-x customize-option RET ecb-source-path RET設(shè)置源碼目錄

            ;;設(shè)置自動補全
            (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)
            ;;能把一個代碼塊縮起來,需要的時候再展開
            ;;  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語言設(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)
            ;;輸入左邊的括號,就會自動補全右邊的部分.包括(), 
            "", [] , {} , 等等。
            ;=========================================END==============================================;


            ;;bakup
            (setq auto-save-default nil)    ;不生成 #filename# 文件
            (setq make-backup-files t)    ;設(shè)定不產(chǎn)生備份文件
            (setq auto-save-mode nil)    ;自動保存模式
            ;;(setq-default make-backup-files t)    ; 不生成臨時文件
            (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 中,改變文件時,默認(rèn)都會產(chǎn)生備份文件(以 ~ 結(jié)尾的文件)。可以完全去掉
            ;; (并不可取),也可以制定備份的方式。這里采用的是,把所有的文件備份都放在一
            ;; 個固定的地方(
            "~/backups")。對于每個備份文件,保留最原始的兩個版本和最新的
            ;; 1個版本。并且備份的時候,備份文件是復(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)                          ; 啟動/關(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 來 setmark 了, C-@ 很不好按。

            (global-set-key [C-=] 'my-indent-or-complete)     ;自動補全或縮進(jìn)
            (global-set-key [\C-f12] 'ecb-activate)         ;啟用ECB
            (global-set-key [\C-S-f12] 'ecb-deactivate)     ;退出ECB
            ;; 補全命令 右Ctrl+\ 自動補全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 閱讀(11565) 評論(3)  編輯 收藏 引用 所屬分類: 1. 軟件開發(fā)工具

            評論

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

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

            # re: Linux下開發(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語言設(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)
            如果按照你的來的話不會報錯,但是按tag鍵就會不能自動補全,我的設(shè)置是:
            ;;;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)
            ;;;hungry-delete and auto-newline
            (c-toggle-auto-hungry-state 1)
            ;;;;我的C++語言編輯策略
            (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ù)  更多評論
              

            国产成人无码精品久久久性色| 亚洲?V乱码久久精品蜜桃| 欧美午夜A∨大片久久 | 久久93精品国产91久久综合| 久久精品国产69国产精品亚洲 | 精品国产日韩久久亚洲| 精品国产青草久久久久福利| 国产成人精品久久一区二区三区| 中文字幕成人精品久久不卡| 亚洲第一永久AV网站久久精品男人的天堂AV | 久久综合狠狠综合久久97色| 久久乐国产综合亚洲精品| 国产91色综合久久免费| 久久亚洲中文字幕精品一区| 久久精品毛片免费观看| 久久综合九色综合欧美就去吻| 性欧美丰满熟妇XXXX性久久久| 91精品观看91久久久久久| 99久久精品免费看国产一区二区三区 | 亚洲中文字幕无码久久精品1| 国产精品成人无码久久久久久| 亚洲精品乱码久久久久久蜜桃不卡| 精品99久久aaa一级毛片| 99国产欧美久久久精品蜜芽| 久久人人爽人人爽人人片AV高清 | 久久人人爽人人人人爽AV| 久久国产精品一区| 91精品国产色综久久| av午夜福利一片免费看久久| 77777亚洲午夜久久多喷| 中文字幕无码久久久| 久久国产福利免费| 岛国搬运www久久| 国产成人精品综合久久久| 一本大道久久a久久精品综合| 久久久av波多野一区二区| 性欧美丰满熟妇XXXX性久久久 | 亚洲AV无码久久| 99久久婷婷免费国产综合精品| 久久婷婷人人澡人人爽人人爱| 性欧美丰满熟妇XXXX性久久久|