自已用emacs也算有点时间了,配置文件也完善了好多次。现在觉得比较成熟了,所以总结一下。也算作为备份,也希望可以给大家一些借鉴。
我的emacs配置主要分为两个部分。一个是主目录下的.emacs文件。一个是主目录下的.emacs.d文件夹。
第一部分(.emacs文件):
我的.emacs文件很小,只有几句话。主要是说明去×××配置问件,而不是直接在里面配置。因为我觉得emacs的配置文件会很多,如果都在.emacs文件里面配置,这个文件会很大,而且会显得比较乱。下面是我的.emacs文件:
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;location of additional packages
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- (setq my-dot-path "~/.emacs.d/") ;;设置 my-dot-path 的路径
- (setq my-site-el-path (concat my-dot-path "packages/")) ;; 设置路径, concat 为连接意思
- (add-to-list 'load-path my-site-el-path)
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;load all my settings
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- (setq my-el-path (concat my-dot-path "config/"))
- (setq my-private-el-path (concat my-dot-path "my_private_config/"))
- (mapc 'load (directory-files my-el-path t "\\.el\\'"))
- (mapc 'load (directory-files my-private-el-path t "\\.el\\'"))
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
这个文件的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
- (setq compile-command "gcc -g -std=c99 ");
- (global-font-lock-mode t);语法高亮
- (fset 'yes-or-no-p 'y-or-n-p);以 y/n代表 yes/no,可能你觉得不需要,呵呵。
- (display-time-mode 1);显示时间,格式如下
- (setq display-time-24hr-format t)
- (setq display-time-day-and-date t)
- (tool-bar-mode nil);去掉那个大大的工具栏
- (scroll-bar-mode nil);去掉滚动条,因为可以使用鼠标滚轮了 ^_^
- (mouse-avoidance-mode 'animate);光标靠近鼠标指针时,让鼠标指针自动让开,别挡住视线。很好玩阿,这个功能
- (setq mouse-yank-at-point t);支持中键粘贴
- (transient-mark-mode t);这个忘了,郁闷!
- (setq x-select-enable-clipboard t);支持emacs和外部程序的粘贴
- (setq frame-title-format "nyc@%b");在标题栏提示你目前在什么位置。你要把zhan改成自己的用户名
- (setq fill-column 130);默认显示 80列就换行
- (setq user-full-name "Ni Yanchun");;名字
- (setq user-mail-address "nyc_emacs@163.com");邮箱地址
- (setq default-directory "/Save_Data/programming/") ;设置打开文件缺省目录
- (setq column-number-mode t)
- (setq line-number-mode t)
- ;;显示行列号
- ;;ido的配置,这个可以使你在用C-x C-f打开文件的时候在后面有提示;
- ;;这里是直接打开了ido的支持,在emacs23中这个是自带的.
- (ido-mode t)
- (setq visible-bell t)
- ;;关闭烦人的出错时的提示声
- (setq inhibit-startup-message t)
- ;;关闭emacs启动时的画面
- (setq gnus-inhibit-startup-message t)
- ;;关闭gnus启动时的画面
- (setq kill-ring-max 200)
- ;;设置粘贴缓冲条目数量.用一个很大的kill ring(最多的记录个数). 这样防止我不小心删掉重要的东西
- (setq-default auto-fill-function 'do-auto-fill)
- ; Autofill in all modes;;
- ;(setq fill-column 120)
- ;;把 fill-column 设为 60. 这样的文字更好读
- (setq-default indent-tabs-mode nil)
- (setq tab-width 4)
- ;(setq tab-stop-list ())
- ;;不用 TAB 字符来indent, 这会引起很多奇怪的错误。编辑 Makefile 的时候也不用担心,因为 makefile-mode 会把 TAB 键设置成真正的 TAB 字符,并且加亮显示的。
- (setq sentence-end "\\([。!?]\\|……\\|[.?!][]\"')}]*\\($\\|[ \t]\\)\\)[ \t\n]*")
- (setq sentence-end-double-space nil)
- ;;设置 sentence-end 可以识别中文标点。不用在 fill 时在句号后插入两个空格。
- (setq enable-recursive-minibuffers t)
- ;;可以递归的使用 minibuffer
- (setq scroll-margin 3 scroll-conservatively 10000)
- ;;防止页面滚动时跳动, scroll-margin 3 可以在靠近屏幕边沿3行时就开始滚动,可以很好的看到上下文。
- (setq major-mode 'text-mode)
- ;(add-hook 'text-mode-hook 'turn-on-auto-fill)
- ;;设置缺省主模式是text,,并进入auto-fill次模式.而不是基本模式fundamental-mode
- (setq show-paren-mode t) ;;打开括号匹配显示模式
- (setq show-paren-style 'parenthesis)
- ;;括号匹配时可以高亮显示另外一边的括号,但光标不会烦人的跳到另一个括号处。
- (setq mouse-avoidance-mode 'animate)
- ;;光标靠近鼠标指针时,让鼠标指针自动让开,别挡住视线。
- (setq uniquify-buffer-name-style 'forward);;好像没起作用
- ;; 当有两个文件名相同的缓冲时,使用前缀的目录名做 buffer 名字,不用原来的foobar 形式。
- (setq auto-p_w_picpath-file-mode t)
- ;;让 Emacs 可以直接打开和显示图片。
- (auto-compression-mode 1)
- ;打开压缩文件时自动解压缩。
- (setq global-font-lock-mode t)
- ;;进行语法加亮。
- (setq-default kill-whole-line t)
- ;; 在行首 C-k 时,同时删除该行。
- (add-hook 'comint-output-filter-functions
- 'comint-watch-for-password-prompt)
- ;;当你在shell、telnet、w3m等模式下时,必然碰到过要输入密码的情况,此时加密显出你的密码
- (setq version-control t);;启用版本控制,即可以备份多次
- (setq kept-old-versions 2);;备份最原始的版本两次,及第一次编辑前的文档,和第二次编辑前的文档
- (setq kept-new-versions 1);;备份最新的版本1次,理解同上
- (setq delete-old-versions t);;删掉不属于以上3中版本的版本
- (setq backup-directory-alist '(("." . "~/backups")));;设置备份文件的路径
- (setq backup-by-copying t);;备份设置方法,直接拷贝
- ;; Emacs 中,改变文件时,默认都会产生备份文件(以 ~ 结尾的文件)。可以完全去掉
- ;; (并不可取),也可以制定备份的方式。这里采用的是,把所有的文件备份都放在一
- ;; 个固定的地方("~/backups")。对于每个备份文件,保留最原始的两个版本和最新的
- ;; 1个版本。并且备份的时候,备份文件是复本,而不是原件。
- (setq make-backup-files nil)
- ;; 设定不产生备份文件
- ;(setq auto-save-mode t)
- ;;自动保存模式
- (setq-default make-backup-files nil)
- ;; 不生成临时文件
- ;加入会话功能
- (require 'session)
- (add-hook 'after-init-hook 'session-initialize)
- (load "desktop")
- (desktop-save-mode)
- (global-set-key [f11] 'my-fullscreen)
- ;全屏
- (defun my-fullscreen ()
- (interactive)
- (x-send-client-message
- nil 0 nil "_NET_WM_STATE" 32
- '(2 "_NET_WM_STATE_FULLSCREEN" 0))
- )
- (defun my-default-font()
- (interactive)
- (set-frame-font "DejaVu Sans Mono:pixelsize=16:antialias=subpixel")
- (set-fontset-font "fontset-default"
- 'unicode '("Microsoft YaHei" . "unicode-bmp"))
- )
- (my-default-font)
- (add-to-list 'after-make-frame-functions
- (lambda (new-frame)
- (select-frame new-frame)
- (tool-bar-mode 0)
- (my-default-font)))
2, nyc-c.el
- (require 'cc-mode)
- (c-set-offset 'inline-open 0)
- (c-set-offset 'friend '-)
- (c-set-offset 'substatement-open 0)
- (setq auto-insert t)
- (setq auto-insert-query t)
- (add-hook 'find-file-hooks 'auto-insert)
- (setq auto-insert-directory "~/.emacs.d/auto-insert-template/")
- (define-auto-insert '("^build\\.xml\\'" . "Ant编译脚本") "build.xml")
- ;;;;我的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)
- ;;按键定义
- ; (define-key c-mode-base-map [(control \`)] 'hs-toggle-hiding)
- (define-key c-mode-base-map [(return)] 'newline-and-indent)
- ; (define-key c-mode-base-map [(f7)] 'compile)
- (define-key c-mode-base-map [(meta \`)] 'c-indent-command)
- ;; (define-key c-mode-base-map [(tab)] 'hippie-expand)
- (define-key c-mode-base-map [(tab)] 'my-indent-or-complete)
- ; (define-key c-mode-base-map [(meta ?/)] 'semantic-ia-complete-symbol-menu)
- ;;;;;注意一下,上面最后两行是代码自动补齐的快捷键。后面我会提到代码自动补齐。
- ;;预处理设置
- (setq c-macro-shrink-window-flag t)
- (setq c-macro-preprocessor "c")
- (setq c-macro-cppflags " ")
- (setq c-macro-prompt-flag t)
- (setq hs-minor-mode t)
- (setq abbrev-mode t)
- )
- (add-hook 'c-mode-common-hook 'my-c-mode-common-hook)
- ;;;;我的C++语言编辑策略
- (defun my-c++-mode-hook()
- (setq tab-width 4 indent-tabs-mode nil)
- (c-set-style "stroustrup")
- ;; (define-key c++-mode-map [f3] 'replace-regexp)
- )
3, nyc-autoclose.el
- (add-hook 'shell-mode-hook 'wcy-shell-mode-hook-func) ;;;每当我在 M-x shell 启动shell ,然后执行 exit 退出 shell 之后,buffer 并不自动关 闭,很不爽, 下面的指令,可以让其自动关闭。
- (defun wcy-shell-mode-hook-func ()
- (set-process-sentinel (get-buffer-process (current-buffer))
- #'wcy-shell-mode-kill-buffer-on-exit)
- )
- (defun wcy-shell-mode-kill-buffer-on-exit (process state)
- (message "%s" state)
- (if (or
- (string-match "exited abnormally with code.*" state)
- (string-match "finished" state))
- (kill-buffer (current-buffer))))
- (defun kill-buffer-when-shell-command-exit ()
- "Close current buffer when `shell-command' exit."
- (let ((process (ignore-errors (get-buffer-process (current-buffer)))))
- (when process
- (set-process-sentinel process
- (lambda (proc change)
- (when (string-match "\\(finished\\|exited\\)" change)
- (kill-buffer (process-buffer proc))))))))
- ;; 退出gdb的时候关闭gdb对应的buffer
- (add-hook 'gdb-mode-hook 'kill-buffer-when-shell-command-exit)
- ;; 退出term的时候关闭term对应的buffer
- (add-hook 'term-mode-hook 'kill-buffer-when-shell-command-exit)
- (defun kill-buffer-when-compile-success (process)
- "Close current buffer when `shell-command' exit."
- (set-process-sentinel process
- (lambda (proc change)
- (when (string-match "finished" change)
- (delete-windows-on (process-buffer proc))))))
- ;; 编译成功后自动关闭*compilation* buffer
- (add-hook 'compilation-start-hook 'kill-buffer-when-compile-success)
后面的都太长了,所以我打包传上来。供大家借鉴。
使用方法是:
1. 在主文件夹下面建立.emacs文件,内容如上面第一部分所示。
2. 将我上传的附件(下载地址:)直接解压到主目录即可(里面包括所以配置及其需要的软件包)。