自已用emacs也算有点时间了,配置文件也完善了好多次。现在觉得比较成熟了,所以总结一下。也算作为备份,也希望可以给大家一些借鉴。

         我的emacs配置主要分为两个部分。一个是主目录下的.emacs文件。一个是主目录下的.emacs.d文件夹。

第一部分(.emacs文件):

         我的.emacs文件很小,只有几句话。主要是说明去×××配置问件,而不是直接在里面配置。因为我觉得emacs的配置文件会很多,如果都在.emacs文件里面配置,这个文件会很大,而且会显得比较乱。下面是我的.emacs文件:

 
  
  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
  2.  
  3. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
  4. ;;location of additional packages 
  5. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
  6. (setq my-dot-path "~/.emacs.d/")  ;;设置 my-dot-path 的路径 
  7. (setq my-site-el-path (concat my-dot-path "packages/")) ;;  设置路径, concat 为连接意思 
  8. (add-to-list 'load-path my-site-el-path) 
  9.  
  10. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
  11. ;;load all my settings 
  12. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
  13. (setq my-el-path (concat my-dot-path "config/")) 
  14. (setq my-private-el-path (concat my-dot-path "my_private_config/")) 
  15. (mapc 'load (directory-files my-el-path t "\\.el\\'")) 
  16. (mapc 'load (directory-files my-private-el-path t "\\.el\\'")) 
  17.  
  18. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 

     这个文件的3~9行说明了我的扩展包的位置。以后你要是想添加一些包,比如说cedet啊之类的,直接放在~/.emacs.d/packages目录下即可

      10~17行主要指明配置文件的目录。以后如果想要配置emacs,只需要在~/.emacs.d/config或者~/.emacs.d/my_private_config目录下建立file.el文件即可。file可换成你喜欢的任意名字,只有后缀是el就可以。

      这样配置后,你可以在config目录下建立好多配置文件,不同方面的配置建立不同的文件,方便管理。

第二部分(.emacs.d文件夹):

       我的这个文件夹里面有好多东西。主要是packages文件夹和config文件夹。下面是我config文件夹里面的配置文件共11个:

1. nyc-basic.el

 
  
  1. (setq compile-command "gcc -g -std=c99   "); 
  2. (global-font-lock-mode t);语法高亮 
  3. (fset 'yes-or-no-p 'y-or-n-p);以 y/n代表 yes/no,可能你觉得不需要,呵呵。 
  4. (display-time-mode 1);显示时间,格式如下 
  5. (setq display-time-24hr-format t) 
  6. (setq display-time-day-and-date t) 
  7. (tool-bar-mode nil);去掉那个大大的工具栏 
  8. (scroll-bar-mode nil);去掉滚动条,因为可以使用鼠标滚轮了 ^_^ 
  9. (mouse-avoidance-mode 'animate);光标靠近鼠标指针时,让鼠标指针自动让开,别挡住视线。很好玩阿,这个功能 
  10. (setq mouse-yank-at-point t);支持中键粘贴 
  11. (transient-mark-mode t);这个忘了,郁闷! 
  12. (setq x-select-enable-clipboard t);支持emacs和外部程序的粘贴 
  13. (setq frame-title-format "nyc@%b");在标题栏提示你目前在什么位置。你要把zhan改成自己的用户名 
  14. (setq fill-column 130);默认显示 80列就换行 
  15. (setq user-full-name "Ni Yanchun");;名字 
  16. (setq user-mail-address "nyc_emacs@163.com");邮箱地址 
  17. (setq default-directory "/Save_Data/programming/")   ;设置打开文件缺省目录 
  18.  
  19. (setq column-number-mode t) 
  20. (setq line-number-mode t) 
  21. ;;显示行列号 
  22.  
  23. ;;ido的配置,这个可以使你在用C-x C-f打开文件的时候在后面有提示; 
  24. ;;这里是直接打开了ido的支持,在emacs23中这个是自带的. 
  25. (ido-mode t) 
  26.  
  27. (setq visible-bell t) 
  28. ;;关闭烦人的出错时的提示声 
  29. (setq inhibit-startup-message t) 
  30. ;;关闭emacs启动时的画面 
  31.  
  32. (setq gnus-inhibit-startup-message t) 
  33. ;;关闭gnus启动时的画面 
  34.  
  35. (setq kill-ring-max 200) 
  36. ;;设置粘贴缓冲条目数量.用一个很大的kill ring(最多的记录个数). 这样防止我不小心删掉重要的东西 
  37.  
  38. (setq-default auto-fill-function 'do-auto-fill) 
  39. ; Autofill in all modes;; 
  40. ;(setq fill-column 120) 
  41. ;;把 fill-column 设为 60. 这样的文字更好读 
  42.  
  43. (setq-default indent-tabs-mode nil) 
  44. (setq tab-width 4) 
  45. ;(setq tab-stop-list ()) 
  46. ;;不用 TAB 字符来indent, 这会引起很多奇怪的错误。编辑 Makefile 的时候也不用担心,因为 makefile-mode 会把 TAB 键设置成真正的 TAB 字符,并且加亮显示的。 
  47.  
  48. (setq sentence-end "\\([。!?]\\|……\\|[.?!][]\"')}]*\\($\\|[ \t]\\)\\)[ \t\n]*"
  49. (setq sentence-end-double-space nil) 
  50. ;;设置 sentence-end 可以识别中文标点。不用在 fill 时在句号后插入两个空格。 
  51.  
  52. (setq enable-recursive-minibuffers t) 
  53. ;;可以递归的使用 minibuffer 
  54.  
  55. (setq scroll-margin 3 scroll-conservatively 10000) 
  56. ;;防止页面滚动时跳动, scroll-margin 3 可以在靠近屏幕边沿3行时就开始滚动,可以很好的看到上下文。 
  57.  
  58. (setq major-mode 'text-mode) 
  59. ;(add-hook 'text-mode-hook 'turn-on-auto-fill) 
  60. ;;设置缺省主模式是text,,并进入auto-fill次模式.而不是基本模式fundamental-mode 
  61.  
  62. (setq show-paren-mode t) ;;打开括号匹配显示模式 
  63. (setq show-paren-style 'parenthesis) 
  64. ;;括号匹配时可以高亮显示另外一边的括号,但光标不会烦人的跳到另一个括号处。 
  65.  
  66. (setq mouse-avoidance-mode 'animate) 
  67. ;;光标靠近鼠标指针时,让鼠标指针自动让开,别挡住视线。 
  68.  
  69. (setq uniquify-buffer-name-style 'forward);;好像没起作用 
  70. ;; 当有两个文件名相同的缓冲时,使用前缀的目录名做 buffer 名字,不用原来的foobar 形式。 
  71.  
  72. (setq auto-p_w_picpath-file-mode t) 
  73. ;;让 Emacs 可以直接打开和显示图片。 
  74.  
  75. (auto-compression-mode 1) 
  76. ;打开压缩文件时自动解压缩。 
  77.  
  78. (setq global-font-lock-mode t) 
  79. ;;进行语法加亮。 
  80.  
  81. (setq-default kill-whole-line t) 
  82. ;; 在行首 C-k 时,同时删除该行。 
  83.  
  84. (add-hook 'comint-output-filter-functions 
  85. 'comint-watch-for-password-prompt) 
  86. ;;当你在shell、telnet、w3m等模式下时,必然碰到过要输入密码的情况,此时加密显出你的密码 
  87.  
  88.  (setq version-control t);;启用版本控制,即可以备份多次 
  89.  (setq kept-old-versions 2);;备份最原始的版本两次,及第一次编辑前的文档,和第二次编辑前的文档 
  90.  (setq kept-new-versions 1);;备份最新的版本1次,理解同上 
  91.  (setq delete-old-versions t);;删掉不属于以上3中版本的版本 
  92.  (setq backup-directory-alist '(("." . "~/backups")));;设置备份文件的路径 
  93.  (setq backup-by-copying t);;备份设置方法,直接拷贝 
  94. ;; Emacs 中,改变文件时,默认都会产生备份文件(以 ~ 结尾的文件)。可以完全去掉 
  95. ;; (并不可取),也可以制定备份的方式。这里采用的是,把所有的文件备份都放在一 
  96. ;; 个固定的地方("~/backups")。对于每个备份文件,保留最原始的两个版本和最新的 
  97. ;; 1个版本。并且备份的时候,备份文件是复本,而不是原件。 
  98.  
  99. (setq make-backup-files nil) 
  100. ;; 设定不产生备份文件 
  101.  
  102. ;(setq auto-save-mode t) 
  103. ;;自动保存模式 
  104.  
  105. (setq-default make-backup-files nil) 
  106. ;; 不生成临时文件 
  107.  
  108. ;加入会话功能 
  109. (require 'session) 
  110. (add-hook 'after-init-hook 'session-initialize) 
  111. (load "desktop"
  112. (desktop-save-mode)  
  113.  
  114.  
  115. (global-set-key [f11] 'my-fullscreen) 
  116.  
  117. ;全屏 
  118. (defun my-fullscreen () 
  119.   (interactive) 
  120.   (x-send-client-message 
  121.    nil 0 nil "_NET_WM_STATE" 32 
  122.    '(2 "_NET_WM_STATE_FULLSCREEN" 0)) 
  123.  
  124.  
  125. (defun my-default-font()                                                                                                                                        
  126.     (interactive)                                                                                                                                                  
  127.     (set-frame-font "DejaVu Sans Mono:pixelsize=16:antialias=subpixel")                                                                                          
  128.     (set-fontset-font "fontset-default"                                                                                                                            
  129.           'unicode '("Microsoft YaHei" . "unicode-bmp"))                                                                                                        
  130. )                                                                                                                                                              
  131. (my-default-font)                                                                                                                                              
  132. (add-to-list 'after-make-frame-functions                                                                                                                        
  133.     (lambda (new-frame)                                                                                                                                            
  134.         (select-frame new-frame)                                                                                                                                      
  135.         (tool-bar-mode  0)                                                                                                                                            
  136.         (my-default-font)))  

2, nyc-c.el

 
  
  1. (require 'cc-mode) 
  2. (c-set-offset 'inline-open 0) 
  3. (c-set-offset 'friend '-) 
  4. (c-set-offset 'substatement-open 0) 
  5.  
  6.  
  7. (setq auto-insert t) 
  8. (setq auto-insert-query t) 
  9. (add-hook 'find-file-hooks 'auto-insert
  10. (setq auto-insert-directory "~/.emacs.d/auto-insert-template/"
  11. (define-auto-insert '("^build\\.xml\\'" . "Ant编译脚本""build.xml"
  12.  
  13.  
  14. ;;;;我的C/C++语言编辑策略 
  15.   
  16. (defun my-c-mode-common-hook() 
  17.   (setq tab-width 4 indent-tabs-mode nil) 
  18.   ;;; hungry-delete and auto-newline 
  19.   (c-toggle-auto-hungry-state 1) 
  20.   ;;按键定义 
  21. ;  (define-key c-mode-base-map [(control \`)] 'hs-toggle-hiding) 
  22.   (define-key c-mode-base-map [(return)] 'newline-and-indent) 
  23.  ; (define-key c-mode-base-map [(f7)] 'compile) 
  24.   (define-key c-mode-base-map [(meta \`)] 'c-indent-command) 
  25.   ;;  (define-key c-mode-base-map [(tab)] 'hippie-expand) 
  26.   (define-key c-mode-base-map [(tab)] 'my-indent-or-complete) 
  27.  ; (define-key c-mode-base-map [(meta ?/)] 'semantic-ia-complete-symbol-menu) 
  28. ;;;;;注意一下,上面最后两行是代码自动补齐的快捷键。后面我会提到代码自动补齐。 
  29.  
  30.  
  31. ;;预处理设置 
  32. (setq c-macro-shrink-window-flag t) 
  33. (setq c-macro-preprocessor "c"
  34. (setq c-macro-cppflags " "
  35. (setq c-macro-prompt-flag t) 
  36. (setq hs-minor-mode t) 
  37. (setq abbrev-mode t) 
  38. (add-hook 'c-mode-common-hook 'my-c-mode-common-hook) 
  39.   
  40. ;;;;我的C++语言编辑策略 
  41. (defun my-c++-mode-hook() 
  42. (setq tab-width 4 indent-tabs-mode nil) 
  43. (c-set-style "stroustrup"
  44. ;;  (define-key c++-mode-map [f3] 'replace-regexp) 

3, nyc-autoclose.el

 
  
  1. (add-hook 'shell-mode-hook 'wcy-shell-mode-hook-func) ;;;每当我在 M-x shell 启动shell ,然后执行 exit 退出 shell 之后,buffer 并不自动关 闭,很不爽, 下面的指令,可以让其自动关闭。 
  2. (defun wcy-shell-mode-hook-func  () 
  3.   (set-process-sentinel (get-buffer-process (current-buffer)) 
  4.                             #'wcy-shell-mode-kill-buffer-on-exit) 
  5.       ) 
  6. (defun wcy-shell-mode-kill-buffer-on-exit (process state) 
  7.   (message "%s" state) 
  8.   (if (or 
  9.        (string-match "exited abnormally with code.*" state) 
  10.        (string-match "finished" state)) 
  11.       (kill-buffer (current-buffer)))) 
  12.  
  13.  
  14. (defun kill-buffer-when-shell-command-exit () 
  15.   "Close current buffer when `shell-command' exit." 
  16.   (let ((process (ignore-errors (get-buffer-process (current-buffer))))) 
  17.     (when process 
  18.       (set-process-sentinel process 
  19.                             (lambda (proc change) 
  20.                               (when (string-match "\\(finished\\|exited\\)" change) 
  21.                                 (kill-buffer (process-buffer proc)))))))) 
  22.   
  23. ;; 退出gdb的时候关闭gdb对应的buffer 
  24. (add-hook 'gdb-mode-hook 'kill-buffer-when-shell-command-exit) 
  25. ;; 退出term的时候关闭term对应的buffer 
  26. (add-hook 'term-mode-hook 'kill-buffer-when-shell-command-exit) 
  27.  
  28.  
  29. (defun kill-buffer-when-compile-success (process) 
  30.   "Close current buffer when `shell-command' exit." 
  31.   (set-process-sentinel process 
  32.                         (lambda (proc change) 
  33.                           (when (string-match "finished" change) 
  34.                             (delete-windows-on (process-buffer proc)))))) 
  35.   
  36. ;; 编译成功后自动关闭*compilation* buffer 
  37. (add-hook 'compilation-start-hook 'kill-buffer-when-compile-success) 

后面的都太长了,所以我打包传上来。供大家借鉴。

使用方法是:

     1. 在主文件夹下面建立.emacs文件,内容如上面第一部分所示。
     2. 将我上传的附件(下载地址:http://down.51cto.com/data/681536)直接解压到主目录即可(里面包括所以配置及其需要的软件包)。