emacs配置詳解及C/C++IDE全功能配置示範(附設定檔)__C++

來源:互聯網
上載者:User

我的emacs外掛程式下載地址: http://pan.baidu.com/share/link?shareid=4196458904&uk=3708780105

說明:

            1.為什麼使用emacs和vim而不使用IDE。

                 大牛隻用這兩種工具,我等弱渣純屬裝比。

            2.為什麼棄vim而使用emacs ?

                 聽說用vim的人JJ短,用emacs的人JJ長,所以我用emacs.

             (emacs和vim沒有誰好誰差,完全是個人喜好,只有吊絲才會爭論好壞,就像爭論win與linux的人一樣,你說win好,惜大牛及專業人士不用,他說linux好,有本事他賣出去啊。程式員的人生時間匆匆,陌生的人,路遇emacs與vim相爭者,語言優劣相爭者,技術與銷售相爭者,公知與五毛相爭者,皆不可與其謀事,糾與小節而不休,思於嘴辯而不實,皆市井小民而非謀大事之人也)

            3.本文對emacs的說明有

                    -emacs如何載入設定檔。

                    -emacs設定檔如何書寫與組織

                    -emacs的基本常規設定

                    -emacs的外掛程式擴充配置說明

                    -emacs開發環境配置

            4.本文不會講解emacs使用操作和lisp編程

        


閑話少說,入正題

一.emacs如何載入設定檔

      Emacs的核心部分是一個emacs lisp解譯器,emacs lisp是lisp的一種方言版本。對emacs進行配置,其實就是lisp解譯器對emacs lisp設定檔進行解釋。而我們對emacs進行配置其實就是書寫emacs lisp設定檔。所有的emacs設定檔都以.el為尾碼(emacs lisp簡寫).emacs在“/home/你的使用者名稱/”下有一個統一的設定檔.emacs,一般用於放置一些基本的配置內容和對其他設定檔的路徑引用。

     

Emacs初始設定檔案 (Init file)
  Emacs啟動的時候通常會嘗試從初始設定檔案中載入解釋一系列Lisp程式。Emacs會尋找~/.emacs,~/.emacs.el或者~/.emacs.d/init.el之一 (el實際上就是Emacs Lisp的縮寫)。Emacs還可以有一個預設的初始設定檔案default.el,可以位於Emacs的任何標準的庫搜尋目錄下,其中Emacs的庫搜尋目錄由load-path變數定義。除此之外,Emacs還可以有一個對所有使用者都有效通用設定檔 (site-wide startup file),稱為site-start.el,也可以位於Emacs的任何標準的庫搜尋目錄下。如果想要知道load-path的內容,可以在Emacs的*scratch*緩衝區中輸入(print load-path),然後在將游標移至右括弧後,使用快速鍵C-j (M-x eval-print-last-sexp) 來執行這條語句,就可以在當前緩衝區中列印出load-path的內容。

  Emacs載入這些設定檔的順序為:site-start.el,初始設定檔案,最後才是預設的初始設定檔案default.el。Emacs啟動時,可以使用-q或–no-init-file選項來阻止Emacs載入初始設定檔案;如果初始設定檔案中將inhibit-default-init設定為t,那麼Emacs不會載入default.el;最後,可以使用–no-site-file來阻止Emacs載入通用設定檔。


