我的.emacs.el
汇聚了一些大牛的配置,现在共享一下
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Filename: .emacs.el
;;
;; Description:
;;
;; Copyright (C) 2007, 貓の中秋
;; Created at: Fri Apr 6 22:27:32 2007
;; Author: 貓の中秋 <bigsnake_net(at)hotmail(dot)com>
;;
;; Modified by: 貓の中秋 <bigsnake_net(at)hotmail(dot)com>
;; Modified at: Mon Apr 9 20:30:46 2007
;;
;; Status: Experimental, do not distribute.
;; Update count: 2
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;{{{ 基本加载路径
;;基本加载路径
(add-to-list 'load-path "~/.emacs.d")
(load "~/.emacs.d/subdirs")
(setq byte-compile-warnings nil)
;;}}}
;;{{{ 字体,颜色等
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;颜色主题
(require 'color-theme)
(color-theme-initialize)
(if window-system (color-theme-dark-blue2))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(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.
'(default ((t (:stipple nil
:background "#132b4a"
:foreground "#ffffff"
:inverse-video nil
:box nil
:strike-through nil
:overline nil
:underline nil
:slant normal
:weight normal
:height 90
:width normal
:family "adobe-courier"))))
'(ecb-analyse-face ((((class color) (background dark))
(:inherit ecb-default-highlight-face
:background "magenta3"))))
'(ecb-direc×ies-general-face ((t nil)))
'(ecb-his×y-general-face ((t nil)))
'(ecb-method-non-semantic-face ((((class color) (background dark))
(:inherit ecb-methods-general-face
:foreground "brown1"))))
'(ecb-sources-general-face ((t nil)))
'(ecb-tag-header-face ((((class color) (background dark))
(:background "SeaGreen"))))
'(ido-only-match ((((class color))
(:foreground "Green" :weight ultra-bold))))
'(ido-subdir ((((min-colors 88) (class color))
(:foreground "orange" :weight bold))))
'(which-func ((((class color) (min-colors 88) (background dark))
(:foreground "Green")))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(if window-system nil (set-face-attribute 'default t :background "black"))
;;}}}
;;{{{ 舒服的界面设置
(custom-set-variables
;; 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.
'(ecb-layout-window-sizes nil)
'(ecb-options-version "2.32")
'(ecb-source-path (quote ("~")))
'(safe-local-variable-values
(quote ((folded-file . t) (folding-internal-margins)))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 界面设置
;字体设置
;; (create-fontset-from-fontset-spec
;; "-adobe-courier-medium-r-normal-*-12-*-*-*-*-*-fontset-sans")
;; (set-fontset-font
;; "fontset-default" nil
;; "-*-simsun-*-*-*-*-12-*-*-*-*-*-iso10646-1" nil 'prepend)
;; (set-default-font "fontset-sans")
;; (setq default-frame-alist
;; (append '((font . "fontset-sans")) default-frame-alist))
;关闭起动时的那个"开机画面"
(setq inhibit-startup-message t)
;关掉工具栏和滚动条
(tool-bar-mode -1)
(scroll-bar-mode -1)
;语法高亮
(require 'lazy-lock)
(setq lazy-lock-defer-on-scrolling t)
(setq font-lock-support-mode 'lazy-lock-mode)
(setq font-lock-maximum-decoration t)
(global-font-lock-mode t)
(require 'generic)
(require 'generic-x)
;在标题栏显示buffer的名字
(setq frame-title-format "emacs - %f")
;当有两个文件名相同的缓冲时使用前缀的目录名做 buffer名字
(setq uniquify-buffer-name-style 'forward)
;显示时间
(setq display-time-24hr-format t)
(setq display-time-interval 10)
(display-time)
;用yes/no代替y/n
(fset 'yes-or-no-p 'y-or-n-p)
;显示行列号
(line-number-mode t)
(column-number-mode t)
(require 'display-line-number)
(make-face 'my-display-line-number-face)
(copy-face 'default 'my-display-line-number-face)
(set-face-attribute 'my-display-line-number-face t
:foreground "cyan"
:background "#3c5473")
(setq display-line-number-face 'my-display-line-number-face)
(setq display-line-number-format "%3d ")
(global-set-key (kbd "s-n") 'display-line-number-mode)
;当行数超过一定数值不再显示行号
(setq line-number-display-limit 1000000)
;开关自动折行(Warp)
(setq truncate-partial-width-windows nil)
(setq-default truncate-lines t)
(global-set-key (kbd "s-w") 'toggle-truncate-lines)
;设置有用的个人信息
(setq user-full-name "貓の中秋")
(setq user-mail-address "bigsnake_net@hotmail.com")
;进入Shell
(global-set-key (kbd "s-s") 'shell)
;当使用M-x COMMAND后过1秒钟显示该 COMMAND 绑定的键
(setq suggest-key-bindings 1)
;;设置备份
(setq auto-save-interval 80)
(setq make-backup-files t)
(setq version-control t)
(setq kept-new-versions 3)
(setq kept-old-versions 1)
(setq delete-old-versions t)
(setq dired-kept-versions 1)
;;}}}
;;{{{ 编辑设置
;防止光标来回跳
(show-paren-mode t)
(setq show-paren-style 'parentheses)
;当光标在行尾上下移动的时候,始终保持在行尾。
(setq track-eol t)
;防止页面滚动时跳动
(setq scroll-margin 3
scroll-conservatively 10000)
;光标靠近鼠标指针时让鼠标指针自动让开
(mouse-avoidance-mode 'animate)
;中键粘贴
(setq mouse-yank-at-point t)
;支持emacs和外部程序的粘贴
(setq x-select-enable-clipboard t)
;可以直接打开和显示图片
(auto-image-file-mode t)
;缩进设置
(setq-default indent-tabs-mode nil)
(setq default-tab-width 8)
;设置 sentence-end 可以识别中文标点
(setq sentence-end "\\([。!?]\\|……\\|[.?!][]\"')}]*\\($\\|[ \t]\\)\\)[ \t\n]*")
;可以递归的使用 minibuffer。我经常需要这么做。
(setq enable-recursive-minibuffers t)
;按三次esc真烦
(global-set-key (kbd "C-<escape>") 'keyboard-escape-quit)
(setq sentence-end-double-space nil)
;大多数情况下,回车后是要缩进的
(global-set-key "\C-m" 'newline-and-indent)
(global-set-key (kbd "C-<return>") 'newline)
;Vim 的 o
(global-set-key (kbd "M-<return>") 'vi-open-next-line)
(defun vi-open-next-line (arg)
"Move to the next line (like vi) and then opens a line."
(interactive "p")
(end-of-line)
(open-line arg)
(next-line 1)
(indent-according-to-mode))
;启动进入text mode
(setq default-major-mode 'text-mode)
;redo
(require 'redo)
(global-set-key (kbd "C-+") 'redo)
;; ;;修正很不爽的翻页 见 http://ann77.stu.cdut.edu.cn/EmacsScrollPage.html
(require 'pager)
(global-set-key "\C-v" 'pager-page-down)
(global-set-key "\ev" 'pager-page-up)
;; 更强的搜索
;Always end searches at the beginning of the matching expression.
(defun bsn-goto-match-beginning ()
"Use with isearch hook to end search at first char of match."
(when isearch-forward (goto-char isearch-other-end)))
(add-hook 'isearch-mode-end-hook 'bsn-goto-match-beginning)
;C-s和C-r改成渐进正则表达式搜索
(global-set-key [(control s)] 'isearch-forward-regexp)
(global-set-key [(control r)] 'isearch-backward-regexp)
;;}}}
;;{{{ mark 相关
;高亮显示要拷贝的区域
(transient-mark-mode t)
;高亮矩形
(require 'rect-mark)
;mark 的键绑定
(global-set-key (kbd "s-SPC") 'set-mark-command)
(global-set-key (kbd "S-SPC") 'set-mark-command)
(global-set-key (kbd "C-x r s-SPC") 'rm-set-mark)
(global-set-key (kbd "C-x r S-SPC") 'rm-set-mark)
(global-set-key (kbd "C-x r C-x") 'rm-exchange-point-and-mark)
;;这个功能绑定在 C-c m 上。这个功能就是根据光标的所在位置,智能的选择一块区域,也就
;;是设置成为当前的 point 和 mark。这样就可以方便的拷贝或者剪切,或者交换他们的位
;;置。
;;如果当前光标在一个单词上,那么区域就是这个单词的开始和结尾分别。
;;如果当前光标在一个连字符上,那么就选择包含连字符的一个标识符。
;;这个两个的是有区别的,而且根据不同的 mode 的语法定义,连字符和单词的定义也不一样。
;;例如 C mode 下, abc_def_xxx , 如果光标停在 abc 上,那么就会选择 abc 这个单词。 如果
;;停在下划线上,那么就会选择 abc_def_xxx 。
;;如果当前光标在一个双引号,单引号,一个花括号,方括号,圆括号,小于号,或者大于号,
;;等等,那么就会选择他们对应的另一个括号之间的区域。 引号中的 escape 字符也是可以
;;自动识别的。嵌套关系也是可以识别的。这一点可以和 VIM 中的 % 的功能类比。
(defun wcy-mark-some-thing-at-point()
(interactive)
(let* ((from (point))
(a (mouse-start-end from from 1))
(start (car a))
(end (cadr a))
(goto-point (if (= from start )
end
start)))
(if (eq last-command 'wcy-mark-some-thing-at-point)
(progn
;; exchange mark and point
(goto-char (mark-marker))
(set-marker (mark-marker) from))
(push-mark (if (= goto-point start) end start) nil t)
(when (and (interactive-p) (null transient-mark-mode))
(goto-char (mark-marker))
(sit-for 0 500 nil))
(goto-char goto-point))))
(define-key global-map (kbd "s-m") 'wcy-mark-some-thing-at-point)
;; 高级的killing和yanking
;没有选择任何东西时复制/剪切整行
(defadvice kill-ring-save (before slickcopy activate compile)
"When called interactively with no active region, copy a single line instead."
(interactive
(if mark-active (list (region-beginning) (region-end))
(list (line-beginning-position)
(line-beginning-position 2)))))
(defadvice kill-region (before slickcut activate compile)
"When called interactively with no active region, kill a single line instead."
(interactive
(if mark-active (list (region-beginning) (region-end))
(list (line-beginning-position)
(line-beginning-position 2)))))
;移动整行的功能
;meta+箭头移动行
(defun move-line (n)
"Move the current line up or down by N lines."
(interactive "p")
(setq col (current-column))
(beginning-of-line) (setq start (point))
(end-of-line) (forward-char) (setq end (point))
(let ((line-text (delete-and-extract-region start end)))
(forward-line n)
(insert line-text)
;; res×e point to original column in moved line
(forward-line -1)
(forward-char col)))
(defun move-line-up (n)
"Move the current line up by N lines."
(interactive "p")
(move-line (if (null n) -1 (- n))))
(defun move-line-down (n)
"Move the current line down by N lines."
(interactive "p")
(move-line (if (null n) 1 n)))
(global-set-key (kbd "M-<up>") 'move-line-up)
(global-set-key (kbd "M-<down>") 'move-line-down)
;设置删除纪录
(setq kill-ring-max 200)
(require 'browse-kill-ring+)
(global-set-key (kbd "s-k") 'browse-kill-ring)
;;}}}
;;{{{ buffer 和 窗格
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;buffer 管理
;窗格切割控制
;数字参数用M+num 可以输入
(global-set-key (kbd "C-1") 'delete-other-windows)
(global-set-key (kbd "C-2") 'split-window-vertically)
(global-set-key (kbd "C-3") 'split-window-horizontally)
(global-set-key (kbd "C-4") 'delete-window)
; 按下 C-x k 立即关闭掉当前的 buffer
(global-set-key "\C-xk" 'kill-this-buffer)
;ido 和 ibuffer
(require 'ibuffer)
(global-set-key (kbd "C-x C-b") 'ibuffer)
(require 'ido)
(ido-mode t)
(setq ido-enable-tramp-completion t)
(setq ido-save-direc×y-list-file nil)
;tab栏
(require 'tabbar)
(tabbar-mode t)
(global-set-key (kbd "s-<up>") 'tabbar-backward-group)
(global-set-key (kbd "s-<down>") 'tabbar-forward-group)
(global-set-key (kbd "s-<left>") 'tabbar-backward)
(global-set-key (kbd "s-<right>") 'tabbar-forward)
;;窗格操作
;交换两个窗口内的 buffer
(defun transpose-windows (arg)
"Transpose the buffers shown in two windows."
(interactive "p")
(let ((selec× (if (>= arg 0) 'next-window 'previous-window)))
(while (/= arg 0)
(let ((this-win (window-buffer))
(next-win (window-buffer (funcall selec×))))
(set-window-buffer (selected-window) next-win)
(set-window-buffer (funcall selec×) this-win)
; (select-window (funcall selec×))) 注释掉这行,我想交换buffer但光标不动
)
(setq arg (if (plusp arg) (1- arg) (1+ arg))))))
(global-set-key (kbd "s-x") 'transpose-windows)
;在窗格移来移去
;; Windmove 是在窗口之间移动的很好用的命令。默认是用 Shift+上下左右键移动。
(require 'windmove)
(when (featurep 'windmove)
(global-set-key (kbd "S-<down>") 'windmove-down)
(global-set-key (kbd "S-<up>") 'windmove-up)
(global-set-key (kbd "S-<left>") 'windmove-left)
(global-set-key (kbd "S-<right>") 'windmove-right)
(windmove-default-keybindings))
;;}}}
;;{{{ dired
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;让dired 可以递归的拷贝和删除目录
(setq dired-recursive-copies 'top)
(setq dired-recursive-deletes 'top)
;这里以后将会有一大堆东西..占位
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;}}}
;;{{{ 编程设置
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq-default which-function-mode t)
; C/C++
(defun bsn-linux-c-mode()
(define-key c++-mode-map [return] 'newline-and-indent)
(define-key c-mode-map [return] 'newline-and-indent)
(interactive)
(require 'cc-mode)
(c-set-style "K&R")
;; (setq c-basic-offset 8)
(c-toggle-auto-newline t)
(c-toggle-hungry-state t)
(imenu-add-menubar-index)
(setq c-basic-offset 8)
(folding-mode t)
)
(add-hook 'c-mode-hook 'bsn-linux-c-mode)
(add-hook 'c++-mode-hook 'bsn-linux-c-mode)
; Pascal
(defun bsn-linux-pascal-mode()
(setq pascal-indent-level 8)
(setq pascal-case-indent 4)
(folding-mode t)
)
(add-hook 'pascal-mode-hook 'bsn-linux-pascal-mode)
;自动补全
(minibuffer-electric-default-mode t)
;启用部分补全功能,如输入M-x q r r相当于M-x query-replace-regexp
(partial-completion-mode t)
;在minibuffer里启用自动补全函数和变量
(icomplete-mode t)
;;(setq-default abbrev-mode t)
(autoload 'sena×-try-expand-semantic "sena×")
(setq hippie-expand-try-functions-list
'(
sena×-try-expand-semantic
try-expand-dabbrev
try-expand-dabbrev-visible
try-expand-dabbrev-all-buffers
try-expand-dabbrev-from-kill
try-complete-file-name-partially
try-complete-file-name
try-expand-all-abbrevs
try-expand-line
try-expand-list
try-expand-line-all-buffers
try-expand-list-all-buffers
try-expand-whole-kill))
(global-set-key (kbd "C-/") 'hippie-expand)
(global-set-key (kbd "M-/") 'semantic-ia-complete-symbol)
;;}}}
;;{{{ 一些插件
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;{{{ auto-header
;;auto-header,自动添加文件头
(require 'auto-header)
(setq header-full-name "貓の中秋")
(setq header-email-address "bigsnake_net(at)hotmail(dot)com")
(setq header-update-on-save '(filename
modified
;;counter
copyright
))
(setq header-field-list '(
filename
blank
description
blank
copyright
author
created
blank
modified_by
modified
blank
status
update
blank
))
;;如果header已存在,就更新update次數
(global-set-key (kbd "s-h") (lambda ()
(interactive)
(if (header-exists-p)
(header-update-count)
(header-make t))))
;;}}}
;;{{{ 编程专用的插件集合
;;xcscope
(require 'xcscope)
;;cedet
;;semantic setting
(setq semantic-load-turn-everything-on t)
(require 'semantic)
(require 'semantic-load)
(require 'semantic-ia)
(require 'semanticdb)
(setq-default semanticdb-project-roots
(list (expand-file-name "/")))
(setq-default semanticdb-persistent-path
(list (expand-file-name "~/.emacs.d/semanticdb")))
(setq-default semanticdb-default-save-direc×y
(expand-file-name "~/.emacs.d/semanticdb"))
(setq-default semanticdb-default-system-save-direc×y
(expand-file-name "~/.emacs.d/semanticdb"))
(global-semanticdb-minor-mode 1)
;;(add-hook 'speedbar-load-hook (lambda () (require 'semantic-sb)))
(require 'semantic-sb)
(add-hook 'semantic-init-hooks (lambda ()
(imenu-add-to-menubar "TOKENS")))
(setq-default semantic-idle-scheduler-idle-time 432000) ;不加这句cpu会飞到100%
;(add-hook 'ecb-activate-hook (lambda () (semantic-idle-summary-mode t)))
(require 'cogre)
(require 'speedbar)
(require 'ede)
(require 'eieio)
(require 'cedet)
;;ecb代码浏览器
(require 'ecb)
(setq ecb-tip-of-the-day nil)
(setq ecb-options-version "2.32")
;; (ecb-tree-truncate-line nil)
(setq ecb-truncate-long-names nil)
(setq ecb-windows-height 0.25)
(setq ecb-windows-width 0.25)
(global-set-key (kbd "<f12>") 'ecb-activate) ;;定义F12键为激活ecb
(global-set-key (kbd "C-<f12>") 'ecb-deactivate) ;;定义Ctrl+F12为停止ecb
;;}}}
;;{{{ folding setting <--like this
;;华丽的代码折叠
(require 'folding)
(folding-mode-add-find-file-hook)
(global-set-key (kbd "s-f f") 'folding-mode)
(defun bsn-enter-folding ()
(interactive)
(move-end-of-line nil)
(folding-shift-in)
(beginning-of-buffer)
)
(defun set-folding-mode-key-binding()
(local-set-key (kbd "s-f e") 'bsn-enter-folding)
(local-set-key (kbd "s-f q") 'folding-shift-out)
(local-set-key (kbd "s-f h") 'folding-hide-current-entry)
(local-set-key (kbd "s-f s") 'folding-show-current-entry)
(local-set-key (kbd "s-f b h") 'folding-whole-buffer)
(local-set-key (kbd "s-f b s") 'folding-open-buffer)
(local-set-key (kbd "s-f t h") 'folding-hide-current-subtree)
(local-set-key (kbd "s-f t s") 'folding-show-current-subtree)
(local-set-key (kbd "s-f r") 'folding-fold-region)
)
(add-hook 'folding-mode-hook 'set-folding-mode-key-binding)
;;}}}
;;{{{ 字典
;; 已废弃的字典方案
;; ;; 字典 http://www.cublog.cn/u/18537/showart_197033.html
;; (autoload 'dictionary-search "dictionary"
;; "Ask for a word and search it in all dictionaries" t)
;; (autoload 'dictionary-match-words "dictionary"
;; "Ask for a word and search all matching words in the dictionaries" t)
;; (autoload 'dictionary-lookup-definition "dictionary"
;; "Unconditionally lookup the word at point." t)
;; (autoload 'dictionary "dictionary"
;; "Create a new dictionary buffer" t)
;; (autoload 'dictionary-mouse-popup-matching-words "dictionary"
;; "Display entries matching the word at the cursor" t)
;; (autoload 'dictionary-popup-matching-words "dictionary"
;; "Display entries matching the word at the point" t)
;; (autoload 'dictionary-tooltip-mode "dictionary"
;; "Display tooltips for the current word" t)
;; (autoload 'global-dictionary-tooltip-mode "dictionary"
;; "Enable/disable dictionary-tooltip-mode for all buffers" t)
;; ;; key bindings
;; (global-set-key [mouse-3] 'dictionary-mouse-popup-matching-words)
;; ;(global-set-key "\C-c d s" 'dictionary-search)
;; ;(global-set-key "\C-c d m" 'dictionary-match-words)
;; (global-set-key (kbd "s-d") 'dictionary-lookup-definition)
;; (setq dictionary-server "localhost")
;; 基于sdcv (stardict cli) 的字典 http://code.google.com/p/sdcv-mode/
(require 'sdcv-mode)
(setq sdcv-dictionary-list '("朗道英汉字典5.0"))
(global-set-key (kbd "s-d") 'sdcv-search-current-word)
;;}}}
;;{{{ 缩写模式,emacs魔法
;; ensure abbrev mode is always on
(setq-default abbrev-mode t)
;; do not bug me about saving my abbreviations
(setq save-abbrevs nil)
(require 'msf-abbrev)
(setq msf-abbrev-verbose t) ;; optional
(setq msf-abbrev-root "~/.emacs.d/abbrevs")
(msf-abbrev-load)
(define-key fld-keymap (kbd "s-<return>") 'fld-cleanup-form-at-point)
(define-key fld-keymap (kbd "TAB") 'fld-next)
(define-key fld-keymap (kbd "S-TAB") 'fld-prev)
(define-key fld-keymap (kbd "<S-iso-lefttab>") 'fld-prev)
(define-key fld-choose-keymap (kbd "<menu>") 'fld-choose)
;;}}}
;最后加载..
;;{{{ 状态保存
;;session和desktop插件,需要放在最后
(require 'session)
(add-hook 'after-init-hook 'session-initialize)
(require 'desktop)
(desktop-save-mode 1)
;;}}}
;;}}}
|
