emacs配置详解及C/C++IDE全功能配置演示(附配置文件)

我的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属性样式,后面的是设定的值。

        例如:

  1.                    (global-linum-mode 'linum-mode)  
  2.                    ;;auto show row-num  
  3.   
  4.                    (partial-completion-mode 1)  
  5.                    ;;use partial-completion  
  6.   
  7.                    (icomplete-mode 1)  
  8.                     ;;use complete-completion                   
  9.                    (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/")

           将别人写好的插件也可以添加到路径,例如

           

  1.             ;;;; 添加Emacs搜索路径  
  2.             (add-to-list 'load-path "~/.emacs.d/lisps/_emacs")  
  3.             (add-to-list 'load-path "~/.emacs.d/lisps/_emacs/install/ecb-2.40")  
  4.             (add-to-list 'load-path "~/.emacs.d/lisps/_emacs/codepilot")  
  5.             (add-to-list 'load-path "~/.emacs.d/lisps/_emacs/emacs-eclim")  
  6.             (add-to-list 'load-path "~/.emacs.d/lisps/_emacs/icicles")  
  7.             (add-to-list 'load-path "~/.emacs.d/lisps/_emacs/gnuserv")  
  8.             (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

  1. ;;=======================================================================  
  2. ;;Author:kevin_samuel(孙俊彦)  
  3. ;;Date:2013-7-30  
  4. ;;Update Date:2013-7-30  
  5. ;;=======================================================================  
  6.   
  7. ;;设置字体,默认是Monospace  
  8. ;;set-defalut-font  
  9. ;;(set-default-font "Monospace")  
  10. (set-default-font "-unknown-DejaVu Sans Mono-normal-normal-normal-*-13-*-*-*-m-0-iso10646-1")  ;;个人感觉Mono系字体适合程序(对普通青年)  


  1. ;;custom-set-variables  
  2. ;;set-color  
  3. (set-background-color "black")  ;;use black-ground  
  4. (set-foreground-color "white")  ;;use white-fore  
  5. (set-face-foreground 'region "green") ;;  
  6. (set-face-background 'region "blue") ;;  

  1. ;;===============================================================  
  2. ;;外观设置  
  3. ;;===============================================================  
  4. ;; 去掉滚动条  
  5. (set-scroll-bar-mode nil)  
  6. ;;关闭开启画面  
  7. (setq inhibit-startup-message t)  
  8. ;;禁用工具栏  
  9. (tool-bar-mode nil)  
  10. ;;禁用菜单栏  
  11. ;;(menu-bar-mode nil)  
  12.   
  13. ;;remove alert-bell  
  14. (mouse-wheel-mode t)  
  15.   
  16.   
  17. (global-linum-mode 'linum-mode)  
  18. ;;auto show row-num  
  19. ;;自动加载行号  
  20.   
  21. (partial-completion-mode 1)  
  22. ;;use partial-completion  
  23.   
  24. (icomplete-mode 1)  
  25. ;;use complete-completion  
  26.   
  27.   
  28. ;; 高亮当前行  
  29. ;;(require 'hl-line-settings)  
  30.   
  31. ;; 可以把光标由方块变成一个小长条  
  32. ;;(require 'bar-cursor)  
  33. ;;======================================================================  
  34.   
  35.   
  36.   
  37. ;;======================================================================  
  38. ;;状态栏  
  39. ;;======================================================================  
  40. ;;显示时间  
  41. ;;(display-time)  
  42. (display-time-mode 1);;启用时间显示设置,在minibuffer上面的那个杠上  
  43. (setq display-time-24hr-format t);;时间使用24小时制  
  44. (setq display-time-day-and-date t);;时间显示包括日期和具体时间  
  45. ;;(setq display-time-use-mail-icon t);;时间栏旁边启用邮件设置  
  46. ;;(setq display-time-interval 10);;时间的变化频率,单位多少来着?  
  47.   
  48.   
  49. ;;显示列号  
  50. (setq column-number-mode t)  
  51. ;;没列左边显示行号,按f3显示/隐藏行号  
  52. (require 'setnu)  
  53. (setnu-mode t)  
  54. ;;(global-set-key[f3] (quote setnu-mode))  
  55.   
  56. ;;显示标题栏 %f 缓冲区完整路径 %p 页面百分数 %l 行号  
  57. (setq frame-title-format "%f")  
  58.   
  59. ;;=======================================================================  
  60. ;;缓冲区  
  61. ;;=====================================================================  
  62. ;;设定行距  
  63. (setq default-line-spaceing 4)  
  64. ;;页宽  
  65. (setq default-fill-column 60)  
  66. ;;缺省模式 text-mode  
  67. ;;(setq default-major-mode 'text-mode)  
  68. ;;设置删除记录  
  69. (setq kill-ring-max 200)  
  70. ;;以空行结束  
  71. ;;(setq require-final-newline t)  
  72. ;;开启语法高亮。  
  73. (global-font-lock-mode 1)  
  74. ;;高亮显示区域选择  
  75. (transient-mark-mode t)  
  76. ;;页面平滑滚动,scroll-margin 3 靠近屏幕边沿3行开始滚动,正好可以看到上下文  
  77. ;;(setq scroll-margin 3 scroll-consrvatively 10000)  
  78. ;;高亮显示成对括号  
  79. (show-paren-mode t)  
  80. (setq show-paren-style 'parentheses)  
  81. ;;鼠标指针避光标  
  82. (mouse-avoidance-mode 'animate)  
  83. ;;粘贴于光标处,而不是鼠标指针处  
  84. (setq mouse-yank-at-point t)  
  85.   
  86. ;;=======================================================================  
  87. ;;回显区  
  88. ;;=======================================================================  
  89. ;;闪屏报警  
  90. (setq visible-bell t)  
  91. ;;使用y or n提问  
  92. (fset 'yes-or-no-p 'y-or-n-p)  
  93. ;;锁定行高  
  94. (setq resize-mini-windows nil)  
  95. ;;递归minibuffer  
  96. (setq enable-recursive-minibuffers t)  
  97. ;;当使用M-x COMMAND后,过1秒显示该COMMAND绑定的键  
  98. (setq suggest-key-bindings-1)   ;;默认?  
  99.   
  100. ;;======================================================================  
  101. ;;编辑器的设定  
  102. ;;======================================================================  
  103. ;;不产生备份文件  
  104. (setq make-backup-files nil)  
  105. ;;不生成临时文件  
  106. (setq-default make-backup-files nil)  
  107. ;;只渲染当前屏幕语法高亮,加快显示速度  
  108. (setq lazy-lock-defer-on-scrolling t)  
  109. ;;(setq font-lock-support-mode 'lazy-lock-mode)  
  110. (setq font-lock-maximum-decoration t)  
  111. ;;将错误信息显示在回显区  
  112. (condition-case err  
  113.     (progn  
  114.       (require 'xxx))  
  115.   (error  
  116.    (message "Can't load xxx-mode %s" (cdr err))))  
  117. ;;使用X剪贴板  
  118. (setq x-select-enable-clipboard t)  
  119. ;;设定剪贴板的内容格式 适应Firefox  
  120. (set-clipboard-coding-system 'ctext)  
  121.   
  122. ;;设置TAB宽度为4  
  123. (setq default-tab-width 4)   
  124. ;;以下设置缩进  
  125. ;;用tab缩进  
  126. (setq indent-tabs-mode t)  
  127. (setq c-indent-level 4)  
  128. (setq c-continued-statement-offset 4)  
  129. (setq c-brace-offset -4)  
  130. (setq c-argdecl-indent 4)  
  131. (setq c-label-offset -4)  
  132. (setq c-basic-offset 4)  
  133. (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中)加载配置文件包

      

  1. ;;;;读取脚本  
  2. ;;=========================================  
  3. ;;bind the key  
  4. (load "cykbd.el")  
  5.   
  6. ;;basic setting  
  7. (load "base.el")  
  8. ;;expand setting  
  9. (load "cyexpand.el")  
  10. ;;IDE frame setting  
  11. ;;(load "addon.el")  
  12.   
  13. ;;code setting为了编程的配置  
  14. (load "cycode.el")  
  15. ;;========================================  


     我的配置文件中有一个cycode.el,为什么叫cy code.el呢,因为此文件是陈杨所写。一下有cy前缀的都是。

      调试功能,在cycode.el中添加:

  1. ;;==============================================================  
  2. ;;gdb-UI配置  
  3. ;;==============================================================  
  4. (setq gdb-many-windows t)  
  5. (load-library "multi-gud.el")  
  6. (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/

如果使用,需要添加

  1. ;;==================================================  
  2. ;;cedet插件设置  
  3. ;;==================================================  
  4. (add-to-list 'load-path "~/.emacs.d/lisps/_emacs/install/cedet-1.0/speedbar")  
  5. (add-to-list 'load-path "~/.emacs.d/lisps/_emacs/install/cedet-1.0/eieio")  
  6. (add-to-list 'load-path "~/.emacs.d/lisps/_emacs/install/cedet-1.0/semantic")  
  7. ;; Load CEDET.,从cedet的INSTALL中复制过来的  
  8. ;; See cedet/common/cedet.info for configuration details.  

最后在配置文件中添加(在.emacs中或者其他自定义文件,我的是cycode.el)
  1. (load-file "~/.emacs.d/lisps/_emacs/install/cedet-1.0/common/cedet.el")  
  2.   
  3.   
  4. ;; Enable EDE (Project Management) features  
  5. (global-ede-mode 1)  
  6.   
  7. ;; Enable EDE for a pre-existing C++ project  
  8. ;; (ede-cpp-root-project "NAME" :file "~/myproject/Makefile")  
  9.   
  10.   
  11. ;; Enabling Semantic (code-parsing, smart completion) features  
  12. ;; Select one of the following:  
  13.   
  14. ;; * This enables the database and idle reparse engines  
  15. ;;(semantic-load-enable-minimum-features)  
  16.   
  17. ;; * This enables some tools useful for coding, such as summary mode  
  18. ;;   imenu support, and the semantic navigator  
  19. ;;(semantic-load-enable-code-helpers)  
  20.   
  21. ;; * This enables even more coding tools such as intellisense mode  
  22. ;;   decoration mode, and stickyfunc mode (plus regular code helpers)  
  23. ;; (semantic-load-enable-gaudy-code-helpers)  
  24.   
  25. ;; * This enables the use of Exuberent ctags if you have it installed.  
  26. ;;   If you use C++ templates or boost, you should NOT enable it.  
  27. ;; (semantic-load-enable-all-exuberent-ctags-support)  
  28. ;;   Or, use one of these two types of support.  
  29. ;;   Add support for new languges only via ctags.  
  30. ;; (semantic-load-enable-primary-exuberent-ctags-support)  
  31. ;;   Add support for using ctags as a backup parser.  
  32. ;; (semantic-load-enable-secondary-exuberent-ctags-support)  
  33.   
  34. ;; Enable SRecode (Template management) minor-mode.  
  35.  ;;(global-srecode-minor-mode 1)  
  36.    
  37.  ;;----------------------------------------------------------------------  
  38. (semantic-load-enable-minimum-features)  
  39. (semantic-load-enable-code-helpers)  
  40. ;;(semantic-load-enable-guady-code-helpers)  
  41. ;;(semantic-load-enable-excessive-code-helpers)  
  42. (semantic-load-enable-semantic-debugging-helpers)  
  43.   
  44. (global-ede-mode t)  
  45. ;;代码折叠  
  46. ;;(require 'semantic-tag-folding nil 'noerror)  
  47. (global-semantic-tag-folding-mode 1)  
  48. ;;折叠和打开整个buffer的所有代码  
  49. (define-key semantic-tag-folding-mode-map (kbd "C--") 'semantic-tag-folding-fold-all)  
  50. (define-key semantic-tag-folding-mode-map (kbd "C-=") 'semantic-tag-folding-show-all)  
  51. ;;折叠和打开单个buffer的所有代码  
  52. (define-key semantic-tag-folding-mode-map (kbd "C-_") 'semantic-tag-folding-fold-block)  
  53. (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目录下解压即可,这是我的目录,也可以自定义目录,不过要注意修改路径

  然后加上

  1. ;;==============================================================  
  2. ;;ecb配置  
  3. ;;==============================================================  
  4. ;;(require 'ecb)  
  5. ;;开启ecb用,M-x:ecb-activate  
  6. (require 'ecb-autoloads)  
  7. ;;自动启动ecb并且不显示每日提示  
  8. ;;(require 'ecb)  
  9. ;;(setq ecb-auto-activate t)  
  10. (setq ecb-tip-of-the-day nil)  
  11.   
  12. (require 'cc-mode)  
  13. (c-set-offset 'inline-open 0)  
  14. (c-set-offset 'friend '-)  
  15. (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目录,然后解压即可;下面是几句关于这两个插件的配置:

  1. ;;==========================================================  
  2. ;;加载cscope  
  3. ;;==========================================================  
  4. (require 'xcscope)  
  5.   
  6. ;;==========================================================  
  7. ;;YASnippet的配置  
  8. ;;==========================================================  
  9. ;;太强大了,强大的模板功能  
  10. (require 'yasnippet)    ;;not yasnippet-bundle  
  11. (yas/initialize)  
  12. (yas/load-directory "~/.emacs.d/lisps/_emacs/install/yasnippet-0.6.1c/snippets")  
  13.   
  14. ;;自动补全  
  15. ;;(require 'auto-complete-config)  
  16. ;;(ac-config-default)  

 (5)键绑定功能

         即设置emacs的快捷键

        我的键绑定全部设置在cykbd.el文件中,以下是部分内容包括编译和调试

  1. (global-set-key [f1] 'manual-entry)  
  2. (global-set-key [C-f1] 'info )  
  3.   
  4. ;;f3为查找字符串,alt+f3关闭当前缓冲区  
  5. (global-set-key [f3] 'grep-find)  
  6. (global-set-key [M-f3] 'kill-this-buffer)  
  7.   
  8. ;;.emacs中设一个speedbar的快捷键  
  9. (global-set-key [(f4)] 'speedbar-get-focus)  
  10. ;;ctrl-f4,激活,ecb  
  11. (global-set-key [C-f4] 'ecb-activate)  
  12.   
  13. ;;F5显示/隐藏工具栏 方便调试  
  14. (global-set-key [f5] 'tool-bar-mode)  
  15. ;;ctrl-F5显示/隐藏菜单栏 ;; M-x menu-bar-open  
  16. (global-set-key [C-f5] 'menu-bar-mode)  
  17.   
  18. (global-set-key [f6] 'gdb)  
  19.   
  20. ;;  C-f7, 设置编译命令; f7, 保存所有文件然后编译当前窗口文件  
  21. (defun du-onekey-compile ()  
  22.   "Save buffers and start compile"  
  23.   (interactive)  
  24.   (save-some-buffers t)  
  25.   (switch-to-buffer-other-window "*compilation*")  
  26.   (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的文章,不过那个更复杂。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值