Emacs自定义配置文件 - google-c-style.el等编程插件使用方法
Emacs配置文件1:
;;请在~/下创建.saves和.semanticdb文件夹 ;;将此文件拷贝至~/下并更名为.emacs即可 ;--------------设置有用的个人信息--------------- (setq user-full-name "aron") (setq user-mail-address "shuxiao9058@qq.com") ;-------------------设置基本信息---------------- ;;设置背景颜色 (set-background-color "black") ;;设置字体颜色 (set-foreground-color "white") ;;设置tab宽度为4 (setq-default indent-tabs-mode nil) (setq tab-width 4 c-basic-offset 4) ;;(setq tab-width 4 indent-tabs-mode nil) ;;设置光标不闪 (blink-cursor-mode 1) ;;设置光标为线条状 (setq-default cursor-type 'bar) ;;设置是否显示光标所在列号 (column-number-mode t) ;;设置是否显示光标所在行号(默认显示) (line-number-mode t) ;显示匹配括号 (show-paren-mode t) (setq show-paren-style 'parentheses) ;;以 y/n代表 yes/no (fset 'yes-or-no-p 'y-or-n-p) ;;滚动条在右侧 (set-scroll-bar-mode 'right) ;滚动页面时比较舒服,不要整页的滚动 (setq scroll-step 1 scroll-margin 3 scroll-conservatively 10000) ;;滚动页面时比较舒服,不要整页的滚动 (setq scroll-step 1 scroll-margin 3 scroll-conservatively 10000) ;;显示时间 (display-time-mode t) ;;启动Emacs Server (server-start) ;;高亮当前行 (require 'hl-line) (global-hl-line-mode t) ;;在buffer左侧显示行号 (dolist (hook (list 'c-mode-hook 'c++-mode-hook 'emacs-lisp-mode-hook 'lisp-interaction-mode-hook 'lisp-mode-hook 'emms-playlist-mode-hook 'java-mode-hook 'asm-mode-hook 'haskell-mode-hook 'rcirc-mode-hook 'emms-lyrics-mode-hook 'erc-mode-hook 'sh-mode-hook 'makefile-gmake-mode-hook )) (add-hook hook (lambda () (linum-mode 1)))) ;;高亮当前行 (require 'hl-line) (global-hl-line-mode t) ;;在标题栏显示buffer的名字(默认不显示) (setq frame-title-format "%b@emacs") ;;支持emacs和外部程序的粘贴 (setq x-select-enable-clipboard t) ;;设置备份策略 (setq make-backup-files t) ;;启用备份功能 (setq vc-make-backup-files t) ;;使用版本控制系统的时候也启用备份功能 (setq version-control t) ;;启用版本控制,即可以备份多次 (setq kept-old-versions 2) ;;备份最原始的版本两次,即第一次编辑前的文档,和第二次编 ;;辑前的文档 (setq kept-new-versions 6) ;;备份最新的版本6次,理解同上 (setq delete-old-versions t) ;;删掉不属于以上3种版本的版本 (setq backup-directory-alist '(("." . "~/.saves")));;设置备份文件的路径到~/.saves中 (setq backup-by-copying t) ;;备份设置方法,直接拷贝 (setq backup-enable-predicate 'ecm-backup-enable-predicate);;设置备份条件 ;;关闭匹配下列目录或文件的备份功能 (defun ecm-backup-enable-predicate (filename) (and (not (string= "/tmp/" (substring filename 0 5))) (not (string-match "semanticdb" filename)) )) ;;关闭自动保存模式 ;(setq auto-save-mode nil) ;;不生成 #filename# 临时文件 (setq auto-save-default nil) ;;自动的在文件末增加一新行 (setq require-final-newline t) ;;当光标在行尾上下移动的时候,始终保持在行尾。 (setq track-eol t) ;--------------快捷键设置---------------- ;编译和调试 (global-set-key [f7] 'compile) ;;编译 (global-set-key [C-f7] 'gdb) ;;调试 (setq-default compile-command "make") ;; (global-set-key [C-f8] 'previous-error) ;;上一个错误 (global-set-key [f8] 'next-error) ;;下一个错误 ;;F9:格式化代码,以使代码缩进清晰,容易阅读 (global-set-key [f9] 'c-indent-line-or-region) ;;F10:注释 / 取消注释 (global-set-key [f10] 'comment-or-uncomment-region) ;Ctrl+F11:复制区域到寄存器 (global-set-key [C-f11] 'copy-to-register) ;;F11:粘贴寄存器内容 (global-set-key [(f11)] 'insert-register) ;;C-x c 复制整行, 而"C-u 5 C-x c"复制 5 行 没用呀!!! (global-set-key (kbd "C-x c") 'copy-lines) ;;复制一行或者多行 (global-set-key (kbd "C-x d") 'zl-delete-line) ;;删除一行 ;(global-set-key (kbd "C-x a") 'kill-match-paren) ;;删除匹配括号间内容 ;;撤消 (global-set-key (kbd "C-z") 'undo) ;;全选 (global-set-key (kbd "C-a") 'mark-whole-buffer) ;;保存 (global-set-key (kbd "C-s") 'save-buffer) ;;跳转到某行 (global-set-key [(meta g)] 'goto-line) ;;Tab补全或缩进 (global-set-key [(tab)] 'my-indent-or-complete) ;--------------编程相关---------------- ;;打开代码折叠功能 (add-hook 'c-mode-hook 'hs-minor-mode) (add-hook 'c++-mode-hook 'hs-minor-mode) ;;定义C/C++风格 ;(add-hook 'c-mode-hook 'my-c-cpp-mode) (add-hook 'c++-mode-hook 'my-c-cpp-mode) ;(defun my-c-cpp-mode();该行使用会出错 ;;出错 ;;将回车代替C-j的功能,换行的同时对齐 ;(define-key c-mode-map [return] 'newline-and-indent) ;(interactive) ;(define-key c++-mode-map [return] 'newline-and-indent) ;(interactive) ;(define-key c-mode-base-map [(return)] 'newline-and-indent) ;;出错 ;;设置程序的对齐风格 ;(c-set-style "K&R") ;;在模式栏中显示当前光标所在函数 (which-function-mode) ;;自动缩进的宽度设置为4 (setq c-basic-offset 4) ;;预处理设置 (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) (add-hook 'c-mode-common-hook 'my-c-mode-common-hook) ;;我的C++语言编辑策略 (defun my-c++-mode-hook() (c-set-style "stroustrup") ;;(define-key c++-mode-map [f3] 'replace-regexp) ) ;--------------自动补全---------------- ;;;自定义hippie-expand补全或缩进函数 (defun my-indent-or-complete () (interactive) (if (looking-at "\\>") (hippie-expand nil) (indent-for-tab-command) ) ) ;; hippie-expand 自动补全策略 (setq hippie-expand-try-functions-list '( senator-try-expand-semantic ;优先调用senator的分析结果 try-expand-dabbrev-visible ;dabbrev策略, 可见窗口优先 try-expand-dabbrev ;dabbrev策略 try-expand-dabbrev-all-buffers ;dabbrev策略, 包括所有窗口(除了当前窗口) try-expand-dabbrev-from-kill ;dabbrev策略, 从所有删除记录里搜索 try-complete-file-name ;补全文件名 try-complete-file-name-partially ;补全文件名, 匹配优先 try-expand-list ;补全list try-expand-list-all-buffers ;补全list, 包括所有窗口(除了当前窗口) try-expand-line ;整行补全 try-expand-line-all-buffers ;整行补全, 包括所有窗口(除了当前窗口) try-complete-lisp-symbol ;补全符号, 符号太多了, 设置低优先级利于高效补全 try-complete-lisp-symbol-partially ;补全符号, 包括所有窗口(除了当前窗口) try-expand-whole-kill ;kill-ring里面补全 )) ;;配置semantic,代码分析,智能补全 (setq semanticdb-default-save-directory (expand-file-name "~/.semanticdb")) ;设置semantic.cache路径 (setq semanticdb-project-roots (list (expand-file-name "/"))) ;配置Semantic的检索范围 (autoload 'senator-try-expand-semantic "senator") ;优先调用了senator的分析结果 (add-hook 'semantic-init-hooks 'semantic-idle-completions-mode) ;空闲时进行补全分析 (setq-default semantic-idle-scheduler-idle-time 432000) ;避免semantic占用CPU过多 ;;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"))))) (add-hook 'c++-mode-common-hook (lambda () (setq semanticdb-project-system-databases (list (semanticdb-create-database semanticdb-new-database-class "/usr/include")))))
Emacs配置文件2:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Filename: .emacs ;; ;; Copyright (C) 2010, admirestator ;; Version: 20110906 ;; Author: admirestator <admirestator#gmail.com> ;; Created at: Mon Jun 21 15:56:07 2010 ;; ;; Description: 将此文件重命名为".emacs",并在用户家 ;; 目录即可。 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;********************** basic setting ********************* ;;Load_path (add-to-list 'load-path' "~/.emacs.d/plugins") ;;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 "admirestator") (setq user-mail-address "admirestator#gmail.com") ;;====================== time setting ===================== ;;启用时间显示设置,在minibuffer上面的那个杠上(忘了叫什么来着) (display-time-mode 1) ;;时间使用24小时制 (setq display-time-24hr-format t) ;;时间显示包括日期和具体时间 (setq display-time-day-and-date t) ;;时间栏旁边启用邮件设置 (setq display-time-use-mail-icon t) ;;时间的变化频率 (setq display-time-interval 10) ;;显示时间,格式如下 (display-time-mode 1) (setq display-time-24hr-format t) (setq display-time-day-and-date t) ;;---------------------- END time setting --------------------- ;;====================== color setting ===================== ;; 指针颜色设置为白色 (set-cursor-color "purple") ;; 鼠标颜色设置为白色 ;;(set-mouse-color "white") ;; 设置背景颜色和字体颜色 ;;(set-foreground-color "white") ;;(set-background-color "darkblue") ;; 设置另外一些颜色:语法高亮显示的背景和主题,区域选择的背景和主题,二次选择的背景和选择 ;;(set-face-foreground 'highlight "white") ;;(set-face-background 'highlight "blue") (set-face-foreground 'region "cyan") (set-face-background 'region "blue") (set-face-foreground 'secondary-selection "skyblue") (set-face-background 'secondary-selection "darkblue") ;;设置日历的一些颜色 (setq calendar-load-hook '(lambda () (set-face-foreground 'diary-face "skyblue") (set-face-background 'holiday-face "slate blue") (set-face-foreground 'holiday-face "white"))) ;;-------------------------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) ;;---------------------- END color setting --------------------- ;;设置emacs启动窗口大小 (setq default-frame-alist '((height . 32) (width , 50) (menu-bar-lines . 20) (tool-bar-lines . 0))) ;;Font ;;(set-default-font "10x20") ;;(set-default-font "STHeiti-10") (set-default-font "Droid Sans Mono-10") ;;(add-to-list 'default-frame-alist '(font . "STHeiti-10")) (add-to-list 'default-frame-alist '(font . "Droid Sans Mono-10")) ;;不要生成临时文件 (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) (set-keyboard-coding-system 'utf-8) ;;读取或写入文件名的编码方式 (setq file-name-coding-system 'utf-8) ;;打开就启用 text 模式 (setq default-major-mode 'text-mode) ;;禁用启动信息 (setq inhibit-startup-message t) ;; 取消自动保存 (auto-save-mode 0) ;;语法高亮 (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) ;;防止页面滚动时跳动, scroll-margin 3 可以在靠近屏幕边沿 ;;3行时就开始滚动,可以很好的看到上下文 (setq scroll-margin 3 scroll-conservatively 10000) ;;关闭烦人的出错时的提示声。 (setq visible-bell t) ;;以 y/n 替代 yes/no (fset 'yes-or-no-p 'y-or-n-p) ;;显示行列号 (column-number-mode t) ;;显示列号 (setq mouse-yank-at-point t) ;;用一个很大的 kill ring. 这样防止我不小心删掉重要的东西。 (setq kill-ring-max 200) ;;显示括号匹配 (show-paren-mode t) ;;隐藏工具栏 ;;(tool-bar-mode nil) ;;去掉菜单栏,将F10绑定为显示菜单栏,需要菜单栏了可以摁F10调出,再摁F10就去掉菜单 (menu-bar-mode nil) ;; 隐藏滚动条。实际上emacs-nox是没有这个模式的。 ;;(scroll-bar-mode nil) ;;光标靠近鼠标指针时,让鼠标指针自动让开 (mouse-avoidance-mode 'animate) ;;不要在鼠标光标出插入 (setq mouse-yank-at-point t) ;;高亮显示选中的区域 (transient-mark-mode t) ;;支持emacs和外部程序的拷贝粘贴 (setq x-select-enable-clipboard t) ;;在标题栏提示当前位置 (setq frame-title-format "Fiona@%b") ;;可以递归的使用 minibuffer (setq enable-recursive-minibuffers t) ;;显示80列就换行 ;;(add-hook 'message-mode-hook (lambda () ;;(setq default-fill-column 80) ;;(turn-on-auto-fill))) ;;禁止终端响铃 (setq visiable-bell t) ;;设置tab为4个空格的宽度 ;;(setq default-tab-width 4) ;;设置一下备份时的版本控制,这样更加安全。 (setq version-control t) (setq kept-new-versions 3) (setq delete-old-versions t) (setq kept-old-versions 2) (setq dired-kept-versions 1) ;;设置备份时的版本控制,这样更加安全。 (mapcar (function (lambda (setting) (setq auto-mode-alist (cons setting auto-mode-alist)))) '(("\\.xml{1}quot;. sgml-mode) ("\\\.bash" . sh-mode) ("\\.rdf{1}quot;. sgml-mode) ("\\.session" . emacs-lisp-mode) ("\\.l{1}quot; . c-mode) ("\\.css{1}quot; . css-mode) ("\\.cfm{1}quot; . html-mode) ("gnus" . emacs-lisp-mode) ("\\.idl{1}quot; . idl-mode))) ;;让 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的格式,我如下的格式所得的一个例子:<hans 05/18/2004 12:01:12> (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) ;;光标显示为一竖线 ;;(setq-default cursor-type 'bar) ;;使用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 '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 'cperl-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ÂÂ,ºÃñ÷[M`J3 ;;设置 sentence-end 可以识别中文标点。不用在 fill 时在句号后插 入两个空格。 (setq sentence-end "\\([。!?]\\|……\\|[.?!][]\"')}]*\\($\\|[ \t]\\)\\)[ \t\n]*") (setq sentence-end-double-space nil) ;;---------------------- End Chinese setting --------------------- ;;无论在什么样的主模式下都打开auto-fill模式 ;; (setq-default auto-fill-function 'do-auto-fill) ;;将文件模式和文件后缀关联起来。append表示追加 ( setq auto-mode-alist ( append '(("\\.py\\'" . python-mode) ("\\.s?html?\\'" . html-helper-mode) (" \\.asp\\'" . html-helper-mode) ("\\.phtml\\'" . html-helper-mode) ("\\.css\\'" . css-mode) ("\\.pc{1}quot; . c-mode) ) auto-mode-alist)) ;;窗口设置 ;;(gnus-add-configuration '(article (vertical 1.0 (summary .35 point) (article1.0)))) ;;Group Buffer设置 ;;自动进入Topic-mode (add-hook 'gnus-group-mode-hook 'gnus-topic-mode) ;;Sumarry Buffer设置 (setq gnus-summary-line-format ":%U%R %B %s %-60=|%4L |%-20,20f |%&user-date; \n") ;;Article Buffer设置 ;;设定要显示的头消息格式 (setq gnus-visible-headers "^\\(^To:\\|^CC:\\|^From:\\|^Subject:\\|^Date:\\|^Followup-To: \\|^X-Newsreader:\\|^User-Agent:\\|^X-Mailer: \\|Line:\\|Lines:\\|Content-Type:\\|NNTP-Posting-Host\\)") ;; session.el (require 'session) (add-hook 'after-init-hook 'session-initialize) ;;====================== 字体解码优先顺序 =====================; ;;从王垠那拷过来的,不用怎么再改吧。 ;;(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)) ;;---------------------- 字体解码优先顺序 --------------------- ;;鼠标滚轮,默认的滚动太快,这里改为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 appt-issue-message t) ;;********************** 全局按键设定 ********************* ;;设置[f1]为goto-line ;;(global-set-key [f1] 'info) ;;(global-set-key [f1] 'goto-line) (global-set-key [f2] 'eshell) ;;(global-set-key [f3] 'shell) (global-set-key [f3] 'goto-line) (global-set-key [f4] 'kill-this-buffer) ;;[f11] define to maximise present window ;;习惯设置,打开/关闭菜单 (global-set-key [f12] 'menu-bar-mode) ;;移动光标设置 (global-set-key [home] 'beginning-of-buffer) (global-set-key [end] 'end-of-buffer) ;;切换buffer的设置 (global-set-key [(control o)] 'other-window) (global-set-key [(control tab)] 'tabbar-forward) ;;********************** 常用编程配置 ********************* ;;热键设置 (global-set-key [f5] 'compile) (setq-default compile-command "make -k") (global-set-key [f6] 'speedbar) (global-set-key [f7] 'gdb) (global-set-key [f8] 'previous-error) (global-set-key [f9] 'next-error) ;;启动窗口gdb (global-set-key [f10] 'gdb-many-windows) ;;(global-set-key [f9] 'delete-window);F9 关闭d当前窗口 ;;(global-set-key [f8] 'other-window);F8窗口间跳转 ;;(global-set-key [(f2)] 'ansi-term);F2 切换到shell模式 ;;(global-set-key [f3] 'split-window-vertically);F3分割窗口 ;;(global-set-key [f12] 'my-fullscreen);F12 全屏 ;;(global-set-key [(f4)] 'compile);编译 ;;(global-set-key [f5] 'gdb);启动gdb ;;(global-set-key [(f6)] 'gdb-many-windows);启动窗口gdb ;;(global-set-key [f1] 'goto-line);设置M-g为goto-line ;;(global-set-key [f7] 'other-frame);跳到其它窗格 ;;(global-set-key [(f3)] 'speedbar);打开speedbar ;;########### CC-mode配置 http://cc-mode.sourceforge.net/ ################ ;;add-to-list 'load-path "~/.emacsd/cc-mode-5.31.3") ;; Use cperl mode instead of the default perl mode ;;(defalias 'c++-mode 'c-version) (add-to-list 'load-path "~/.emacs.d/plugins/cc-mode-5.31.3") (require 'cc-mode) (c-set-offset 'inline-open 0) (c-set-offset 'friend '-) (c-set-offset 'substatement-open 0) (setq indent-tabs-mode nil) (setq c-basic-offset 4 ) (setq default-tab-width 4) ;;Create MyCppStyle (defconst MyCppStyle '((c-tab-always-indent . t) ;; (c-comment-only-line-offset . 0) (c-hanging-braces-alist . ((substatement-open after) (brace-list-open))) (c-cleanup-list . (comment-close-slash compact-empty-funcall)) (c-offsets-alist . ((substatement-open . 0) (innamespace . 0) ;;在namespace中不缩进 (case-label . +) ;;case标签缩进一个c-basic-offset单位 (access-label . -) ;;private/public等标签少缩进一单位 ;; (inline-open . 0) ;;在.h文件中写函数,括号不缩进 (block-open . 0))) ;;在一个新块开始时不缩进 ;; (c-echo-syntactic-information-p t) (setq comment-start "/*" comment-end "*/") (setq indent-tabs-mode nil)) "My Cpp Coding Style") (c-add-style "MyCppStyle" MyCppStyle) ;;定义完自己的style,将其添加到cc-mode的style中。 ;;Define own hook (defun MyCppHook () (setq indent-tabs-mode nil) (setq global-hl-line-mode t) (c-set-style "MyCppStyle")) ;;设置这个hook对应于MyCppStyle (add-hook 'c++-mode-hook 'MyCppHook) ;;将此hook应用于所有的c++模式。 ;; 最后,可以设置对于不同的文件绑定不同的模式,可以用以下语句实现: ;;set *.h and *.c and *.cpp files use c++ mode (setq auto-mode-alist (cons '("\\.h{1}quot; . c++-mode) auto-mode-alist)) (setq auto-mode-alist (cons '("\\.c{1}quot; . c++-mode) auto-mode-alist)) (setq auto-mode-alist (cons '("\\.cpp{1}quot; . c++-mode) auto-mode-alist)) ;;输入左边的括号,就会自动补全右边的部分.包括(), '', [] , {} ,"" (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) (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) ;; (add-hook 'cperl-mode-hook 'my-c-mode-auto-pair) ;; (add-hook 'perl-mode-hook 'my-c-mode-auto-pair) ;;默认Linux内核编程风格,取自Linux内核说明文档 (setq auto-mode-alist (cons '("/usr/src/linux.*/.*\\.[ch]{1}quot; . linux-c-mode) auto-mode-alist)) (defun linux-c-mode () "C mode with adjusted defaults for use with the Linux kernel." (interactive) (c-mode) (c-set-style "K&R") (setq tab-width 4) ;;默认风格是8个缩进 (setq indent-tabs-mode t) (setq c-basic-offset 4)) ;;默认风格是8个缩进 ;;c-mode或cc-mode下缩进只有4格 (add-hook 'c-mode-hook '(lambda () (c-set-style "Stroustrup"))) ;;_____________C______________ ;;C预处理设置 (setq c-macro-shrink-window-flag t) (setq c-macro-preprocessor "c") (setq c-macro-cppflags " ") (setq c-macro-prompt-flag t) (setq abbrev-mode t) ;;(add-hook 'c-mode-common-hook 'my-c-mode-common-hook) ;;___________CPP______________ ;;CPP预处理设置 (setq c-macro-shrink-window-flag t) (setq c-macro-preprocessor "cpp") (setq c-macro-cppflags " ") (setq c-macro-prompt-flag t) (setq abbrev-mode t) ;;(add-hook 'c-mode-common-hook 'my-c-mode-common-hook) ;;下面这句是自动换行 ;;(c-toggle-auto-hungry-state 1) ;;(c-set-style "stroustrup") ;;(add-hook 'c-mode-common-hook 'program-mode) ;;(add-hook 'c++-mode-common-hook 'program-mode) ;;从《perl语言最佳实践》中摘录的配置信息 ;;====================== CPerl-Mode ===================== ;; Use cperl mode instead of the default perl mode (defalias 'perl-mode 'cperl-mode) ;;(add-to-list 'auto-mode-alist '("\\.\\([pP][Llm]\\|al\\)\\'" . cperl-mode)) ;;(add-to-list 'interpreter-mode-alist '("perl" . cperl-mode)) ;;(add-to-list 'interpreter-mode-alist '("perl5" . cperl-mode)) ;;(add-to-list 'interpreter-mode-alist '("miniperl" . cperl-mode)) ;; turn autoindenting on (global-set-key "\t" 'newline-and-indent) ;; Use 4 space indents via cperl mode (custom-set-variables '(cperl-close-paren-offset -4) ;;'(cperl-continued-statement-offset 4) '(cperl-indent-level 4) '(cperl-indent-parens-as-block t) '(cperl-tab-always-indent t)); ;;Since I do not like the default indentations, I have the followings: ;;(add-hook 'cperl-mode-hook 'n-cperl-mode-hook t) ;;(defun n-cperl-mode-hook () ;; (setq cperl-indent-level 4) ;; (setq cperl-continued-statement-offset 0) ;; (setq cperl-extra-newline-before-brace t) ;;(set-face-background 'cperl-array-face "wheat") ;;(set-face-background 'cperl-hash-face "wheat") ;; Set line width to 78 columns.. ;;(setq fill-column 78) (setq fill-column 80) (setq auto-fill-mode t) ;; use % to match various kinds of brackets... ;; See: http://www.lifl.fr/~hodique/uploads/Perso/patches.el (global-set-key "%" 'match-paren) (defun match-paren (arg) "Go to the matching paren if on a paren; otherwise insert %." (interactive "p") (let ((prev-char (char-to-string (preceding-char))) (next-char (char-to-string (following-char)))) (cond ((string-match "[[{(<]" next-char) (forward-sexp 1)) ((string-match "[\]})>]" prev-char) (backward-sexp 1)) (t (self-insert-command (or arg 1)))))) ;; Load an application template in a new unattached buffer... (defun application-template-pl () "Inserts the standard Perl application template"; For help and info. (interative "*") ; Make this user accessible. (switch-to-buffer "application-template-pl") (insert-file "~/.code_templates/perl_application.pl")) ;; Set to a specific key combination... (global-set-key "\C-ca" 'application-template-pl) ;; Load a module template in a new unattached buffer... (defun modelu-template-pm () "Insert the standard Perl modelu template" ; For help and info. (interactive "*") ; Make this user accessible. (switch-to-buffer "module-template-pm") (insert-file "~/.code_templates/perl_module.pm")) ;; Set to a specific key combination... ;; Expand the following abbreviations while typing in text files... (abbrev-mode 1) (define-abbrev-table 'global-abbrev-table '( ("pdbg" "use Data:: Dumper qw( Dumper );\nwarn Dumper[];" nil l) ("phbp" "#! /usr/bin/perl -w" nil 1) ("pbmk" "use Benchmark qw( cmpthese );\ncmpthese -10, {};" nil 1) ("pusc" "use Smart::Comments;\n\n### " nil 1) ("putm" "use Test::More 'no_plan';" nil 1) )) ;;输入左边的括号,就会自动补全右边的部分.包括(), '', [] , {} ,""同cc-mode设置部分 (require 'cperl-mode) (defun 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) (local-set-key (kbd "\"") 'skeleton-pair-insert-maybe)) (add-hook 'cperl-mode-hook 'auto-pair) (add-hook 'perl-mode-hook 'auto-pair) ;;---------------------- End CPerl-Mode --------------------- ;;====================== 自动补全功能 ===================== ;;自动补全功能,这事从王垠的网站直接Copy过来的,引用一些他对此的说明 ;;设置以下 hippie-expand 的补全方式。它是一个优先列表, hippie-expand 会优先使用表最前面 ;;的函数来补全这是说,首先使用当前的buffer补全,如果找不到,就到别的可见的窗口里寻找,如 ;;还找不到,那么到所有打开的buffer去找,如果还……那么到kill-ring里,到文件名,到简称列表 ;;里,到list,当前使用的匹配方式会在 echo 区域显示。 ;;特别有意思的是 try-expand-line,它可以帮你补全整整一行文字。我很多时后有两行文字大致相 ;;同,只有几个字不一样,但是我懒得去拷贝粘贴以下。那么我就输入这行文字的前面几个字。然后 ;;多按几下 M-/ 就能得到那一行。 ;;hippie的自动补齐策略,优先调用了senator的分析结果: (autoload 'senator-try-expand-semantic "senator") (global-set-key [(meta ?/)] 'hippie-expand) (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)) ;;自定义自动补齐命令,这部分是抄hhuu的,如果在单词中间就补齐,否则就是tab。 (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) ;;---------------------- End 自动补全 --------------------- ;;====================== 拷贝代码自动格式化 ===================== ;;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)))))) ;;---------------------- End 拷贝代码自动格式化 --------------------- ;;********************** 常用编程插件 ********************* ;;====================== google-c-style ===================== (load-file "~/.emacs.d/plugins/google-c-style.el") (add-hook 'c-mode-common-hook 'google-set-c-style) (add-hook 'c-mode-common-hook 'google-make-newline-indent) ;;---------------------- END google-c-style --------------------- ;;====================== auto-header ===================== (add-to-list 'load-path "~/.emacs.d/plugins/") (require 'auto-header) ;;加载auto-header.el文件,自动添加文件头 (require 'auto-header) ;; 设置文件头中的姓名 (setq header-full-name "吴旭") ;; 设置邮箱 (setq header-email-address "admirestator#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 )) ;;---------------------- END auto-header --------------------- ;;====================== Load cedet ===================== ;; See cedet/common/cedet.info for configuration details. (load-file "~/.emacs.d/plugins/cedet-1.0pre7/common/cedet.el") ;; Enable EDE (Project Management) features (global-ede-mode 1) ;; Enable EDE for a pre-existing C++ project ;; (ede-cpp-root-project "NAME" :file "~/myproject/Makefile") ;; Enabling Semantic (code-parsing, smart completion) features ;; Select one of the following: ;; * This enables the database and idle reparse engines (semantic-load-enable-minimum-features) ;; * This enables some tools useful for coding, such as summary mode ;; imenu support, and the semantic navigator ;;(semantic-load-enable-code-helpers) ;; * This enables even more coding tools such as intellisense mode ;; decoration mode, and stickyfunc mode (plus regular code helpers) ;; (semantic-load-enable-gaudy-code-helpers) ;; * This enables the use of Exuberent ctags if you have it installed. ;; If you use C++ templates or boost, you should NOT enable it. ;; (semantic-load-enable-all-exuberent-ctags-support) ;; Or, use one of these two types of support. ;; Add support for new languges only via ctags. ;; (semantic-load-enable-primary-exuberent-ctags-support) ;; Add support for using ctags as a backup parser. ;; (semantic-load-enable-secondary-exuberent-ctags-support) ;; Enable SRecode (Template management) minor-mode. ;; (global-srecode-minor-mode 1) ;;---------------------- END cedet --------------------- ;;====================== Load ecb ===================== (add-to-list 'load-path "~/.emacs.d/plugins/ecb-2.40") (require 'ecb) (require 'ecb-autoloads) ;;打开emacs,然后M-x ecb-activate即可打开ecb。 ;;---------------------- END ecb --------------------- ;;====================== Load cscope ===================== (add-to-list 'load-path "~/emacs.d/plugins/cscope-15.7a/contrib/xcscope/") (require 'xcscope) ;;如果工程十分庞大,即使是判断文件更新与否也很费时,可以告诉 Emacs 别自 动更新 cscope.out: ;;(setq cscope-do-not-update-database t) ;;先M-x !,然后cscope -b,之后就可以在源代码中进行跳转了。命令见cscope菜单 ;;这里有篇讲怎么在emacs下安装和使用cscope的: ;;http://ann77.stu.cdut.edu.cn/EmacsCscope.html ;;---------------------- END cscop --------------------- ;;====================== Load color-theme ===================== ;;配色方案 (load-file "~/.emacs.d/plugins/color-theme.el") (require 'color-theme) ;;(color-theme-initialize) ;;(color-theme-comidia) ;;(color-theme-midnight) ;;(color-theme-renegade) ;;-->(color-theme-taming-mr-arneson) ;; (color-theme-dark-laptop) ;;(color-theme-calm-forest) ;;---------------------- END color-theme --------------------- ;;====================== `Load gdb-many-window ===================== ;;gdb-many-window ;;这个功能插件可以使emacs的调试界面像VC一样,有watch, stacktrace等窗口,真正实现图形化gdb. ;;在emacs中编译好程序,然后M-x gdb,连按两次ret,多窗口gdb就出来了 ;;http://www.inet.net.nz/~nickrob/multi-gud.el ;;http://www.inet.net.nz/~nickrob/multi-gdb-ui.el (add-to-list 'load-path"~/.emacs.d/plugins") (setq gdb-many-windows t) (load-library "multi-gud.el") (load-library "multi-gdb-ui.el") ;;---------------------- END gdb-many-window --------------------- ;;====================== Load linum ===================== ;;调用linum.el(line number)来显示行号: ;;(add-to-list 'load-path"~/.emacs.d/plugins") (require 'linum) (global-linum-mode 1) ;;---------------------- END linum --------------------- ;;====================== Load Doxymacs ===================== ;;(require 'doxymacs) ;;(add-hook 'c-mode-common-hook 'doxymacs-mode) ;;(defun my-doxymacs-font-lock-hook () ;;(if (or (eq major-mode 'c-mode) (eq major-mode 'c++-mode)) ;; (doxymacs-font-lock))) ;; (add-hook 'font-lock-mode-hook 'my-doxymacs-font-lock-hook) ;; This will add the Doxygen keywords to c-mode and c++-mode only. ;;- Default key bindings are: ;; - C-c d ? will look up documentation for the symbol under the point. ;; - C-c d r will rescan your Doxygen tags file. ;; - C-c d f will insert a Doxygen comment for the next function. ;; - C-c d i will insert a Doxygen comment for the current file. ;; - C-c d ; will insert a Doxygen comment for the current member. ;; - C-c d m will insert a blank multi-line Doxygen comment. ;; - C-c d s will insert a blank single-line Doxygen comment. ;; - C-c d @ will insert grouping comments around the current region. ;;---------------------- END Doxymacs --------------------- ;;====================== Load yasnippet ===================== ;;自动补全代码插件 (add-to-list 'load-path"~/.emacs.d/plugins") (require 'yasnippet-bundle) ;; not yasnippet-bundle (yas/initialize) (yas/load-directory "~/.emacs.d/plugins/") (require 'dropdown-list) (setq yas/prompt-functions '(yas/dropdown-prompt yas/ido-prompt yas/completing-prompt)) ;;---------------------- END yasnippet --------------------- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;FROM THE OpenSUSE11.3;;;;;;;;;;;;;;;;;;;;;;;;; ;;; File name: ` ~/.emacs ' ;;; --------------------- ;;; ;;; If you need your own personal ~/.emacs ;;; please make a copy of this file ;;; an placein your changes and/or extension. ;;; ;;; Copyright (c) 1997-2002 SuSE Gmbh Nuernberg, Germany. ;;; ;;; Author: Werner Fink, <feedback@suse.de> 1997,98,99,2002 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; ;;; Test of Emacs derivates ;;; ----------------------- (if (string-match "XEmacs\\|Lucid" emacs-version) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; XEmacs ;;; ------ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (progn (if (file-readable-p "~/.xemacs/init.el") (load "~/.xemacs/init.el" nil t)) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; GNU-Emacs ;;; --------- ;;; load ~/.gnu-emacs or, if not exists /etc/skel/.gnu-emacs ;;; For a description and the settings see /etc/skel/.gnu-emacs ;;; ... for your private ~/.gnu-emacs your are on your one. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (if (file-readable-p "~/.gnu-emacs") (load "~/.gnu-emacs" nil t) (if (file-readable-p "/etc/skel/.gnu-emacs") (load "/etc/skel/.gnu-emacs" nil t))) ;; Custom Settings ;; =============== ;; To avoid any trouble with the customization system of GNU emacs ;; we set the default file ~/.gnu-emacs-custom (setq custom-file "~/.gnu-emacs-custom") (load "~/.gnu-emacs-custom" t t) ;;; ) ;;;
备注:
本文部分摘自:
http://blog.csdn.net/shuxiao9058/article/details/7106467
http://www.cnblogs.com/doveyid/archive/2011/09/06/2169126.html
相关文件下载:
http://115.com/file/be4qnzxa# emacs配置文件1
http://115.com/file/c2b72kz8# emacs配置文件2
http://115.com/file/be4qezd3# google-c-style.el
http://115.com/file/e7hd9mux# auto-header.el
http://115.com/file/an4684vt# multi-gud.el
http://115.com/file/dpygjxnu# multi-gdb-ui.el
http://115.com/file/c2b7cb4h# color-theme.el