应朋友要求,共享一下我的Emacs配置文件。稍微整理了一下,还是有点乱,大家将就看吧。
我的配置文件参考了水木社区BBS和其他网站很多人的文章以及配置文件,由于是好多年来一点一点攒起来的,因此无法一一列出,请原谅。
从头开始一段一段贴吧。
几乎一天到晚面对着emacs,为了防止眼睛瞎掉,所以选个比较不刺眼的配色方案。
(require 'color-theme) ;;(color-theme-initialize) ;;(color-theme-tty-dark) (color-theme-comidia) ;;(color-theme-dark-laptop)
;; 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. '(browse-url-mozilla-program "firefox") '(case-fold-search-t nil) '(column-number-mode t) '(compilation-scroll-output t) '(compile-command "make") ;; '(current-language-environment "Chinese-GB") '(display-time-mode t) '(ecb-options-version "2.32") '(global-font-lock-mode t) '(show-paren-mode t) '(tab-width 4) '(tool-bar-mode nil) '(transient-mark-mode t)) (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. )
注意,这里并不是字体配置的全部内容,还有一部分在.Xdefaults里。
;;字体设定
(set-fontset-font
"fontset-default" nil
"-*-simsun-*-*-*-*-18-*-*-*-*-*-gb2312.1980-*" nil 'prepend)
(set-fontset-font
"fontset-courier" 'kana
"-*-simsun-*-*-*-*-18-*-*-*-*-*-gbk-0" nil 'prepend)
(set-fontset-font
"fontset-courier" 'han
"-*-simsun-*-*-*-*-18-*-*-*-*-*-gbk-0" nil 'prepend)
(set-fontset-font
"fontset-courier" 'cjk-misc
"-*-simsun-*-*-*-*-18-*-*-*-*-*-gbk-0" nil 'prepend)
(set-language-environment 'Chinese-GBK)
(set-selection-coding-system 'chinese-gbk)
(set-terminal-coding-system 'chinese-gbk)
(set-keyboard-coding-system 'chinese-gbk)
(set-language-environment 'Chinese-GBK)
(setq locale-coding-system 'chinese-gbk)
(setq current-language-environment "Chinese-GBK")
(set-selection-coding-system 'chinese-gbk)
(prefer-coding-system 'chinese-gbk)
(setq file-coding-system-alist
(list file-coding-system-alist
`(".*" chinese-gbk)))
(setq x-select-request-type '(UTF8_STRING COMPOUND_TEXT TEXT STRING))
;;;;以下是我的快捷键设置 ;; ----------------------- Short Cut ------------------------- (global-set-key [(meta g)] 'goto-line) ;;(global-set-key [(meta ?/)] 'hippie-expand) ;; F12 t 从当前缓冲区建立任务 (global-set-key (kbd "<f12> t") 'planner-create-task-from-buffer) ;; F12 g 切换到当日的任务 ;;(global-set-key (kbd "<f12> g") 'planner-goto-today) (global-set-key (kbd "<f12> g") 'planner-goto-today) (global-set-key (kbd "<f12> p") 'plan) ;; F12 r 添加当前备忘录 (global-set-key (kbd "<f12> r") 'remember) ;; F12 c 切换到日历 (global-set-key (kbd "<f12> c") 'calendar) ;;;F2:进入wiki-mode模式 (global-set-key [(f2)] 'emacs-wiki-find-file) ;;;F3:切换到dired模式 (global-set-key [(f3)] 'dired) ;;;F4:切换到shell模式 (global-set-key [(f4)] 'ansi-term) ;;;F5:打开speedbar (global-set-key [(f5)] 'speedbar) ;;;;F7:调用compile (global-set-key (kbd "<f7>") 'compile) ;;;Alt+s : 让speedbar获得焦点 (global-set-key (kbd "M-s") 'speedbar-get-focus) ;;;F9:列举我的书签 (global-set-key (kbd "<f9>") 'list-bookmarks) ;;;F10:添加当前页到书签中 (global-set-key [(f10)] 'bookmark-set) ;;;F12 u 更新当前版本 (global-set-key (kbd "<f12> u") 'vc-next-action) ;;------------------------End of Short Cut ---------------------
cedet的全称是Collection of Emacs Development Environment Tools
;;;;模板文件目录
(setq template-home-directory "~/lib/templates")
;;;;导入CEDET的各个插件
;; ---------------------------------------
;; Load CEDET
(load-file "~/lib/emacs-lisp/cedet-1.0pre3/common/cedet.el")
;; Enabling various SEMANTIC minor modes. See semantic/INSTALL for more ideas.
;; Select one of the following
(semantic-load-enable-code-helpers)
;; (semantic-load-enable-guady-code-helpers)
;; (semantic-load-enable-excessive-code-helpers)
;; Enable this if you develop in semantic, or develop grammars
;; (semantic-load-enable-semantic-debugging-helpers)
;; ---------------------------------------
;;;; 配置 Emacs Code Browser
(add-to-list 'load-path
"/home/caole/lib/emacs-lisp/ecb-2.32")
(require 'ecb)
;;;;配置Sementic的检索范围
(setq semanticdb-project-roots
(list
(expand-file-name "/")))
;;;; 显示行号: (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 inhibit-startup-message t) ;;;;设置大的kill ring (setq kill-ring-max 150)
;;;;备份策略
(setq backup-directory-alist '(("" . "~/backup/emacs/backup")))
(setq-default make-backup-file t)
(setq make-backup-file t)
(setq make-backup-files t)
(setq version-control t)
(setq kept-old-versions 2)
(setq kept-new-versions 10)
(setq delete-old-versions t)
;;;;自动补齐策略
(defun my-indent-or-complete ()
(interactive)
(if (looking-at "\\>")
(hippie-expand nil)
(indent-for-tab-command))
)
(global-set-key [(control tab)] 'my-indent-or-complete)
(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
)
)
;;;; CC-mode配置 http://cc-mode.sourceforge.net/
(require 'cc-mode)
(c-set-offset 'inline-open 0)
(c-set-offset 'friend '-)
(c-set-offset 'substatement-open 0)
;;;;根据后缀判断所用的mode
;;;;注意:我在这里把.h关联到了c++-mode
(setq auto-mode-alist
(append '(("\\.h$" . c++-mode)) auto-mode-alist))
;;;;我的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 [(f8)] 'ff-get-other-file)
(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 "cpp")
(setq c-macro-cppflags " ")
(setq c-macro-prompt-flag t)
(setq hs-minor-mode t)
(setq abbrev-mode t)
(setq tab-width 4 indent-tabs-mode nil)
)
(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)
)
(add-hook 'c++-mode-hook 'my-c++-mode-hook)
;;;;C/C++语言启动时自动加载semantic对/usr/include的索引数据库
(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")))))
;;;;我的Java语言编辑策略
(defun my-java-mode-hook()
(setq tab-width 4 indent-tabs-mode nil)
)
(add-hook 'java-mode-hook 'my-java-mode-hook)
;;;; Python Mode设置
(add-to-list 'load-path "/home/caole/lib/emacs-lisp/python-mode-1.0")
(require 'python-mode)
;;(require 'pycomplete)
(require 'doctest-mode)
;;;; 注释配置
(load-file "/home/caole/lib/emacs-lisp/gnome-doc.el")
;;;;我的Emacs Wiki配置
;; ------------------------------ WIKI --------------------------
(add-to-list 'load-path
"/home/caole/lib/emacs-lisp/emacs-wiki-2.70")
(add-to-list 'load-path "/home/caole/lib/emacs-lisp/")
(require 'emacs-wiki)
(require 'emacs-wiki-menu)
(require 'emacs-wiki-srctag)
;;指定Wiki工作目录
(setq emacs-wiki-directories '("~/document/wiki/diary"))
;;指定项目及工作目录
(setq emacs-wiki-projects
`(("default" . ((emacs-wiki-directories . ("~/document/wiki/"))))
("default" . ((fill-column .65)
(emacs-wiki-directories . ("~/document/wiki/diary"))))
("diary" . ((fill-column .65)
(emacs-wiki-directories . ("~/document/wiki/diary"))))
("emacs" . ((fill-column . 65)
(emacs-wiki-directories . ("~/document/wiki/diary"))))
("linux" . ((fill-column . 65)
(emacs-wiki-directories . ("~/document/wiki/diary"))))))
;;wiki目录下所有文件都会出现在publish目录中
(setq emacs-wiki-publishing-directory "publish")
;;指定publish工作目录
(setq emacs-wiki-publishing-directory "~/document/publish")
;;css文件应该放在publish目录中,
(setq emacs-wiki-style-sheet "<link rel=\"stylesheet\" type=\"text/css\" href=\"../css/style.css\">")
;;在wiki-directory下必须有一个emacs-wiki-home-page所指定名字的文件,
;;默认是<nowiki>WelcomePage</nowiki>,才能在生成的html文件里才会出现形如"Home/Index"的
;;样式,这里改为Home。只要在wiki的工作目录下有这样一个文件作为首页即可。
(setq emacs-wiki-home-page "Home")
;;中文设置
(setq emacs-wiki-meta-content-coding "gbk")
(setq emacs-wiki-charset-default "gbk")
(setq emacs-wiki-coding-default 'gbk)
;;维护设置
(setq emacs-wiki-inline-relative-to 'emacs-wiki-publishing-directory)
(setq emacs-wiki-anchor-on-word nil)
(setq emacs-wiki-maintainer "mailto:caole82@gmail.com")
(setq emacs-wiki-table-attributes "border=\"1\" cellpadding=\"1\"")
(add-hook 'emacs-wiki-mode-hook
(lambda ()
(define-key emacs-wiki-mode-map (kbd "C-c C-h") 'emacs-wiki-preview-html)
;;C-c C-h 预览HTML页面
(define-key emacs-wiki-mode-map (kbd "C-c C-c") 'emacs-wiki-preview-source)))
;;C-c C-c 预览wiki代码
;;指定emacs wiki 导航菜单
(setq emacs-wiki-menu-factory 'emacs-wiki-menu-make-from-projects)
(defun emacs-wiki-preview-source ()
(interactive)
(emacs-wiki-publish-this-page)
(find-file (emacs-wiki-published-file)))
(defun emacs-wiki-preview-html ()
(interactive)
(emacs-wiki-publish-this-page)
(browse-url (emacs-wiki-published-file)))
(add-hook 'emacs-wiki-mode-hook
(lambda ()
(define-key emacs-wiki-mode-map (kbd "C-c C-h") 'emacs-wiki-preview-html)
(define-key emacs-wiki-mode-map (kbd "C-c C-c") 'emacs-wiki-preview-source)))
(defun emacs-wiki-preview-source ()
(interactive)
(emacs-wiki-publish-this-page)
(find-file (emacs-wiki-published-file)))
(defun emacs-wiki-preview-html ()
(interactive)
(emacs-wiki-publish-this-page)
(browse-url (emacs-wiki-published-file)))
(setq emacs-wiki-index-page "./index.html")
;; ----------------------- END OF WIKI -----------------------------
拿Emacs做Todo和Remember之类的工具还是非常好用的。
;;;; 我的Planner 配置
(add-to-list 'load-path
"/home/caole/lib/emacs-lisp/planner")
(require 'planner)
(setq planner-publishing-directory "~/document/wiki/diary/plan")
(planner-calendar-insinuate)
(setq planner-calendar-show-planner-files t)
;;;; 我的remember设置
(add-to-list 'load-path
"/home/caole/lib/emacs-lisp/remember")
(require 'remember-planner)
(setq remember-handler-functions '(remember-planner-append))
(setq remember-annotation-functions planner-annotation-functions)
一股脑都贴上来吧。
;;;;配置psvn (add-to-list 'load-path "/home/caole/lib/emacs-lisp") (require 'psvn) ;;;;配置Semantic分析文件的目录 (setq semanticdb-default-save-directory (expand-file-name "/home/caole/backup/emacs/semantic.cache/semanticdb")) ;;;;编译elisp文件 ;;(byte-recompile-directory "/home/caole/lib/emacs-lisp/" 0 t) ;;;;将C-x C-b进入的Buffer列表改为ibuffer,获得和dired类似的操作界面 (add-to-list 'load-path "/home/caole/lib/emacs-lisp") (require 'ibuffer) (global-set-key (kbd "C-x C-b") 'ibuffer) ;;;;保存所有上次关闭的信息 (add-to-list 'load-path "/home/caole/lib/emacs-lisp") (require 'session) (add-hook 'after-init-hook 'session-initialize) ;;;;给Emacs添加Tab功能 (add-to-list 'load-path "/home/caole/lib/emacs-lisp") (require 'tabbar) (tabbar-mode) (global-set-key (kbd "M-[") 'tabbar-backward-group) (global-set-key (kbd "M-]") 'tabbar-forward-group) (global-set-key (kbd "M-p") 'tabbar-backward-tab) (global-set-key (kbd "M-n") 'tabbar-forward-tab) ;;;;导入HTML (add-to-list 'load-path "/home/caole/lib/emacs-lisp") (require 'htmlize) ;;;;光标靠近鼠标指针时让鼠标指针自己闪开 ;;(mouse-avoidance-mode 'animate) ;;;;修改标题栏,显示buffer的名字 (setq frame-title-format "%b") ;;;;启动Emacs Server (server-start) ;;;;每次进入Emacs即显式Plan ;;;;(plan) ;;;;高亮当前行 ;;(require 'hl-line) ;;(global-hl-line-mode t) ;;;;向左右滚动的命令激活:C-x < 和 C-x > (put 'scroll-left 'disabled nil) ;;配置一下shell的颜色 ;;(autoload 'ansi-color-for-comint-mode-on "ansi-color" nil t) ;;(add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on) ;;(setq ansi-color-for-comint-mode t) ;;;;退出Emacs时保存所有正在编辑的文档 (load "desktop") (desktop-save-mode) (desktop-read)