;##########################################################################
; Emacs基本信息设置
;;##########################################################################
;(setq server-auth-dir "D:\21_emacs")
;(setq server-name "emacs-server-file")
;(server-start)
;;Emacs路径相关配置
;(setenv "HOME" "D:\21_emacs")
;(setq default-directory "~/")
;(setenv "PATH" "d:/emacs-24.3/bin")
;; 对exec-path和PATH的处理
;;(load-file "~/.emacs.d/path-set/path-set.el")
;;设置个人信息
(setq user-full-name "mutou")
(setq user-mail-address "muhongzhang@gmail.com")
;;##########################################################################
;; Emacs窗口配置相关
;;##########################################################################
;; 设置标题栏
(setq frame-title-format "mutou")
;;关闭emacs启动时的画面
(setq inhibit-startup-message t)
;;关闭gnus启动时的画面
(setq gnus-inhibit-startup-messge t)
;;关闭出错时的提示声
;(setq visible-bell t)
;;启动自动最大化(数据自己调整,注意格式,如(top . 0),圆点前后都要留有空格)
(setq initial-frame-alist '((top . 0) (left . 0) (width . 120) (height . 52)))
(setq default-frame-alist '((width .120) (height . 52)))
;;不要工具条
(tool-bar-mode -1)
;;不要菜单条
;(menu-bar-mode -0)
;; 去掉滚动条
(scroll-bar-mode -1)
;;显示行列号
(setq column-number-mode t)
(setq line-number-mode t)
(global-linum-mode t)
;;把 fill-column 设为 120. 这样的文字更好读
(setq default-fill-column 120)
;;光标靠近鼠标指针时,让鼠标指针自动让开,别挡住视线
;(setq mouse-avoidance-mode 'animate)
;; 显示时间设置
(display-time-mode 1);;启用时间显示设置,在minibuffer上面的那个杠上
(setq display-time-24hr-format t);;时间使用24小时制
(setq display-time-day-and-date t);;时间显示包括日期和具体时间
(setq display-time-use-mail-icon t);;时间栏旁边启用邮件设置
(setq display-time-interval 30);;时间的变化频率,单位
;;防止页面滚动时跳动
;;scroll-margin 2 可以在靠近屏幕边沿3行时就开始滚动
;;scroll-step 1 设置为每次翻滚一行,可以使页面更连续
(setq scroll-step 1 scroll-margin 2 scroll-conservatively 10000)
;;鼠标滚轮,默认的滚动太快,这里改为3行
(defun up-slightly () (interactive) (scroll-up 3))
(defun down-slightly () (interactive) (scroll-down 3))
(global-set-key [mouse-4] 'down-slightly)
(global-set-key [mouse-5] 'up-slightly)
;;当光标在行尾上下移动的时候,始终保持在行尾
(setq track-eol t)
;;##########################################################################
;; 操作习惯设置
;;##########################################################################
;;改变Emacs固执的要你回答yes的行为。按 y 或空格键表示 yes,n 表示 no
(fset 'yes-or-no-p 'y-or-n-p)
;; 括号匹配高亮
(show-paren-mode t)
;;进行语法加亮。
(setq global-font-lock-mode t)
;设置默认字体(默认字体用Courier New)
;25版本如果打开的文件中带中文就会特别卡,改为宋体后使用C-v翻页仍然有点卡顿,改为黑体雅黑感觉就不卡了)
(set-default-font "新宋体-10")
;;(set-default-font "微软雅黑-10")
;;(set-default-font "10x20")
;;(set-default-font "STHeiti-10")
;;(set-default-font "Droid Sans Mono-10")
;;高亮当前行
(global-hl-line-mode 1)
;;淡绿色,适合无背景颜色
;;(set-face-background 'hl-line "#90EE90")
;;(set-face-background 'hl-line "#7CFC00") ;;草坪绿
;;(set-face-background 'hl-line "#3e4446") ;;灰黑色
(set-face-background 'hl-line "#FFFFE0") ;;浅黄
(set-face-foreground 'highlight nil)
;;颜色相关
;(load-file "~/.emacs.d/color-theme/my-color-theme.el")
;;设置粘贴缓冲条目数量.用一个很大的kill ring(最多的记录个数). 这样防止我不小心删掉重要的东西
(setq kill-ring-max 100)
;;设置打开文件的缺省路径
(setq default-directory "c:/")
;;长Emacs可以直接打开和显示图片
(setq auto-image-file-mode t)
;;当有两个文件相同的缓存时,使用前缀的目录名称buffer名字,不用原来的foobar形式
(setq uniquify-buffer-name-style 'forward)
;;颜色主题
(add-to-list 'custom-theme-load-path "~/.emacs.d/themes")
;(load-theme 'spolsky t)
;(load-theme 'sublime t)
;(color-theme-sublime)
;;设置中文语言环境
;;(set-language-environment 'Chinese-GB)
;;写文件的编码方式
;;(set-buffer-file-coding-system 'gb2312)
(set-buffer-file-coding-system 'utf-8)
;;终端方式的编码方式
(set-terminal-coding-system 'utf-8)
;;键盘输入的编码方式
;;(set-keyboard-coding-system 'gb2312)
(set-keyboard-coding-system 'utf-8)
;;读取或写入文件名的编码方式
(setq file-name-coding-system 'utf-8)
;;打开就启用text模式
(setq default-major-mode 'text-mode)
;;高亮显示选中的区域
(transient-mark-mode t)
;;可以递归的使用 minibuffer
(setq enable-recursive-minibuffers t)
;;org-mode自动换行
(add-hook 'org-mode-hook (lambda () (setq truncate-lines nil)))
;;ido的配置,这个可以使你在用C-x C-f打开文件的时候在后面有提示;
;;这里是直接打开了ido的支持,在emacs23中这个是自带的.
(ido-mode t)
(setq ido-save-directory-list-file nil)
;;ido模式中不保存目录列表,解决退出Emacs时ido要询问编码的问题。
;;不用TAB字符来indent, 这会引起很多奇怪的错误。编辑Makefile的时候也不用担心,因为makefile-mode会把TAB键设置成真正的TAB字符,并且加亮显示的。
(setq-default indent-tabs-mode nil)
(setq default-tab-width 4);;tab键为4个字符宽度
(setq tab-stop-list ())
;打开压缩文件时自动解压缩。
;(auto-compression-mode 1)
;;关闭自动保存 当前buffer关闭
(setq auto-save-default nil)
(setq auto-save-mode nil)
;;不生成临时文件
(setq-default make-backup-files nil)
;;设定不产生备份文件
(setq make-backup-files nil)
;;使用鼠标中键可以粘贴
;;(setq x-select-enable-clipboard t)
;;(setq mouse-yank-at-point t)
;;自动的在文件末增加一新行
(setq require-final-newline t)
(setq track-eol t)
;; 当浏览 man page 时,直接跳转到man buffer
(setq Man-notify-method 'pushy)
;;设置一下备份时的版本控制,这样更加安全。
(setq version-control t)
(setq kept-new-versions 3)
(setq delete-old-versions t)
(setq kept-old-versions 2)
(setq dired-kept-versions 1)
;;光标显示为一竖线
;;(setq-default cursor-type 'bar)
;;是用aspell程序作为Emacs的拼写检查成学
(setq-default ispell-program-name "aspell")
;;使用narrow功能时的一个设置
(put 'narrow-to-region 'disabled nil)
;;启动Emacs自动设置为两个窗口(上下各一个)
;;(split-window-vertically)
;;==========字体解码优先顺序===========
;;从王垠那拷过来的,不用怎么再改吧。
;;(setq font-encoding-alist
;;(append '(("MuleTibetan-0" (tibetan . 0))
;;("GB2312" (chinese-gb2312 . 0))
;;("JISX0208" (japanese-jisx0208 . 0))
;;("JISX0212" (japanese-jisx0212 . 0))
;;("VISCII" (vietnamese-viscii-lower . 0))
;;("KSC5601" (korean-ksc5601 . 0))
;;("MuleArabic-0" (arabic-digit . 0))
;;("MuleArabic-1" (arabic-1-column . 0))
;;("MuleArabic-2" (arabic-2-column . 0))) font-encoding-alist))
;;约会提醒
(setq appt-issue-message t)
;; 设置时间戳,标识出最后一次保存文件的时间。
;;(setq time-stamp-active t)
;;(setq time-stamp-warn-inactive t)
;;(setq time-stamp-format "%:y-%02m-%02d %3a %02H:%02M:%02S mutou")
;;##########################################################################
;; 键盘绑定
;;##########################################################################
;;设置C-/为undo,M-/为set-mark(默认已经设置了)
;(global-set-key (kbd "C-/") 'undo)
;;在行首C-k时,同时删除该行。
(setq-default kill-whole-line t)
;;设置home键指向buffer开头,end键指向buffer结尾
(global-set-key [home] 'beginning-of-buffer)
(global-set-key [end] 'end-of-buffer)
(global-set-key (kbd "C-x g") 'beginning-of-buffer)
(global-set-key (kbd "C-x C-g") 'end-of-buffer)
;;设置M-g为goto-line
(global-set-key (kbd "M-g") 'goto-line)
;;取消control+space键设为mark
;;(global-set-key (kbd "C-SPC") 'nil)
;;用来set-mark
;;(global-set-key (kbd "C-x C-2") 'set-mark-command)
;;window jump
;(global-set-key (kbd "s-k") 'windmove-up)
;(global-set-key (kbd "s-j") 'windmove-down)
;(global-set-key (kbd "s-h") 'windmove-left)
;(global-set-key (kbd "s-l") 'windmove-right)
;;F11全屏(默认配置)
;;F12最大化设置(不好使) //FIXME
;(global-set-key [F12] 'my-maximized)
;(defun my-maximized ()
;(interactive)
;(x-send-client-message nil 0 nil "_NET_WM_STATE" 32 '(2 "_NET_WM_STATE_MAXIMIZED_HORZ" 0))
;(x-send-client-message nil 0 nil "_NET_WM_STATE" 32 '(2 "_NET_WM_STATE_MAXIMIZED_VERT" 0))
;)
;; 分2-4屏(没用过更大的显示器了),绑定M-0到'other-window
(defun smart-split ()
(interactive)
(delete-other-windows)
(split-window-horizontally) ;; 最少分两屏
(other-window 1)
(switch-to-next-buffer)
(other-window 1)
(unless (< (window-width) 120) ;; 240+ 三屏
(split-window-horizontally)
(balance-windows)
(switch-to-next-buffer)
(other-window 1))
(unless (< (window-width) 100) ;; 300+ 四屏
(split-window-horizontally)
(balance-windows)
(switch-to-next-buffer)
(other-window 1))
(recenter))
;(progn
;(keydef "M-0" other-window)
;(keydef "M-4" kill-this-buffer)
;(keydef "M-1" delete-other-windows)
;(keydef "M-2" smart-split)
;(keydef "M-3" split-window-horizontally))
(global-set-key [(control tab)] 'other-window)
;; "C-,"设为屏幕左移命令
;;(global-set-key (kbd "C-,") 'scroll-left)
;; "C-."设为屏幕右移命令
;;(global-set-key (kbd "C-.") 'scroll-right)
;;设置F11快捷键指定Emacs 的日历系统
;;(global-set-key [f11] 'calendar)
;;设置F12 快速察看日程安排
;;(global-set-key [f12] 'list-bookmarks)
(global-set-key [(meta p)] 'scroll-up-line)
(global-set-key [(meta n)] 'scroll-down-line)
;;--------默认设置快捷键--------------
;;预编译快捷键
;;C-c C-p
;;C-c C-n
;;C-c C-u (在#elif间跳转)
;;在上下层括号之间跳转
;;C-M-d
;;C-M-u
;;C语言中tab不起作用,使用如下键替代
;;C-Q <TAB>
;;alt+i
;;向前后移动一段话
;;M-{
;;M-}
;;在*scratch* buffer中(lisp-interaction-mode)模式中,输入lisp命令,
;;可以直接在行尾运行C-j,则可以在buffer中插入当前的运算记过。
;;或者在行尾运行C-x C-e,则可以在minibuffer查看运行结果。
;;对于学习Elisp有用。
;;==================键盘绑定结束============================================
;;##########################################################################
;; 语言环境字符集设置(utf-8)
;;##########################################################################
(set-language-environment 'Chinese-GB)
(set-keyboard-coding-system 'utf-8)
(set-clipboard-coding-system 'utf-8)
(set-terminal-coding-system 'utf-8)
(set-buffer-file-coding-system 'utf-8)
(set-default-coding-systems 'utf-8)
(set-selection-coding-system 'utf-8)
(modify-coding-system-alist 'process "*" 'utf-8)
(setq default-process-coding-system '(utf-8 . utf-8))
(setq-default pathname-coding-system 'utf-8)
(set-file-name-coding-system 'utf-8)
(setq ansi-color-for-comint-mode t)
;;处理shell-mode乱码,好像没作用
;;##########################################################################
;; 编程设置
;;##########################################################################
;;在模式栏中显示当前光标所在函数
(which-function-mode)
;;自动缩进的宽度设置为4
(setq c-basic-offset 4)
;;代码折叠
;;能把一个代码块缩起来,需要的时候再展开
;; M-x hs-minor-mode
;; C-c @ ESC C-s show all
;; C-c @ ESC C-h hide all
;; C-c @ C-s show block
;; C-c @ C-h hide block
;; C-c @ C-c toggle hide/show
(load-library "hideshow")
(add-hook 'c-mode-hook 'hs-minor-mode)
(add-hook 'c++-mode-hook 'hs-minor-mode)
(add-hook 'java-mode-hook 'hs-minor-mode)
(add-hook 'perl-mode-hook 'hs-minor-mode)
(add-hook 'php-mode-hook 'hs-minor-mode)
(add-hook 'emacs-lisp-mode-hook 'hs-minor-mode)
;;自动补全括号
;;输入左边的括号,就会自动补全右边的部分.包括(), "", [] , {} , 等等。
(defun my-c-mode-auto-pair ()
(interactive)
(make-local-variable 'skeleton-pair-alist)
(setq skeleton-pair-alist '(
(?` ?` _ "''")
(?\( ? _ " )")
(?\[ ? _ " ]")
(?{ \n > _ \n ?} >)))
(setq skeleton-pair t)
(local-set-key (kbd "(") 'skeleton-pair-insert-maybe)
(local-set-key (kbd "{") 'skeleton-pair-insert-maybe)
(local-set-key (kbd "`") 'skeleton-pair-insert-maybe)
(local-set-key (kbd "[") 'skeleton-pair-insert-maybe))
(add-hook 'c-mode-hook 'my-c-mode-auto-pair)
(add-hook 'c++-mode-hook 'my-c-mode-auto-pair)
;;把c语言风格设置为k&r风格
;;(add-hook 'c-mode-hook '(lambda () (c-set-style "k&r")))
;;css-mode.el编辑css文件
(autoload 'css-mode "css-mode" "CSS editing mode" t)
;;把buffer的内容连同颜色转为html格式
(autoload 'htmlize-buffer "htmlize" "HTMLize mode" t)
;;folding.el 编辑文本的一部分,其它部分折叠起来
(autoload 'folding-mode "folding" "Folding mode" t)
(autoload 'turn-off-folding-mode "folding" "Folding mode" t)
(autoload 'turn-on-folding-mode "folding" "Folding mode" t)
;;预处理设置
(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 auto-mode-alist
(append '(("\\.py\\'" . python-mode)
("\\.s?html?\\'" . html-helper-mode)
("\\.asp\\'" . html-helper-mode)
("\\.phtml\\'" . html-helper-mode)
("\\.css\\'" . css-mode))
auto-mode-alist))
;;Shell使用ansi color
(autoload 'ansi-color-for-comint-mode-on "ansi-color" nil t)
(add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on)
;;增大使用查找函数和变量的寻找范围
(setq apropos-do-all t)
;;##########################################################################
;; 日历设置
;;##########################################################################
;;设置日历的一些颜色
(setq calendar-load-hook
'(lambda ()
(set-face-foreground 'diary-face "skyblue")
(set-face-background 'holiday-face "slate blue")
(set-face-foreground 'holiday-face "white")))
;;设置我所在地方的经纬度,calendar里有个功能是日月食的预测,和你的经纬度相联系的。
;; 让emacs能计算日出日落的时间,在 calendar 上用 S 即可看到
(setq calendar-latitude +39.54)
(setq calendar-longitude +116.28)
(setq calendar-location-name "北京")
;; 设置阴历显示,在 calendar 上用 pC 显示阴历
(setq chinese-calendar-celestial-stem
["甲" "乙" "丙" "丁" "戊" "己" "庚" "辛" "壬" "癸"])
(setq chinese-calendar-terrestrial-branch
["子" "丑" "寅" "卯" "辰" "巳" "戊" "未" "申" "酉" "戌" "亥"])
;; 设置 calendar 的显示
(setq calendar-remove-frame-by-deleting t)
(setq calendar-week-start-day 1) ; 设置星期一为每周的第一天
(setq mark-diary-entries-in-calendar t) ; 标记calendar上有diary的日期
(setq mark-holidays-in-calendar nil) ; 为了突出有diary的日期,calendar上不标记节日
(setq view-calendar-holidays-initially nil) ; 打开calendar的时候不显示一堆节日
;; 去掉不关心的节日,设定自己在意的节日,在 calendar 上用 h 显示节日
(setq christian-holidays nil)
(setq hebrew-holidays nil)
(setq islamic-holidays nil)
(setq solar-holidays nil)
(setq general-holidays '((holiday-fixed 1 1 "元旦")
(holiday-fixed 2 14 "情人节")
(holiday-fixed 3 14 "白色情人节")
(holiday-fixed 4 1 "愚人节")
(holiday-fixed 5 1 "劳动节")
(holiday-float 5 0 2 "母亲节")
(holiday-fixed 6 1 "儿童节")
(holiday-float 6 0 3 "父亲节")
(holiday-fixed 7 1 "建党节")
(holiday-fixed 8 1 "建军节")
(holiday-fixed 9 10 "教师节")
(holiday-fixed 10 1 "国庆节")
(holiday-fixed 12 25 "圣诞节")))
;;Calendar模式支持各种方式来更改当前日期
;;(这里的“前”是指还没有到来的那一天,“后”是指已经过去的日子)
;; q 退出calendar模式
;; C-f 让当前日期向前一天
;; C-b 让当前日期向后一天
;; C-n 让当前日期向前一周
;; C-p 让当前日期向后一周
;; M-} 让当前日期向前一个月
;; M-{ 让当前日期向后一个月
;; C-x ] 让当前日期向前一年
;; C-x [ 让当前日期向后一年
;; C-a 移动到当前周的第一天
;; C-e 移动到当前周的最后一天
;; M-a 移动到当前月的第一天
;; M-e 多动到当前月的最后一天
;; M-< 移动到当前年的第一天
;; M-> 移动到当前年的最后一天
;;Calendar模式支持移动多种移动到特珠日期的方式
;; g d 移动到一个特别的日期
;; o 使某个特殊的月分作为中间的月分
;; . 移动到当天的日期
;; p d 显示某一天在一年中的位置,也显示本年度还有多少天。
;; C-c C-l 刷新Calendar窗口
;; Calendar支持生成LATEX代码。
;; t m 按月生成日历
;; t M 按月生成一个美化的日历
;; t d 按当天日期生成一个当天日历
;; t w 1 在一页上生成这个周的日历
;; t w 2 在两页上生成这个周的日历
;; t w 3 生成一个ISO-SYTLE风格的当前周日历
;; t w 4 生成一个从周一开始的当前周日历
;; t y 生成当前年的日历
;;EMACS Calendar支持配置节日:
;; h 显示当前的节日
;; x 定义当天为某个节日
;; u 取消当天已被定义的节日
;; e 显示所有这前后共三个月的节日。
;; M-x holiday 在另外的窗口的显示这前后三个月的节日。
;; 另外,还有一些特殊的,有意思的命令:
;; S 显示当天的日出日落时间(是大写的S)
;; p C 显示农历可以使用
;; g C 使用农历移动日期可以使用
;;##########################################################################
;; 日记设置
;;##########################################################################
;; 默认的日记文件
;;(setq diary-file "~/diary/diary")
;;(setq diary-mail-addr "muhongzhang@gmail.com")
;;(add-hook 'diary-hook 'appt-make-list)
;;当你创建了一个'~/diary'文件,你就可以使用calendar去查看里面的内容。你可以查看当天的事件,相关命令如下 :
;; d 显示被选中的日期的所有事件
;; s 显示所有事件,包括过期的,未到期的等等
;; 创建一个事件的样例:
;; 02/11/1989
;; Bill B. visits Princeton today
;; 2pm Cognitive Studies Committee meeting
;; 2:30-5:30 Liz at Lawrenceville
;; 4:00pm Dentist appt
;; 7:30pm Dinner at George's
;; 8:00-10:00pm concert
;; 创建事件的命令:
;; i d 为当天日期添加一个事件
;; i w 为当天周创建一个周事件
;; i m 为当前月创建一个月事件
;; i y 为当前年创建一个年事件
;; i a 为当前日期创建一个周年纪念日
;; i c 创建一个循环的事件
;;##########################################################################
;; 其他扩展
;;##########################################################################
;;============临时记号============
;;有时你需要跳到另一个文件进行一些操作,然后很快的跳回来。你当然可以 使用 bookmark或者寄存器
;;但是这些实在是太慢了。你多想拥有vi那样的 ma, mb, 'a, 'b 的操作。现在你可以用几行 elisp 达到类似的目的
(defun ska-point-to-register()
"Store cursorposition _fast_ in a register.
Use ska-jump-to-register to jump back to the stored position."
(interactive)
(setq zmacs-region-stays t)
(point-to-register 8))
(defun ska-jump-to-register()
"Switches between current cursorposition and position
that was stored with ska-point-to-register."
(interactive)
(setq zmacs-region-stays t)
(let ((tmp (point-marker)))
(jump-to-register 8)
(set-register 8 tmp)))
(global-set-key [(control ?\.)] 'ska-point-to-register);;C-.
(global-set-key [(control ?\,)] 'ska-jump-to-register);;C-,
;;============go-to-char============
;;go-to-char非常感谢Oliver Scholz提供这个函数给我。
;;这个函数是一个vi的 "f" 命令的替代品。vi的用户知道,vi有 一个特别好的命令 "f"。当你按 "fx", x 是任意一个字符时
;;光标就会移动到下一个 "x" 处。这之后只要按 ";"(分号),光标就到再 下一个 "x"。
;;我一直觉得 Emacs没有这样一个方便的命令,但是Oliver给了 我一个完美的答案:
;;有了这段代码之后,当你按 C-c a x (x 是任意一个字符) 时,光 标就会到下一个 x 处。再次按 x,光标就到下一个 x。比如 C-c a w w w w ...,
;;我觉得这个方式比 vi 的 "f" 要快。
(defun my-go-to-char (n char)
"Move forward to Nth occurence of CHAR.
Typing `my-go-to-char-key' again will move forwad to the next Nth occurence of CHAR."
(interactive "p\ncGo to char: ")
(search-forward (string char) nil nil n)
(while (char-equal (read-char)
char)
(search-forward (string char) nil nil n))
(setq unread-command-events (list last-input-event)))
(define-key global-map (kbd "C-c C-f") 'my-go-to-char)
;;============自动补全功能============(由于缺少senator,因此不好使)
;;自动补全功能,这是从王垠的网站直接Copy过来的,引用一些他对此的说明
;;设置以下 hippie-expand 的补全方式。它是一个优先列表, hippie-expand 会优先使用表最前面
;;的函数来补全这是说,首先使用当前的buffer补全,如果找不到,就到别的可见的窗口里寻找,
;;如还找不到,那么到所有打开的buffer去找,如果还……那么到kill-ring里,到文件名,到简称列表
;;里,到list,当前使用的匹配方式会在 echo 区域显示。
;;特别有意思的是 try-expand-line,它可以帮你补全整整一行文字。我很多时后有两行文字大致相
;;同,只有几个字不一样,但是我懒得去拷贝粘贴以下。那么我就输入这行文字的前面几个字。然后
;;多按几下 M-/ 就能得到那一行。
;;hippie的自动补齐策略,优先调用了senator的分析结果:
(autoload 'senator-try-expand-semantic "senator")
(setq hippie-expand-try-functions-list
'(
senator-try-expand-semantic
try-expand-line
try-expand-line-all-buffers
try-expand-list
try-expand-list-all-buffers
try-expand-dabbrev
try-expand-dabbrev-visible
try-expand-dabbrev-all-buffers
try-expand-dabbrev-from-kill
try-complete-file-name
try-complete-file-name-partially
try-complete-lisp-symbol
try-complete-lisp-symbol-partially
try-expand-whole-kill))
(global-set-key [(meta p)] 'hippie-expand)
;;自定义自动补齐命令,这部分是抄hhuu的,如果在单词中间就补齐,否则就是tab。
(defun my-indent-or-complete ()
(interactive)
(if (looking-at "\\>")
(hippie-expand nil)
(indent-for-tab-command))
)
;;(global-set-key [(meta p)] 'my-indent-or-complete)
;;============拷贝代码自动格式化============
;;Emacs 里对代码的格式化支持的非常好,不但可以在编辑的时候自动帮你格式化,还可以选中一块代码,
;;按 Ctrl-Alt-\ 对这块代码重新进行格式化.如果要粘贴一块代码的话,粘贴完了紧接着按 Ctrl-Alt-\,
;;就可以把新加入的代码格式化好。可是,对于这种粘贴加上重新格式化的机械操作,Emacs 应该可以将
;;它自动化才能配得上它的名气,把下面的代码加到配置文件里,你的 Emacs 就会拥有这种能力了
(dolist (command '(yank yank-pop))
(eval
`(defadvice ,command (after indent-region activate)
(and (not current-prefix-arg)
(member major-mode
'(
c-mode
c++-mode
clojure-mode
emacs-lisp-mode
haskell-mode
js-mode
latex-mode
lisp-mode
objc-mode
perl-mode
cperl-mode
plain-tex-mode
python-mode
rspec-mode
ruby-mode
scheme-mode))
(let ((mark-even-if-inactive transient-mark-mode))
(indent-region (region-beginning) (region-end) nil))))))
;;##########################################################################
;;-------------插件设置----------------
;;##########################################################################
;;;;============auto-header============
;;(add-to-list 'load-path "~/.emacs.d/plugins/")
;;(require 'auto-header)
;;
;;;;加载auto-header.el文件,自动添加文件头
;;(require 'auto-header)
;;;; 设置文件头中的姓名
;;(setq header-full-name "muhongzhang")
;;;; 设置邮箱
;;(setq header-email-address "muhongzhang@gmail.com")
;;;; 设置每次保存时要更新的项目
;;(setq header-update-on-save
;; '( filename
;; modified
;; counter
;; copyright))
;;;; 设置文件头的显示格式
;;(setq header-field-list
;;'( filename ;文件名
;; ;;blank ;空行,下同
;; ;;copyright ;;版权
;; version
;; author ;作者
;; created ;创建人
;; ;;blank
;; description ;描述
;; ;;blank
;; ;;modified_by ;更改者
;; ;; blank
;; ;;status ;状态,是否发布
;; ;;更新
;; ;;blank
;; ))
;;---------------------------------
;;============smex-mode============
;;---------------------------------
;;C-s/C-r switches to the next/previous match
;;show most recently executed commands
(load-file "~/.emacs.d/plugins/smex/smex.el")
(require 'smex) ; Not needed if you use package.el
(smex-initialize) ; Can be omitted. This might cause a (minimal) delay
; when Smex is auto-initialized on its first run.
(global-set-key (kbd "M-x") 'smex)
(global-set-key (kbd "M-X") 'smex-major-mode-commands)
;; This is your old M-x.
(global-set-key (kbd "C-c C-c M-x") 'execute-extended-command)
;;---------------------------------
;;========== sr-speedbar ========
;;比自带的speedbar更高级的文件浏览器
;;---------------------------------
(load-file "~/.emacs.d/plugins/sr_speedbar/sr-speedbar.el")
(require 'sr-speedbar)
;;(global-set-key (kbd "s-s") 'sr-speedbar-toggle)
;;---------------------------------
;;========== mode-icons ========
;;FIXME:安装完mode-icons后,可以显示出图标,但是mode-line没了。
;;目前还不知道什么原因,可能是和powerline等没有协同好。
;;因此暂不使用
;;---------------------------------
;;(add-to-list 'load-path "~/.emacs.d/plugins/mode-icons/mode-icons")
;;(require 'mode-icons)
;;(mode-icons-mode)
;;(setq mode-icons-change-mode-name nil)
;;(setq mode-icons-desaturate-inactive nil)
;;---------------------------------
;;========== spaceline-al-icons ========
;;---------------------------------
;;(add-to-list 'load-path "~/.emacs.d/plugins/spaceline-al-icons")
;;(require 'spaceline-all-the-icons)
;;(use-package spaceline-all-the-icons
;; :after spaceline
;; :config (spaceline-all-the-icons-theme))
;;---------------------------------
;;========== tarbar ========
;;显示buffer的tab
;;---------------------------------
(add-to-list 'load-path "~/.emacs.d/plugins/tabbar")
(require 'tabbar)
(tabbar-mode)
;;Tabbar mode会自动帮你把Emacs里的文件分组。
;;可是,默认的分组方法并不是每个人都喜欢,它会把后缀名相同的文件分为一组,
;;比如说perl脚本都扔在一个组里,yaml文件又扔在另一个组里。
;;写代码的时候,在这两个组里切换实在是太麻烦了!
;;我就喜欢把除了Emacs Buffer之外的文件都放成一组,即我自己打开的文件放成一组。
;;于是,我用下面这段代码来实现自己的想法:
;;(setq tabbar-buffer-groups-function
;; (lambda (b) (list "All Buffers")))
;;(setq tabbar-buffer-list-function
;; (lambda ()
;; (remove-if
;; (lambda(buffer)
;; (find (aref (buffer-name buffer) 0) " *"))
;; (buffer-list))))
;;默认用M-j,M-k绑定tabbar-backward/tabbar-forward
;;(define-prefix-command 'lwindow-map)
;;(global-set-key (kbd "") 'tabbar-backward-group)
;;(global-set-key (kbd "") 'tabbar-forward-group)
;;(global-set-key (kbd "") 'tabbar-backward)
;;(global-set-key (kbd "") 'tabbar-forward)
(global-set-key [(meta j)] 'tabbar-backward)
(global-set-key [(meta k)] 'tabbar-forward)
;;---------------------------------
;;========== tarbar-ruler ========
;;显示buffer的tab
;;FIXME:安装完此插件后,有一个warning:提示缺少icon-mode。
;;由于icon-mode模式有问题,因此暂不使用此插件。
;;---------------------------------
;;(add-to-list 'load-path "~/.emacs.d/plugins/tabbar-ruler")
;;(setq tabbar-ruler-global-tabbar t) ; If you want tabbar
;;(require 'tabbar-ruler)
;;---------------------------------
;;============ helm ==============(NOT OK)
;;---------------------------------
;(add-to-list 'load-path "~/.emacs.d/plugins/helm/helm")
;(load-file "~/.emacs.d/plugins/helm/helm/helm-config.el")
;(require 'helm-config)
;;---------------------------------
;;=========== evil-mode ===========
;;extensible vi layer for Emacs
;;模拟vi快捷键
;;---------------------------------
;;;; Enable evil
;;(setq evil-toggle-key "") ; remove default evil-toggle-key C-z, manually setup later
;;(setq evil-want-C-i-jump nil) ; don't bind [tab] to evil-jump-forward
;;(require 'evil)
;;(evil-mode 1)
;;
;;;; remove all keybindings from insert-state keymap, use emacs-state when editing
;;(setcdr evil-insert-state-map nil)
;;
;;;; ESC to switch back normal-state
;;(define-key evil-insert-state-map [escape] 'evil-normal-state)
;;
;;;; TAB to indent in normal-state
;;(define-key evil-normal-state-map (kbd "TAB") 'indent-for-tab-command)
;;
;;;; Use j/k to move one visual line insted of gj/gk
;;(define-key evil-normal-state-map (kbd "<remap> <evil-next-line>") 'evil-next-visual-line)
;;(define-key evil-normal-state-map (kbd "<remap> <evil-previous-line>") 'evil-previous-visual-line)
;;(define-key evil-motion-state-map (kbd "<remap> <evil-next-line>") 'evil-next-visual-line)
;;(define-key evil-motion-state-map (kbd "<remap> <evil-previous-line>") 'evil-previous-visual-line)
;;---------------------------------
;;=========== magit ===============
;;在emacs中实现git大多数功能
;;---------------------------------
;;---------------------------------
;;=========== flymake =============
;;flymake实时语法检查,通吃所有语言
;;---------------------------------
;;---------------------------------
;;=========== ecb =================
;;---------------------------------
;;---------------------------------
;;==========smart-mode-line========
;;=========== powerline ===========
;;Vim下我用的是powerline。
;;Emacs 版的powerline无法用在终端下,
;;所以找到了这个smart-mode-line
;;---------------------------------
;;---颜色单一,且不能变色---
;;(add-to-list 'load-path "~/.emacs.d/plugins/powerline")
;;(require 'powerline)
;;(powerline-default-theme)
;;powerline-center-theme
;;powerline-center-evil-theme
;;powerline-vim-theme
;;powerline-nano-theme
;;powerline-revert回到mode-line-format初始模式
;;---颜色可以,但不能变色---
(add-to-list 'load-path "~/.emacs.d/plugins/emacs-powerline")
(require 'powerline)
;;You can change the mode-line color using the standard method:
;;(setq powerline-arrow-shape 'arrow) ;; the default
;;(setq powerline-arrow-shape 'curve) ;; give your mode-line curves
;;(setq powerline-arrow-shape 'arrow14) ;; best for small fonts
;;Additionally, you can modify directly in powerline.el:
;;(custom-set-faces
;; '(mode-line ((t (:foreground "#030303" :background "#bdbdbd" :box nil))))
;; '(mode-line-inactive ((t (:foreground "#f9f9f9" :background "#666666" :box nil)))))
;;Change the :foreground, :background, powerline-color1, powerline-color2 to whatever you wish.
;;(setq powerline-color1 "grey22")
;;(setq powerline-color2 "grey40")
;;---------------------------------
;;==========smart-mode-line========
;;Vim下我用的是powerline。
;;Emacs 版的powerline无法用在终端下,
;;所以找到了这个smart-mode-line
;;---------------------------------
;;------Smart mode-line------(没有配置OK)
;;(add-to-list 'load-path "~/.emacs.d/plugins/rich-minority")
;;(add-to-list 'load-path "~/.emacs.d/plugins/smart-mode-line")
;;(require 'smart-mode-line)
;;(add-to-list 'load-path "~/.emacs.d/plugins/smart-mode-line/themes")
;;(require 'smart-mode-line-powerline-theme)
;; These two lines are just examples
;;(setq powerline-arrow-shape 'curve)
;;(setq powerline-default-separator-dir '(right . left))
;; These two lines you really need.
;;(setq sml/theme 'light-powerline)
;;(sml/setup)
;;(setq sml/name-width 40
;; sml/line-number-format "%4l"
;; sml/mode-width 'full
;; sml/themea 'light-powerline
;; sml/no-confirm-load-theme t)
;;;;Hidden minor-mode, by rich-minority
;;(setq rm-excluded-modes
;; '(" Guide" ;; guide-key mode
;; " hc" ;; hardcore mode
;; " AC" ;; auto-complete
;; " vl" ;; global visual line mode enabled
;; " Wrap" ;; shows up if visual-line-mode is enabled for that buffer
;; " Omit" ;; omit mode in dired
;; " yas" ;; yasnippet
;; " drag" ;; drag-stuff-mode
;; " VHl" ;; volatile highlights
;; " ctagsU" ;; ctags update
;; " Undo-Tree" ;; undo tree
;; " wr" ;; Wrap Region
;; " SliNav" ;; elisp-slime-nav
;; " Fly" ;; Flycheck
;; " PgLn" ;; page-line-break
;; " GG" ;; ggtags
;; " ElDoc" ;; eldoc
;; " hl-highlight" ;; hl-anything
;; ))
;;---------------------------------
;;========== ellp ========
;;利用package包管理安装emacs插件
;;---------------------------------
;;常用快捷键,
;;M-x package-list-packages
;;i - 选择要安装的包
;;d - 选择要删除的包
;;U - 升级已安装的包
;;x - 执行操作
;;d - 选择要删除的包
(require 'package)
(setq package-enable-at-startup nil)
;;(add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/") t)
;;(add-to-list 'package-archives '("gnu" . "http://elpa.gnu.org/packages/") t)
;;(add-to-list 'package-archives '("marmalade" . "http://marmalade-repo.org/packages/") t)
;;(add-to-list 'package-archives '("elpa" . "http://tromey.com/elpa/") t)
;;(add-to-list 'package-archives '("melpa-stable" . "http://melpa-stable.milkbox.net/packages/") t)
;;(add-to-list 'package-archives ' ("elpy" . "http://jorgenschaefer.github.io/packages/") t)
;;(setq package-archives '(("gnu" . "https://elpa.gnu.org/packages/")
;; ("marmalade" . "https://marmalade-repo.org/packages/")
;; ("melpa" . "https://melpa.milkbox.net/packages/")
;; ("melpa-stable" . "https://melpa-stable.milkbox.net/packages/")
;; ("elpy" . "http://jorgenschaefer.github.io/packages/")))
;;(setq package-archives '(("gnu" . "http://elpa.emacs-china.org/gnu/")
;; ("marmalade" . "http://elpa.emacs-china.org/marmalade/")
;; ("melpa" . "http://elpa.emacs-china.org/melpa/")
;; ("melpa-stable" . "http://elpa.emacs-china.org/melpa-stable/")))
(setq package-archives '(("gnu" . "http://mirrors.tuna.tsinghua.edu.cn/elpa/gnu/")
("melpa" . "http://mirrors.tuna.tsinghua.edu.cn/elpa/melpa/")))
;;(package-initialize)
;;(add-to-list 'load-path "D:\08_Tools\emacs\emacs-24.4-bin-i686-pc-mingw32\share\emacs\24.4\site-lisp"
;;(require 'xcscope) ;;加载xcscope
;;(require 'cedet) ;;加载cedet
;;(require 'ecb) ;;加载ecb
;;(require 'session) ;;加载session
;;(add-hook 'after-init-hook 'session-initialize) ;; 启动时初始化session
;;(require 'doxymacs) ;; 启动doxymacs