二.emacs設定檔的書寫與組織

       編寫emacs設定檔就是編寫emacs lisp檔案,文法遵循lisp語言,     而通常大多數配置選項為(emacs變數    emacs樣式)

        如這種形式 (emacs variable      emacs face)

        常見的emacs variable有set-background-color,set-foreground-color,column-number-mode。。。等等,他們都代表特定的emacs屬性樣式,後面的是設定的值。

        例如:

                   (global-linum-mode 'linum-mode)                   ;;auto show row-num                   (partial-completion-mode 1)                   ;;use partial-completion                   (icomplete-mode 1)                    ;;use complete-completion                                    (display-time-mode 1);;

         其中;;為注釋符號,也可以用'來注釋。

          所有的emacs設定檔中,只有.emacs不以.el為尾碼,但它也是被以emacs lisp檔案來解釋的。可以把各種功能的配置寫成獨立的el檔案,然後在其他檔案中相互包含,最後在.emacs設定檔中包含這些el檔案。即若在a.el中包含b.el,只需在.emacs中包含a.el即可,與c語言中include一樣

          按照一般的習慣,.emacs檔案中一般不會放太多的設定資訊,一般放一些emacs的搜尋路徑的資訊。

      

          以我的配置為例,.emacs放置在/home/fenice/下,而其他el檔案放在/home/fenice/.emacs.d/lisps/_emacs中。

          因此首先要添加一個emacs的搜尋路徑

           ;;add plugin to emacs
           ;;設定外掛程式載入路徑
           ;;plugin directory ~/.emacs.d/lisp/_emacs/
            (add-to-list 'load-path "~/.emacs.d/lisp/_emacs/")

           將別人寫好的外掛程式也可以添加到路徑,例如

           

            ;;;; 添加Emacs搜尋路徑            (add-to-list 'load-path "~/.emacs.d/lisps/_emacs")            (add-to-list 'load-path "~/.emacs.d/lisps/_emacs/install/ecb-2.40")            (add-to-list 'load-path "~/.emacs.d/lisps/_emacs/codepilot")            (add-to-list 'load-path "~/.emacs.d/lisps/_emacs/emacs-eclim")            (add-to-list 'load-path "~/.emacs.d/lisps/_emacs/icicles")            (add-to-list 'load-path "~/.emacs.d/lisps/_emacs/gnuserv")            (add-to-list 'load-path "~/.emacs.d/lisps/_emacs/install/cedet-1.0/common")            


            添加搜尋路徑後需要包含檔案才能在emacs啟動時載入

            例如包含xxx.el檔案,可以(require 'xxx)或者(load "xxx.el")


三.emacs基本常規設定

            大家可以下載我的設定檔,基本設定放在/home/fenice/.emacs.d/lisps/_emacs/base.el中,即檔案夾的_emacs下的base.el

;;=======================================================================;;Author:kevin_samuel(孫俊彥);;Date:2013-7-30;;Update Date:2013-7-30;;=======================================================================;;設定字型,預設是Monospace;;set-defalut-font;;(set-default-font "Monospace")(set-default-font "-unknown-DejaVu Sans Mono-normal-normal-normal-*-13-*-*-*-m-0-iso10646-1")  ;;個人感覺Mono系字型適合程式(對普通青年)


;;custom-set-variables;;set-color(set-background-color "black")  ;;use black-ground(set-foreground-color "white")  ;;use white-fore(set-face-foreground 'region "green") ;;(set-face-background 'region "blue") ;;

;;===============================================================;;外觀設定;;===============================================================;; 去掉捲軸(set-scroll-bar-mode nil);;關閉開啟畫面(setq inhibit-startup-message t);;禁用工具列(tool-bar-mode nil);;禁用功能表列;;(menu-bar-mode nil);;remove alert-bell(mouse-wheel-mode t)(global-linum-mode 'linum-mode);;auto show row-num;;自動載入行號(partial-completion-mode 1);;use partial-completion(icomplete-mode 1);;use complete-completion;; 高亮當前行;;(require 'hl-line-settings);; 可以把游標由方塊變成一個小長條;;(require 'bar-cursor);;======================================================================;;======================================================================;;狀態列;;======================================================================;;顯示時間;;(display-time)(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);;時間的變化頻率,單位多少來著。;;顯示列號(setq column-number-mode t);;沒列左邊顯示行號,按f3顯示/隱藏行號(require 'setnu)(setnu-mode t);;(global-set-key[f3] (quote setnu-mode));;顯示標題列 %f 緩衝區完整路徑 %p 頁面百分數 %l 行號(setq frame-title-format "%f");;=======================================================================;;緩衝區;;=====================================================================;;設定行距(setq default-line-spaceing 4);;頁寬(setq default-fill-column 60);;預設模式 text-mode;;(setq default-major-mode 'text-mode);;設定刪除記錄(setq kill-ring-max 200);;以空行結束;;(setq require-final-newline t);;開啟文法高亮。(global-font-lock-mode 1);;高亮顯示地區選取項目(transient-mark-mode t);;頁面平滑滾動,scroll-margin 3 靠近螢幕邊沿3行開始滾動,正好可以看到上下文;;(setq scroll-margin 3 scroll-consrvatively 10000);;高亮顯示成對括弧(show-paren-mode t)(setq show-paren-style 'parentheses);;滑鼠指標避游標(mouse-avoidance-mode 'animate);;粘貼於游標處,而不是滑鼠指標處(setq mouse-yank-at-point t);;=======================================================================;;回顯區;;=======================================================================;;閃屏警示(setq visible-bell t);;使用y or n提問(fset 'yes-or-no-p 'y-or-n-p);;鎖定行高(setq resize-mini-windows nil);;遞迴minibuffer(setq enable-recursive-minibuffers t);;當使用M-x COMMAND後,過1秒顯示該COMMAND綁定的鍵(setq suggest-key-bindings-1)   ;;預設。;;======================================================================;;編輯器的設定;;======================================================================;;不產生備份檔案(setq make-backup-files nil);;不產生臨時檔案(setq-default make-backup-files nil);;只渲染當前螢幕文法高亮,加快顯示速度(setq lazy-lock-defer-on-scrolling t);;(setq font-lock-support-mode 'lazy-lock-mode)(setq font-lock-maximum-decoration t);;將錯誤資訊顯示在回顯區(condition-case err(progn  (require 'xxx))  (error   (message "Can't load xxx-mode %s" (cdr err))));;使用X剪貼簿(setq x-select-enable-clipboard t);;設定剪貼簿的內容格式 適應Firefox(set-clipboard-coding-system 'ctext);;設定TAB寬度為4(setq default-tab-width 4) ;;以下設定縮排;;用tab縮排(setq indent-tabs-mode t)(setq c-indent-level 4)(setq c-continued-statement-offset 4)(setq c-brace-offset -4)(setq c-argdecl-indent 4)(setq c-label-offset -4)(setq c-basic-offset 4)(global-set-key "\C-m" 'reindent-then-newline-and-indent)

這是我的base.el檔案中的部分內容,就不全部貼上了。但是請記住,emacs所有的設定檔都是在啟動時一下子全部載入進lisp解譯器的,如果設定檔或外掛程式太多,編輯器會變得很慢,曾經看過一篇把emacs配置成IDE開發環境的文章,裡面加入了無數外掛程式,我按照那篇文章配置出來的emacs要啟動5秒鐘(i5-3230   8g),正常情況下emacs都是瞬開。如果非要那麼冗餘,都不如去用IDE了,emacs看著就土鱉,難道不是麼。


四.emacs的外掛程式擴充配置說明

(1)

     我的emacs設定檔

        /home/fenice/.emacs

      我的emacs設定檔包

       /home/fenice/.emacs.d/lisps/_emacs

       主要功能調用如下(.emacs中)載入設定檔包

      

;;;;讀取指令碼;;=========================================;;bind the key(load "cykbd.el");;basic setting(load "base.el");;expand setting(load "cyexpand.el");;IDE frame setting;;(load "addon.el");;code setting為了編程的配置(load "cycode.el");;========================================


     我的設定檔中有一個cycode.el,為什麼叫cy code.el呢,因為此檔案是陳楊所寫。一下有cy首碼的都是。

      調試功能,在cycode.el中添加:

;;==============================================================;;gdb-UI配置;;==============================================================(setq gdb-many-windows t)(load-library "multi-gud.el")(load-library "multi-gdb-ui.el")

上麵包含了兩個從網上下載的調試外掛程式,可以很方便的在emacs中進行gdb調試。

(2)安裝cedet外掛程式。需要從網上下載。cedet可以進行多種語言文法分析,自動補全,物件導向設計,UML圖繪製等功能,還有工程管理功能,不過沒用過。

          參考文章: http://www.cnblogs.com/logicbaby/archive/2011/10/19/2217253.html

         如果用我的設定檔,那麼最好把/home/fenice/.emacs.d/lisps/_emacs/install中的內容清空,然後將cedet(我的共用檔案裡有壓縮包)解壓到install目錄中,然後根據cedet內的INSTALL檔案裡的指示來安裝。最後在.emacs或cycode.el中添加路徑及配置資訊。我的設定檔中目錄為~/.emacs.d/lisps/_emacs/install/cedet-1.0/

如果使用,需要添加

;;==================================================;;cedet外掛程式設定;;==================================================(add-to-list 'load-path "~/.emacs.d/lisps/_emacs/install/cedet-1.0/speedbar")(add-to-list 'load-path "~/.emacs.d/lisps/_emacs/install/cedet-1.0/eieio")(add-to-list 'load-path "~/.emacs.d/lisps/_emacs/install/cedet-1.0/semantic");; Load CEDET.,從cedet的INSTALL中複製過來的;; See cedet/common/cedet.info for configuration details.

最後在設定檔中添加(在.emacs中或者其他自訂檔案,我的是cycode.el)

(load-file "~/.emacs.d/lisps/_emacs/install/cedet-1.0/common/cedet.el");; Enable EDE (Project Management) features(global-ede-mode 1);; Enable EDE for a pre-existing C++ project;; (ede-cpp-root-project "NAME" :file "~/myproject/Makefile");; Enabling Semantic (code-parsing, smart completion) features;; Select one of the following:;; * This enables the database and idle reparse engines;;(semantic-load-enable-minimum-features);; * This enables some tools useful for coding, such as summary mode;;   imenu support, and the semantic navigator;;(semantic-load-enable-code-helpers);; * This enables even more coding tools such as intellisense mode;;   decoration mode, and stickyfunc mode (plus regular code helpers);; (semantic-load-enable-gaudy-code-helpers);; * This enables the use of Exuberent ctags if you have it installed.;;   If you use C++ templates or boost, you should NOT enable it.;; (semantic-load-enable-all-exuberent-ctags-support);;   Or, use one of these two types of support.;;   Add support for new languges only via ctags.;; (semantic-load-enable-primary-exuberent-ctags-support);;   Add support for using ctags as a backup parser.;; (semantic-load-enable-secondary-exuberent-ctags-support);; Enable SRecode (Template management) minor-mode. ;;(global-srecode-minor-mode 1)  ;;----------------------------------------------------------------------(semantic-load-enable-minimum-features)(semantic-load-enable-code-helpers);;(semantic-load-enable-guady-code-helpers);;(semantic-load-enable-excessive-code-helpers)(semantic-load-enable-semantic-debugging-helpers)(global-ede-mode t);;程式碼摺疊功能;;(require 'semantic-tag-folding nil 'noerror)(global-semantic-tag-folding-mode 1);;摺疊和開啟整個buffer的所有代碼(define-key semantic-tag-folding-mode-map (kbd "C--") 'semantic-tag-folding-fold-all)(define-key semantic-tag-folding-mode-map (kbd "C-=") 'semantic-tag-folding-show-all);;摺疊和開啟單個buffer的所有代碼(define-key semantic-tag-folding-mode-map (kbd "C-_") 'semantic-tag-folding-fold-block)(define-key semantic-tag-folding-mode-map (kbd "C-+") 'semantic-tag-folding-show-block)

(3)為了使用方便可以使用ecb外掛程式配合cedet的使用。不足之處就是這兩個外掛程式使emacs的啟動速度慢了2秒。

  直接下載ecb到~/.emacs.d/lisps/emacs/install目錄下解壓即可,這是我的目錄,也可以自訂目錄,不過要注意修改路徑

  然後加上

;;==============================================================;;ecb配置;;==============================================================;;(require 'ecb);;開啟ecb用,M-x:ecb-activate(require 'ecb-autoloads);;自動啟動ecb並且不顯示每日提示;;(require 'ecb);;(setq ecb-auto-activate t)(setq ecb-tip-of-the-day nil)(require 'cc-mode)(c-set-offset 'inline-open 0)(c-set-offset 'friend '-)(c-set-offset 'substatement-open 0)

(4)真正的自動補全功能,就像windos下visual studio裝上visual assist後的補全。

 這裡需要兩個外掛程式—auto-complete和yasnippet。先安裝 auto-complete,下載後放到~/.emacs.d/lisps/emacs/install目錄中解壓(也可以用自己的目錄,注意修改路徑),然後進入解壓後的目錄,然後輸入make命令即可;下面安裝yasnippet,下載 後放到~/.emacs.d/lisps/emacs/install目錄,然後解壓即可;下面是幾句關於這兩個外掛程式的配置:

;;==========================================================;;載入cscope;;==========================================================(require 'xcscope);;==========================================================;;YASnippet的配置;;==========================================================;;太強大了,強大的模板功能(require 'yasnippet)    ;;not yasnippet-bundle(yas/initialize)(yas/load-directory "~/.emacs.d/lisps/_emacs/install/yasnippet-0.6.1c/snippets");;自動補全;;(require 'auto-complete-config);;(ac-config-default)

 (5)鍵綁定功能

         即設定emacs的快速鍵

        我的鍵綁定全部設定在cykbd.el檔案中,以下是部分內容包括編譯和調試

(global-set-key [f1] 'manual-entry)(global-set-key [C-f1] 'info );;f3為尋找字串,alt+f3關閉當前緩衝區(global-set-key [f3] 'grep-find)(global-set-key [M-f3] 'kill-this-buffer);;.emacs中設一個speedbar的快速鍵(global-set-key [(f4)] 'speedbar-get-focus);;ctrl-f4,啟用,ecb(global-set-key [C-f4] 'ecb-activate);;F5顯示/隱藏工具列 方便調試(global-set-key [f5] 'tool-bar-mode);;ctrl-F5顯示/隱藏功能表列 ;; M-x menu-bar-open(global-set-key [C-f5] 'menu-bar-mode)(global-set-key [f6] 'gdb);;  C-f7, 設定編譯命令; f7, 儲存所有檔案然後編譯當前視窗檔案(defun du-onekey-compile ()  "Save buffers and start compile"  (interactive)  (save-some-buffers t)  (switch-to-buffer-other-window "*compilation*")  (compile compile-command))


(6)其他很多搜集的點el擴充檔案均用cyexpand.el包含。不過其中有很多用不到的被我注掉了。如果不需要可以在.emacs中把(load "cyexpand.el")注掉。

  (7)我的設定檔中有一個addon.el,這個配置外掛程式可以將emacs的外觀變得更像IDE,但因實在太醜陋,所以我在.emacs把它注掉了。


如果使用我的設定檔 http://pan.baidu.com/share/link?shareid=4196458904&uk=3708780105

下載Emacs_setting.tar.gz,按照readme.txt指示即可,略有麻煩,可以細心摸索。將samuel_emacs重新命名為.emacs放到/home/yourusername/下

將_emacs.d.tar.gz解壓後重新命名為.emacs.d後放入/home/yourusername/下,其他外掛程式配置按照readme.txt


注意用不到的設定檔包含全部要注掉,不然emacs真的會像某些IDE一樣臃腫。相對來說vim配置成IDE 要簡單一點,吳垠大神曾經寫過一篇把vim配置乘IDE的文章,不過那個更複雜。





相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.