emacs配置教程 -version first

[b]现在使用的ubuntu上的emacs还不是很完善,以后我们一步步从实践中完善起来!![/b]





;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;基本设置;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;;Load_path
(add-to-list 'load-path' "~/.emacs.d/lisp")

;;todo_path
(setq todo-file-do "~/emacs/todo/do")
(setq todo-file-done "~/emacs/todo/done")
(setq todo-file-top "~/emacs/todo/top")

;;Personal information
(setq user-full-name "yaoming168")
(setq user-mail-address "[email protected]")


;;不要生成临时文件
(setq-default make-backup-files nil)

;;设置中文语言环境
;;(set-language-environment 'Chinese-GB)

;;写文件的编码方式
;;(set-buffer-file-coding-system 'gb2312)
(set-buffer-file-coding-system 'utf-8)

;;新建文件的编码方式
;;(setq default-buffer-file-coding-system 'gb2312)
(setq default-buffer-file-coding-system 'utf-8)

;;终端方式的编码方式
(set-terminal-coding-system 'utf-8)

;;键盘输入的编码方式
;;(set-keyboard-coding-system 'gb2312)

;;读取或写入文件名的编码方式
(setq file-name-coding-system 'utf-8)

;;打开就启用 text 模式
(setq default-major-mode 'text-mode)

;;禁用启动信息
;;(setq inhibit-startup-message t)

;;语法高亮
(global-font-lock-mode t)
(put 'set-goal-column 'disabled nil)
(put 'narrow-to-region 'disabled nil)
(put 'upcase-region 'disabled nil)
(put 'downcase-region 'disabled nil)
(put 'LaTeX-hide-environment 'disabled nil)

;;打开图片显示功能
;;(auto-image-file-mode t)

;;以 y/n 替代 yes/no
(fset 'yes-or-no-p 'y-or-n-p)


;;打开缺省禁用的功能
(setq version-control t)
(setq kept-new-versions 3)
(setq delete-old-versions t)
(setq kept-old-versions 2)
(setq dired-kept-versions 1)


;;让 dired 可以递归的拷贝和删除目录
(setq dired-recursive-copies 'top)
(setq dired-recursive-deletes 'top)

;;时间戳设置(time-stamp),设定文档上次保存的信息
;;只要里在你得文档里有Time-stamp:的设置,就会自动保存时间戳
;;启用time-stamp
(setq time-stamp-active t)
;;去掉time-stamp的警告?
(setq time-stamp-warn-inactive t)
;;设置time-stamp的格式,我如下的格式所得的一个例子:
(setq time-stamp-format "%:u %02m/%02d/%04y %02H02M02S")
;;将修改时间戳添加到保存文件的动作里。
(add-hook 'write-file-hooks 'time-stamp)

;;在文档最后自动插入空白一行,好像某些系统配置文件是需要这样的
(setq require-final-newline t)
(setq track-eol t)

;;使用C-k删掉指针到改行末的所有东西
(setq-default kill-whole-line t)

;;设定删除保存记录为200,可以方便以后无限恢复
(setq kill-ring-max 200)

;;增大使用查找函数和变量的寻找范围
(setq apropos-do-all t)

;;是用aspell程序作为Emacs的拼写检查成学
(setq-default ispell-program-name "aspell")

;;使用narrow功能时的一个设置
(put 'narrow-to-region 'disabled nil)

;;启动Emacs自动设置为两个窗口(上下各一个)
;;(split-window-vertically)

;;功能是将当前行设为本页第一行,同终端下的clear命令有点相似
(defun line-to-top-of-window ()
"Move the line point is on to top of window."
(interactive)
(recenter 0))

;;代码折叠
(load-library "hideshow")
(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)

;;临时记号
;;有时你需要跳到另一个文件进行一些操作,然后很快的跳回来。你当然可以 使用 bookmark或者寄存器。
;;但是这些实在是太慢了。你多想拥有vi那样的 ma, mb, 'a, 'b 的操作。现在你可以用几行 elisp 达到类似的目的
(global-set-key [(control ?\.)] 'ska-point-to-register)
(global-set-key [(control ?\,)] 'ska-jump-to-register)
(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)))

;; go-to-char 非常感谢 Oliver Scholz 提供这个函数给 我。
;;这个函数是一个 vi 的 "f" 命令的替代品。vi的用户知道,vi有 一个特别好的命令 "f"。当你按 "fx", x 是任意一个字符时
;;光标 就会移动到下一个 "x" 处。这之后只要按 ";"(分号),光标就到再 下一个 "x"。
;;举个例子说明这个命令的用途。比如我们有这样一行字,光标在 行首。
;;(setq unread-command-events (list last-input-event)))
;; ^^^^^
;;我们希望迅速的到达最后那个 event 处,于是我在 vi 里按 "fe"。结果光标到了 "setq" 的那个 e 上面,这时候我接着按 ";",
;;不一会儿就到了我们想要的地方。很方便吧?可能起初不觉得,后来 你发现这真的非常好!

;;我一直觉得 Emacs 没有这样一个方便的命令,但是 Oliver 给了 我一个完美的答案:
;;有了这段代码之后,当你按 C-c a x (x 是任意一个字符) 时,光 标就会到下一个 x 处。再次按 x,光标就到下一个 x。比如 C-c a w w w w ..., C-c a b b b b b b ...
;;我觉得这个方式比 vi 的 "f" 要快。
(defun wy-go-to-char (n char)
"Move forward to Nth occurence of CHAR.
Typing `wy-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 a") 'wy-go-to-char)

;;====================== Chinese setting =====================
;;(setq gnus-default-charset 'cn-gb-2312
;;gnus-group-name-charset-group-alist '((".*" . gb2312))
;;gnus-summary-show-article-charset-alist '((1 . cn-gb-2312) (2 . big5) (3 . chinese-gbk) (4 . utf-8))
;;gnus-newsgroup-ignored-charsets '(unknown-8bit x-unknown iso-8859-1)
;;gnus-group-posting-charset-alist '((".*" gb2312 (gb2312))))
;;(define-coding-system-alias 'gb18030 'gb2312)

;;------------设置(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??,o??÷[M`J3

;;设置 sentence-end 可以识别中文标点。不用在 fill 时在句号后插 入两个空格。
(setq sentence-end "\\([。!?]\\|……\\|[.?!][]\"')}]*\\($\\|[ \t]\\)\\)[ \t\n]*")
(setq sentence-end-double-space nil)

;;---------------------- End Chinese setting ---------------------


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;基本设置结束;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;快捷键设置;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;;********************** 常用编程配置 *********************
;; 按下Alt+/,就会弹出菜单让你自动补全
;;(define-key c-mode-base-map [(meta ?/)] 'semantic-ia-complete-symbol-menu)

;;(global-set-key [f1] 'goto-line);设置M-g为goto-line
;;;F2:进入wiki-mode模式
(global-set-key [(f2)] 'emacs-wiki-find-file)
;;(global-set-key [(f3)] 'speedbar);打开speedbar

;;(global-set-key [f5] 'gdb);启动make

(global-set-key [f5] 'complile)
(setq-default compile-command "make")

;;(global-set-key [(f6)] 'gdb-many-windows);跳到其它窗格
(global-set-key [f6] 'speedbar)
;;(global-set-key [f7] 'other-frame);启动窗口gdb

(global-set-key [f7] 'gdb)


;;;F8:切换到shell模式
(global-set-key [(f8)] 'ansi-term)

;;启动窗口gdb
(global-set-key [f10] 'gdb-many-windows)



;; F12 t 从当前缓冲区建立任务
(global-set-key (kbd " t") 'planner-create-task-from-buffer)
;; F12 g 切换到当日的任务
;;(global-set-key (kbd " g") 'planner-goto-today)
(global-set-key (kbd " g") 'planner-goto-today)
(global-set-key (kbd " p") 'plan)
;; F12 r 添加当前备忘录
(global-set-key (kbd " r") 'remember)
;; F12 c 切换到日历
(global-set-key (kbd " c") 'calendar)


;;;F12 u 更新当前版本
(global-set-key (kbd " u") 'vc-next-action)

;;(global-set-key [(f4)] 'compile);编译


(global-set-key [(meta g)] 'goto-line)
;;(global-set-key [(meta ?/)] 'hippie-expand)


;;;Alt+s : 让speedbar获得焦点
(global-set-key (kbd "M-s") 'speedbar-get-focus)


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;快捷键设置结束;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



;;====================== 常用编程插件 =====================

;;********************** auto-header *********************

(add-to-list 'load-path "~/.emacs.d/lisp/")
;;(require 'auto-header)
;;加载auto-header.el文件,自动添加文件头
;;(require 'auto-header)
;; 设置文件头中的姓名
(setq header-full-name "Yu Chao")
;; 设置邮箱
(setq header-email-address "[email protected]")

;; 设置每次保存时要更新的项目
(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
))
;;---------------------- END auto-header ---------------------



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;外观设置;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;;颜色设置,其实有个color-theme.el可以将Emacs设置丰富多彩,非常漂亮,不过启动有些慢,我只是选择了一些颜色设置。
;;;;;去掉工具栏
(tool-bar-mode nil)
;;;;;去掉菜单栏,我将F10绑定为显示菜单栏,万一什么东西忘了,需要菜单栏了可以摁F10调出,再摁F10就去掉菜单
(menu-bar-mode nil)
;;;;;不要滚动栏,现在都用滚轴鼠标了,可以不用滚动栏了
(scroll-bar-mode nil)
;;;;;改变emacs标题栏的标题
(setq frame-title-format "%b@Alex-GDLC")
;;;;;允许emacs和外部其他程序的粘贴
(setq x-select-enable-clipboard t)
;; 显示列号
(setq column-number-mode t)
;;开启语法高亮。
(global-font-lock-mode 1)
;;设置tab为4个空格的宽度
(setq default-tab-width 4)
(setq c-basic-offset 4)
;;;;;;;;; 设置界面 start
(set-cursor-color "Wheat")
(set-mouse-color "Wheat")
(set-foreground-color "Wheat")
(set-background-color "DarkSlateGray")
(if window-system
(setq default-frame-alist
(append
'( (top . 80)
(left . 100)
(width . 110)
(height . 35))
default-frame-alist))
)
;;;启动最大化
;;;(setq initial-frame-alist '((top . 0) (left . 0) (width . 97) (height . 49)))
;;;;;启用时间显示设置,在minibuffer上面的那个杠上(忘了叫什么来着)
(display-time-mode 1)
;;;;;时间使用24小时制
(setq display-time-24hr-format t)
;;;;;时间显示包括日期和具体时间
(setq display-time-day-and-date t)
;;;;;时间的变化频率,单位多少来着?
(setq display-time-interval 10)
;;;;;鼠标自动避开指针,如当你输入的时候,指针到了鼠标的位置,鼠标有点挡住视线了
(mouse-avoidance-mode 'animate)
;;;;;指针不要闪,我得眼睛花了
(blink-cursor-mode -1)
;;;高亮显示要拷贝的内容
(transient-mark-mode 1)
;;;;;当指针到一个括号时,自动显示所匹配的另一个括号
(show-paren-mode 1)
;;;;;是用滚轴鼠标
(mouse-wheel-mode t)
;;;;;备份设置
;;;;;emacs还有一个自动保存功能,默认在~/.emacs.d/auto-save-list里,这个非常有用,我这里没有改动,具体可以参见Sams teach yourself emacs in 24hours(我简称为sams24)
;;;;;启用版本控制,即可以备份多次
(setq version-control t)
;;;;;备份最原始的版本两次,记第一次编辑前的文档,和第二次编辑前的文档
(setq kept-old-versions 2)
;;;;;备份最新的版本五次,理解同上
(setq kept-new-versions 5)
;;;;;删掉不属于以上7中版本的版本
(setq delete-old-versions t)
;;;;;设置备份文件的路径
(setq backup-directory-alist '(("." . "~/.emacs.tmp")))
;;;;;备份设置方法,直接拷贝
(setq backup-by-copying t)
;; 自动存盘
(setq auto-save-mode t)
;;;;;去掉烦人的警告铃声
(setq visible-bell nil)
;;;;;滚动页面时比较舒服,不要整页的滚动
(setq scroll-step 1
scroll-margin 3
scroll-conservatively 10000)
;;;;;使用C-k删掉指针到改行末的所有东西
(setq-default kill-whole-line t)
;;;;;设定删除保存记录为200,可以方便以后无限恢复
(setq kill-ring-max 200)
;;;;;是用aspell程序作为Emacs的拼写检查成学
(setq-default ispell-program-name "aspell")
;;;;;这个东西必须放在最后
;;;;;desktop.el是一个可以保存你上次emacs关闭时的状态,下一次启动时恢复为上次关闭的状态。就和vmware的suspend一样。
;;;;;因为我要使用sawfish-mode,wiki-mode,html-helper-mode,放在这里才能保证下次启动时能正确辨认文件需要的模式。
(load "desktop")
(desktop-load-default)
(desktop-read)


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;外观设置结束;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;编程习惯基础设置;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;;;;光标靠近鼠标指针时让鼠标指针自己闪开
(mouse-avoidance-mode 'animate)

;;;;修改标题栏,显示buffer的名字
(setq frame-title-format "%b")

;;;;启动Emacs Server
;;(server-start)

;;;;每次进入Emacs即显式Plan
;;;;(plan)(color-theme-dark-blue)

;;;;高亮当前行
(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)


;;-------------------------关闭启动时的`开机画面'------------
(setq inhibit-startup-message t)

;;-------------------------显示列号--------------------------
;;(setq column-number-mode t)
;;display the column number and line number
(setq column-number-mode t)
(setq line-number-mode t)
(global-linum-mode t)

;;-------------------------使用Win下的选择习惯---------------
;;用shift+方向键进行选择
(pc-selection-mode)
(setq x-select-enable-clipboard t);支持emacs和外部程序的粘贴
(setq default-fill-column 80);默认显示 80列就换行


;;;; 显示时间
(setq display-time-24hr-format t)
(setq display-time-day-and-date t)
(display-time)

;;;;设置大的kill ring
(setq kill-ring-max 150)


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;编程习惯基础设置结束;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;编程语言设置;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;========================================================
;;auto-complete
(add-to-list 'load-path "~/.emacs.d/lisp/auto-complete-1.3.1")
(require 'auto-complete)
(require 'auto-complete-config)

(add-to-list 'ac-dictionary-directories "~/.emacs.d/lisp/auto-complete-1.3.1/dict")
(ac-config-default)

(global-auto-complete-mode t)

;(setq-default ac-sources '(ac-source-words-in-same-mode-buffers))
(setq-default ac-sources '(ac-source-yasnippet
ac-source-semantic
ac-source-ropemacs
ac-source-imenu
ac-source-words-in-buffer
ac-source-dictionary
ac-source-abbrev
ac-source-words-in-buffer
ac-source-files-in-current-dir
ac-source-filename))

(add-hook 'emacs-lisp-mode-hook (lambda () (add-to-list 'ac-sources 'ac-source-symbols)))
(add-hook 'auto-complete-mode-hook (lambda () (add-to-list 'ac-sources 'ac-source-filename)))
;;下面这句是从auto-complete-config.el中翻出来的
;;加上这句,在python中输入类的 . 就可以提示里面的方法了
(add-hook 'python-mode-hook (lambda () (add-to-list 'ac-omni-completion-sources (cons "\\." '(ac-source-ropemacs))) ))


(set-face-background 'ac-candidate-face "lightgray")
(set-face-underline 'ac-candidate-face "darkgray")
(set-face-background 'ac-selection-face "steelblue")

(setq ac-auto-start 2)
(setq ac-dwim t)


;;;; 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))


(add-hook 'c++-mode-hook 'my-c++-mode-hook)


;;;;我的Java语言编辑策略::::::::::::::::::::::::::::::::::::::::::::::::::::


;;如果需要打开缩写词和模版的功能


(add-to-list 'load-path (expand-file-name "~/.emacs.d/lisp/semantic-1.3.3"))
(add-to-list 'load-path (expand-file-name "~/.emacs.d/lisp/speedbar-0.13a"))
(add-to-list 'load-path (expand-file-name "~/.emacs.d/lisp/eieio-0.16"))
(add-to-list 'load-path (expand-file-name "~/.emacs.d/lisp/jde-2.3.5.1/lisp"))
(add-to-list 'load-path (expand-file-name "~/.emacs.d/lisp/elib-1.0"))



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;java语言设置结束;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


你可能感兴趣的:(编程工具学习)