注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

My Unix World

不要迷恋Unix,Unix只是计算世界很小的一部分!

 
 
 

日志

 
 

【Copy】王春宇的emacs学习笔记  

2009-01-02 17:45:19|  分类: L-Emacs |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Emacs 使用笔记

Author: Wang Chunyu 
File : $Id: notes-emacs,v 1.134 2004/09/11 05:48:50 spr Exp $
URL : http://db.cs.hit.edu.cn/people/WangChunyu/interests/m/em/mposts/note002.html
===>>> 如果你第一次看这里,记得从下往上看 :) <<<===
----
Gnus agent file coding system

gnus-agent-file-coding-system

----
直接用文件名打开文件

filecache 包提供了直接用文件名打开文件的方法,不用关心文件在那个目录里
面。在打开文件时,minibuffer 中按 C-tab,直接打开相应文件。

(eval-after-load "filecache"
'(progn (file-cache-add-directory-using-find "~/projects")
(file-cache-add-directory-list '("~/work" "~/work/proj1" "~/work/proj2"))
(file-cache-add-file-list (list "~/foo/bar" "~/baz/bar"))))

(define-key minibuffer-local-completion-map [C-tab] 'file-cache-minibuffer-complete)
(define-key minibuffer-local-map [C-tab] 'file-cache-minibuffer-complete)
(define-key minibuffer-local-must-match-map [C-tab] 'file-cache-minibuffer-complete)

----
修改文件名补全后缀

(setq completion-ignored-extensions
(append '(".bin" ".ext" ".free")
completion-ignored-extensions))
(delete ".log" completion-ignored-extensions)

----
在 Windows XP 上使用的字体

(create-fontset-from-fontset-spec
(concat
"-*-Courier New-normal-r-*-*-13-*-*-*-c-*-fontset-chinese,"
"chinese-gb2312:-*-MS Song-normal-r-*-*-14-*-*-*-c-*-gb2312*-*"))
(create-fontset-from-fontset-spec
(concat
"-*-Courier New-bold-r-*-*-13-*-*-*-c-*-fontset-chinesebold,"
"chinese-gb2312:-*-MS Song-bold-r-*-*-14-*-*-*-c-*-gb2312*-*"))
(setq default-frame-alist
'((font . "fontset-chinese")))
(set-face-font 'bold "fontset-chinesebold")

----
pop up marks

(global-set-key "\C-z" 'set-mark-command)
(global-set-key "\C-x\C-p" 'pop-global-mark)

C-u C-z cycle in local buffer mark ring.
C-x C-p cycle in global mark ring.

----
工具栏添加 LaTeX 文档的章节索引

使用 AUCTeX 和 RefTeX 编辑 LaTeX 文件时,如果你喜欢用鼠标,不妨试试这个,
可以在工具栏添加一个“Index”菜单,直接在你的章节之间跳转。

M-x imenu-add-menubar-index 或者
(setq reftex-load-hook (quote (imenu-add-menubar-index)))
(setq reftex-mode-hook (quote (imenu-add-menubar-index)))

----
退出 picture mode 可以用 C-c C-c

据说是一个没有文档的键。

----
find tags

M-. find-tag
C-M-. find-tag-regexp

C-x 4 . find-tag-other-window
C-x 5 . find-tag-other-frame

----
sexp operate

backward-kill-sexp M-C-BACKSPACE
backward-sexp C-M-b
eval-last-sexp C-x C-e
eval-print-last-sexp M-x eval-print-last-sexp RET
forward-sexp C-M-f
indent-pp-sexp M-x indent-pp-sexp RET
indent-sexp M-x indent-sexp RET
kill-sexp C-M-k
last-sexp-toggle-display M-x last-sexp-toggle-display RET
mark-sexp C-M-SPC, C-M-@
pp-eval-last-sexp M-x pp-eval-last-sexp RET
raise-sexp M-x raise-sexp RET
transpose-sexps C-M-t

----
Abbrev misc

M-' abbrev-prefix-mark
C-x ' expand-abbrev
C-M-/ dabbrev-completion

----
分栏编辑

C-x 6 2C-command
C-x 6 s 2C-split
C-x 6 b 2C-associate-buffer
C-x 6 2 2C-two-columns

----
调整窗口

C-x + balance-windows
C-x - shrink-window-if-larger-than-buffer

----
不太常用,但比较有用的键

C-x TAB indent-rigidly
M-^ delete-indentation

C-x C-n set-goal-column
C-x ; comment-set-column

C-x < scroll-left
C-x > scroll-right
C-x [ backward-page
C-x ] forward-page

C-x l count-lines-page
C-x = what-cursor-position

C-M-S-v scroll-other-window-down

Register&Bookmark:
C-x r l bookmark-bmenu-list
C-x r r copy-rectangle-to-register
C-x / point-to-register-compatibility-binding
C-x g insert-register-compatibility-binding
C-x j jump-to-register-compatibility-binding
C-x x copy-to-register-compatibility-binding
M-r move-to-window-line

----
不太常用,但没什么用的键

C-x C-d list-directory
C-x C-r find-file-read-only
C-x i insert-file
C-x LEFT prev-buffer
C-x RIGHT next-buffer
M-g facemenu-keymap

----
用某个编码重新加载文件

C-x C-m r ... RET (revert-buffer-with-coding-system)

----
GNU Emacs (CVS) 的键盘宏(keyboard macro)

CVS 中的 Emacs 增加了一个 kmacro 包,扩展了原来的键盘宏的功能,增加了内
置的计数器、键盘宏单步执行工具、用 kmacro-ring 保存多个宏。

C-x C-k SPC “调试”定义的宏很方便。

C-x C-k {C-p,C-n,C-v}+ 选定要执行的宏之后,按 {C-k}+ 就执行了,还可以再
按{C-p,C-n}+ 再选定,再执行;{C-d} 删除选定的宏。

C-x C-k {C-m,RET,C-e} 相当于原来的 C-x C-k,直接编辑最后一个定义的宏。

定义键盘宏时,用 C-x q 来提示是否继续,用 C-u C-x q 可以输入任意的内容
(C-M-c 退出递归编辑)。

C-x C-k b 可以把刚刚定义的宏绑定到一个键上,默认的 [0-9A-Z] 用来绑定相
应的 C-x C-k [0-9A-Z]。

C-x C-k r 在 region 中执行宏。

C-x C-k n 命名最后一个定义的宏。命名之后,可以用 M-x insert-kbd-macro
保存到文件,以便以后使用。

F3 可以象 C-x ( 一样开始键盘宏的定义,也可一象 C-x C-k C-i 一样插入内置
计数器的值。F4 可以象 C-x ) 一样结束宏的定义,也可以象 C-x e 一样调用宏。

键盘宏的内置计数器:

C-x C-k {C-i,TAB} 插入计数器的值,每次插入都增加1或前缀参数大小;
C-x C-k C-a 增加计数器的值,提示输入或前缀参数大小;
C-x C-k C-c 设置计数器的值,提示输入或前缀参数大小;
C-x C-k C-f 设置插入计数器值的格式。

from emacswiki:
想定义宏的时候不需要 C-x ( ... C-x ),只须做一遍你的宏,然后用 C-x
C-k l,从中去掉不要的内容,添一个名字和绑定的键,最后 C-c C-c。

----
添加自己的关键字

font-lock-add-keywords

(font-lock-add-keywords 'c-mode
'(("\\<\\(FIXME\\):" 1 font-lock-warning-face prepend)
("\\<\\(and\\|or\\|not\\)\\>" . font-lock-keyword-face)))

----
有选择查看:selective-display

比如这个文件,用

M-1 C-x $

则只显示每一条的主题,省略内容

,----[ M-1 C-x $ ]
| ----
| 修改 Emacs 的错误提示音
| ...
| ----
| 生成 Emacs 对话框
| ...
| ----
| 这样移动缓冲也不错
| ...
| ----
| keywiz 游戏
| ...
`----

实际上是通过缩进量,对“行”选择.只显示行首在某列以内的行

M-2 C-x $ 行首在前 2 列内的
M-4 C-x $ 行首在前 4 列内的
C-x $ 取消

----
修改 Emacs 的错误提示音

(set-message-beep 'silent)

系统: 'asterisk, 'exclamation, 'hand, 'question, 'ok
无声: 'silent
机器喇叭:nil

----
生成 Emacs 对话框

(if (yes-or-no-p "Are you feeling well? ")
(message "You appear to be feeling well.")
(message "Hope you will get better soon!"))

(if (x-popup-dialog t '("Are you feeling well?" ("Yes" . t) ("No" . nil)))
(message "You appear to be feeling well.")
(message "Hope you will get better soon!"))

----
这样移动缓冲也不错

随时移动,不需要 view mode,可惜是需要上下键:
(global-set-key [M-down] '(lambda () (interactive) (scroll-up 1)))
(global-set-key [M-up] '(lambda () (interactive) (scroll-down 1)))

----
keywiz 游戏

kbd-macro-query
Query user during kbd macro execution.
Nope. The correct answer is: C-x q

repeat-complex-command
Edit and re-evaluate last complex command, or ARGth from last.
Incorrect. The correct answer is: , , C-x M-:, C-x M-ESC

----
CDLaTeX 的 *CDLaTeX Help* 问题

C-c ? 打开的 *CDLaTeX Help* 缓冲,缺省打开了 view mode,而后来的“'”,
“`”命令的提示都使用并修改这个缓冲的内容,但 view mode 不可修改,以至
发生错误。

在其中的 cdlatex-turn-on-help 函数修改了一下,暂时解决这个毛病:
"(erase-buffer)" 之前加一句 "(view-mode -1)"。

[URL:http://zon.astro.uva.nl/~dominik/Tools/cdlatex/]

----
替换文件名中的环境变量

(substitute-in-file-name "$HOME/.emacs.d/.emacs.el")

----
高亮显示 C/C++ 中的可能的错误(CWarn mode)

配置:(global-cwarn-mode 1)
手动:M-x cwarn-mode
参考:C-h v cwarn-configuration

----
数字键直接作为前缀参数的全局子模式 (Autoarg mode)

配置:(autoarg-mode 1)
手动:M-x autoarg-mode & autoarg-kp-mode
参考:Commentary in emacs/lisp/autoarg.el

任何模式下的数字全都是前缀参数了,M-2 C-n 只需 2 C-n;但想输入数字时,
得用 C-2 C-3 或 23 SPC。

----
Windows 上 Emacs 启动时最大化

Windows 注册表中添加 (不要 toolbar):
HKEY_LOCAL_MACHINE\SOFTWARE\GNU\Emacs\EMACS.Toolbar=0 (REG_SZ)
.emacs.el 中:
(w32-send-sys-command #xf030)

----
BibTeX 自动产生的 key 的方法

参考:C-h f bibtex-generate-autokey RET

----
yap, gnserv, emacs 反向查找

yap: view->options->Inverse Search->Command line 中:
"gnuclientw.exe" "-q" "+%l" "%f"

GNUSERV setup:
(gnuserv-start)
(setq gnuserv-frame (selected-frame))
(setenv "GNUSERV_SHOW_EMACS" "1")

----
Calendar 中显示农历节日

(setq local-holidays
'((holiday-chinese 1 15 "元宵节 (正月十五)")
(holiday-chinese 5 5 "端午节 (五月初五)")
(holiday-chinese 9 9 "重阳节 (九月九)")
(holiday-chinese 8 15 "中秋节 (八月十五)")))

(autoload 'chinese-year "cal-china" "Chinese year data" t)

(defun holiday-chinese (cmonth cday string)
"Chinese calendar holiday, month and day in Chinese calendar (CMONTH, CDAY).

If corresponding MONTH and DAY in gregorian calendar is visible,
the value returned is the list \(((MONTH DAY year) STRING)).
Returns nil if it is invisible in the current calendar window."
(let* ((m displayed-month)
(y displayed-year)
(gdate (calendar-gregorian-from-absolute
(+ (cadr (assoc cmonth (chinese-year y))) (1- cday)))))
(increment-calendar-month m y (- 11 (car gdate)))
(if (> m 9) (list (list gdate string)))))

----
查看 frame 参数

(frame-parameter nil 'width)
(frame-parameter nil 'height)
(frame-parameter nil 'left)
(frame-parameter nil 'top)
放在 default-frame-alist 中的四个参数,先调整、查看,再修改

或者更直接的:
(frame-parameters nil)

----
设置 C Source 目录

(setq find-function-C-source-directory "~/work/emacs/src")

----
不显示 HTML 中的标签

HTML-mode:
C-x C-i (sgml-tags-invisible)

----
颠倒一块文本

M-x reverse-region 以行为单位颠倒文本

----
BibTeX 管理 bib 文件

添加、修改很方便。from o8o@smth:
1. 可以根据需要插入一个模板 (参考 C-c C-e C-h);
2. 可以方便清除模板中不需要的项目 (C-c C-c);
3. 插入后可以生成一个自己需要的 Key (自动或手动的);
4. 可以根据 Key 把参考文献排序插入,不用担心重复查入同一条文献
(C-h v bibtex-maintain-sorted-entries);
5. 在各个项中移动很方便 (TAB & C-j)。

----
RefTeX 管理/浏览/调整 TeX 文件中的章节、标签、引用、索引等

可以和 AUCTeX 配合使用。
(setq reftex-plug-into-AUCTeX t)
(add-hook 'TeX-mode-hook 'turn-on-reftex)

还可以再 TeX buffer 中创建索引、标签、引用等。

----
插入 -*- MODENAME -*- 标签

(defun chunyu-insert-file-variable ()
"Insert file variable string \"-*- Major-Mode-Name -*-\" with
comment char"
(interactive)
(insert
(concat comment-start " -*- "
(substring
(symbol-name (symbol-value 'major-mode)) 0 -5)
" -*- " comment-end)))

----
CVS AUCTeX 中有 ConTeXt 模式

不需要自己装了,而且绑定和 LaTeX-mode 差不多。

export CVS_RSH="ssh"
cvs -z3 -d:ext:anoncvs@savannah.gnu.org:/cvsroot/auctex co auctex
cd auctex && ./autogen.sh && ./configure
(如果在 Windows 上,编辑 Makefile, doc/Makefile,修改其中的 info,
prefix 目录)
make && make install

----
feedmail instead of fakemail

feedmail package 似乎可以代替 fakemail.exe 发信,不过还不清楚如何配置。

可惜如果在 Windows 上,需要 sh.exe 和 rmail.exe 等:(。

----
去掉 .emacs 中不再需要的绑定(现在很少使用了)

(define-prefix-command 'ctl-x-m-map)
(global-set-key "\C-xm" 'ctl-x-m-map)
(define-key ctl-x-m-map "e" 'cvs-examine)
(define-key ctl-x-m-map "m" 'man-follow)
(define-key ctl-x-m-map "g" 'run-scheme)
(define-key ctl-x-m-map "b" 'list-bookmarks)
(define-key ctl-x-m-map "l" 'browse-kill-ring)
(define-key ctl-x-m-map "a" 'align-current)

----
Commentary of emacs-cvs/lisp/iimage.el

should be:
(autoload 'iimage-mode "iimage" "Inline image." t)
(autoload 'turn-on-iimage-mode "iimage" "Inline image." t)
;; ``I''nfo-mode-hook
(add-hook 'Info-mode-hook 'turn-on-iimage-mode)

----
使用 gnuserv.exe 少不了的参数:

(gnuserv-start)
(setq gnuserv-frame (selected-frame))
(setenv "GNUSERV_SHOW_EMACS" "1")

----
当前终端能否显示支持的字体(判断图形终端的令一个方法)

(display-multi-font-p)

Return non-nil if DISPLAY is a graphic display.
(display-multi-font-p &optional DISPLAY)

----
通过 smbclient 在 Linux box 上给 Windows box 发送 net message

Linux -> Windows (Net-Message) in Emacs:

M-| smbclient -M 机器名

或者直接:
cat "Hello!" | smbclient -M 机器名

----
Outline minor mode 的键前缀

缺省的:

C-c @

或者自己修改:

(setq outline-minor-mode-prefix "\C-c\C-o")

----
Windows 上用相关联的程序打开文件

(eval-after-load "dired"
'(progn
;; Dired 原来的 “o” 对我来说基本没用。
(define-key dired-mode-map "o" 'chunyu-dired-open-explorer)))

(defun chunyu-dired-open-explorer ()
(interactive)
(let ((file-name (dired-get-file-for-visit)))
(if (file-exists-p file-name)
(w32-shell-execute "open" file-name nil 1))))

原来使用 cmd.exe 的 start 命令,但路径中不能有空格。这个
w32-shell-execute 就没问题了,还不错。

此外,从另一个人的 .emacs 中学来的,可以同时打开所有做标记的文件:
(defun dired-execute-file (&optional arg)
(interactive "P")
(mapcar #'(lambda (file) (w32-shell-execute "open" file))
(dired-get-marked-files nil arg)))

而且可以绑定到鼠标上,用鼠标中键(mouse-2)或双击(double-mouse-1)打开:
(define-key dired-mode-map [mouse-2] 'dired-mouse-execute-file)
(defun dired-mouse-execute-file (event)
"In dired, execute the file or goto directory name you click on."
(interactive "e")
(set-buffer (window-buffer (posn-window (event-end event))))
(goto-char (posn-point (event-end event)))
(dired-execute-file))

----
使用 Windows 上的左右 Win 键

(setq w32-pass-rwindow-to-system nil)
(setq w32-rwindow-modifier 'hyper)
(setq w32-pass-lwindow-to-system nil)
(setq w32-lwindow-modifier 'hyper)

例如:
(global-set-key [(hyper ?z)] 'compile)

----
Dumping emacs 的参数

#!/bin/sh
MYEMACS=$1
./$MYEMACS --batch --load ~/.emacs.d/.emacs.el \
--execute "(dump-emacs \"mymacs\" \"$MYEMACS\")"

----
几个 list 命令,列出一些变量

M-x list-colors-display RET
M-x list-faces-display RET

(setq list-faces-sample-text
"赵钱孙李 周吴郑王 abcdefg..z ABCDEFG..Z")

M-x list-charset-chars
M-x list-character-sets
M-x list-load-path-shadows
M-x list-options
M-x list-color-display
M-x list-registers
M-x list-command-history
M-x list-processes
M-x list-input-method

----
CVS Emacs 查看 utf-8

M-x utf-translate-cjk-mode
(utf-translate-cjk-mode 1)

----
执行 cmd.exe 的 start 命令

(start-process "dir" nil "cmd.exe" "/c" "start" "c:")
当然,用 w32-shell-execute 更好些。

----
beginning-of-buffer 的前缀参数

M-2 M-x beginning-of-buffer RET (M-2 M-<) 缓冲首 20%
M-5 M-x beginning-of-buffer RET (M-5 M-<) 缓冲首 50%

----
显示位点附近 elisp 函数的定义

M-x eldoc-mode RET

写 elisp 时应该比较有用,实时提示函数的定义格式。

----
查看当前字符的 face

M-x describe-text-properties RET
Find which face is being used at the point.

M-x describe-face RET

----
使 search-ring 称为 buffer-local 的

这样 search 的历史根据 buffer 而不同。

(make-variable-buffer-local 'search-ring)
;; (make-variable-buffer-local 'isearch-string)

make C-s C-s ... search with strings in buffer local search ring.

----
历史命令的 elisp 列表

M-x command-history RET

----
清理 current emacs session

M-x clean-buffer-list RET

M-x kill-some-buffers RET

or kill-all-buffers:
(defun kill-all-buffers ()
(interactive)
(map 'nil #'kill-buffer (buffer-list)))

----
查看因 load-path 被覆盖的 el 文件

M-x list-load-path-shadows

----
ff-find-other-file:

Daniel> Hello, I would like a script that I can bind to Ctrl-Shift-h
Daniel> that will switch from a .cpp file to the associated .h file,
Daniel> if there is one. For example, if I have Hash.cpp opened and
Daniel> press the selected keys, emacs switches to Hash.h. If there is
Daniel> no Hash.h nothing is done. Any help appreciated. Thanks!

Daniel> -- Daniel

另外:ff-find-related-file

----
hideshow minor mode

hs-minor-mode

----
重复前一个复杂命令

C-x Esc Esc
C-x M-:

----
在 .emacs 中设置缺省的 TAGS 文件

(visit-tags-table "/path/to/table")

----
M-; 灵活注释 (C-h k M-;)

如果 transient-mark-mode 开启并且 region 有效: comment-region
但如果只有注释: uncomment-region
否则,如果当前行为空行,插入一个注释, 并缩进: ...
否则,如果给定前缀参数: comment-kill
否则: comment-indent

----
M-x toggle-debug-on-quit

碰到停下来的时候C-q,一般能看到什么地方出的问题。

----
转换当前 buffer 的修改标记(Modification-flag)

M-~ / C-u M-~ not-modified

----
C-x @: event-apply-*-modifier

C-x @ c event-apply-control-modifier
C-x @ S event-apply-shift-modifier
C-x @ a event-apply-alt-modifier
C-x @ m event-apply-meta-modifier
C-x @ s event-apply-super-modifier
C-x @ h event-apply-hyper-modifier

----
find-function-setup-keys 提供的几个键,直接找到lisp中函数或变量的定义位置

(find-function-setup-keys) which sets up some shortcuts.
C-x [4,5] F find-function
C-x [4,5] V find-variable
C-x K find-function-on-key

----
消除错误提示音(ring-bell)

方法1: 用屏幕闪烁代替 ring bell
(setq visible-bell 1)

方法2: 修改 ring bell 函数
(setq ring-bell-function 'ignore)

方法3: 修改 message 声音
(set-message-beep 'silent)

----
用 C-x RET c 编码、保存,改变文件的 dos/unix 格式

(先把文件改动一下,或者用 C-u M-~ 把文件设置为已改动)
C-x RET c chinese-iso-8bit-dos RET C-x C-s
不论原来是什么都保存为 dos 格式;

(改动一下文件)
C-x RET c chinese-iso-8bit-unix RET C-x C-s
不论原来是什么都保存为 unix 格式。

这个命令还可以用来以某种编码打开文件……

----
编辑已经提交的 CVS log。

>>>>> "Luc" == Luc Teirlinck writes: Is there
> a reasonably easy way to correct the per file CVS log entry for an
> already committed change? I inadvertently forgot a per file

Use PCL-CVS's `l' command to get the log and then hit `e'
(or M-x cvs-mode-edit-log) on the log entry you want to change.

Stefan
> The only way to change a CVS log entry is to edit the repository. The
> cvs frontend does not allow that.

cvs admin -m:

Stefan

----
几个设置 mark 的键

M-C-SPC mark-sexp 标记一个表达式
M-@ mark-word 标记一个词
M-h mark-paragraph 标记一整段
C-M-h mark-defun 标记一个函数的定义

这些命令重复按的时候,region 每次都会扩展。比如 M-h M-h 相当于 M-2 M-h。
之前加一个 C-SPC C-SPC 打开 transient-mark-mode 看的更清楚。

----
暂时打开 transient-mark-mode 的两种方法:

C-SPC C-SPC 两次 set-mark-command
C-u C-x C-x 交换 mark 和 point 时用 C-u 前缀

----
Emacs 添加行号,使用 setnu.el

http://www.zipworld.com.au/~peterm/download/setnu.el

----
info path

(add-to-list 'Info-default-directory-list "d:/MinGW/info")

----
align: (文档在 emacs/lisp/align.el 的注释中)

将下面的格式: int a = 1;
short foo = 2;
double blah = 4;

自动改为格式: int a = 1;
short foo = 2;
double blah = 4;

(require 'align)
M-x align-current RET
M-x align-entire RET

----
Emacs Lisp 的交互环境

M-x ielm RET

Provides a nice interface to evaluating Emacs Lisp expressions. Input
is handled by the comint package, and output is passed through the
pretty-printer.

----
判断 emacs 的颜色数:

display-color-cells

(when (> (display-color-cells) 16) ... )

----
(hi-lock-mode 1) 高亮模式

C-x w b hi-lock-write-interactive-patterns
C-x w r unhighlight-regexp
C-x w h highlight-regexp
C-x w p highlight-phrase
C-x w l highlight-lines-matching-regexp
C-x w i hi-lock-find-patterns

;; Sample file patterns:
; Hi-lock: (("^;;; .*" (0 (quote hi-black-hb) t)))
; Hi-lock: ( ("make-variable-buffer-\\(local\\)" (0 font-lock-keyword-face)(1 'italic append)))))
; Hi-lock: end

----
emacs 的一些程序的用处

b2m 将邮件文件从RMAIL格式转化成UNIX的mbox格式。
ebrowse 使emacs可以调用C++的类的层级结构。
emacsclient 在emacs服务器上启动一个emacs进程。
etags 也是一个产生源码互相参照标签文件的程序。
grep-changelog 列印变更日志(ChangeLogs)中符合不同条件的项目。
rcs-checkin 一个将文件加入RCS(修改管理系统)的脚本。
cvtmail 将老式的goslings emacs邮件目录转化成 gnu-rmail 格式。
digest-doc 为man page建立nroff输出的虑镜。
emacserver 使其他的程序或者shell可以读写一个正在运行的emacs并且共享buffers。
fakemail 是一个和sendmail类似的到 /bin/mail的界面。
hexl 将二进制文件转化成emacs十六进制模式可以用的格式。
movemail 可以读取POP3邮箱。
profile 为emacs的Lisp代码的profiling产生一个周期性事件。
rcs2log 由RCS文件产生一个修改日志的前缀。
sorted-doc 建立texinfo文件的虑镜
vcdiff 比较SCCS文件。

----
中文天干地支

from smth
在~/.emacs中加入如下代码

(setq chinese-calendar-celestial-stem
["甲" "乙" "丙" "丁" "戊" "己" "庚" "辛" "壬" "癸"])
(setq chinese-calendar-terrestrial-branch
["子" "丑" "寅" "卯" "辰" "巳" "午" "未" "申" "酉" "戌" "亥"])

然后在 calendar 中按 p C 就可以看到中文的天干地支了

----
C-x C-n (M-x set-goal-column)

设置 next-line 或 previous-line 命令所去的列,需要在某个列移动光标的时
候很有用。可以防止由于 (setq track-eol t) 有时候带来的不便。

加个非空的参数即可取消,比如 C-u C-x C-n。

----
type C-u 1 0 0 C-u 1 to insert 100 1's.

----
C-u 0 C-x C-s never makes a backup file.

----
Dired 中标记文件名和标记含有某些行的文件

* . 标记同一扩展名的文件
% g 标记其中有匹配 regexp 的行的文件

----
(partial-completion-mode 1)

M-x t-t-l for M-x toggle-truncate-lines
or (M-x t SPC t SPC l RET)

C-x C-f for opening "/usr/include/sys/time.h"

----
直接关掉 buffer

-(global-set-key "\C-xk" 'kill-buffer-directly)
+(global-set-key "\C-xk" 'kill-this-buffer)
kill-this-buffer 就可以直接关闭 buffer。

或者下面这个,不删除 *scratch* 缓冲的。
(defun chunyu-kill-this-buffer ()
(interactive)
(if (equal (buffer-name) "*scratch*")
(progn (erase-buffer)
(set-buffer-modified-p nil)
(bury-buffer))
(kill-buffer (current-buffer))))

----
imenu 根据 buffer 中的函数定义来移动光标

-(define-key ctl-x-m-map "i" 'boxquote-insert-file)
+(define-key ctl-x-m-map "i" 'imenu) ; boxquote-insert-file

----
(which-func-mode 1)

在 mode-line 中显示当前行在那个函数中

----
(icomplete-mode 1)

用 M-x 执行某个命令的时候,在输入的同时给出可选的命令名提示。

----
Emacs 的 Emerge 很好用

M-x emerge-files RET
So cool.

----
修改 Dired 中内容

Dired 使用 ls 得到缓冲内容,缺省的参数为 "-al",可以通过

(setq dired-listing-switches "-avl")

在 .emacs 中修改,参数其中的 "v" 可以使大写的文件名在顶部。也可以在
Dired 缓冲中使用命令:

C-u s

临时修改。

----
不显示 Emacs 的开始画面

(setq inhibit-startup-message t)

----
Emacs 找不到合适的模式时,缺省使用 text-mode

(setq default-major-mode 'text-mode)

----
存盘的时候,要求最后一个字符时换行符

有一些文件,需要这样的格式,比如 /etc/fstab 文件,没有文件末尾的换行会
发生错误。

(setq require-final-newline t)

----
Mini buffer 不要自动调整大小

(setq resize-mini-windows nil)

----
在行尾上下移动的光标,始终保持在行尾

(setq track-eol t)

----
让 Emacs 中的 man page buffer,使用当前窗口,并成为当前缓冲区

M-x man-follow 或者 M-x man 弹出的 buffer 的方式。

(setq Man-notify-method 'pushy)

----
当有两个文件名相同的缓冲时,使用前缀的目录名做 buffer 名字

默认是 foobar<1>,foobar<2> ……的形式

(setq uniquify-buffer-name-style 'forward)

----
提示命令所绑定的键的时间

当使用 M-x COMMAND 后,过 1 秒钟显示该 COMMAND 绑定的键

(setq suggest-key-bindings 1)

----
当行数超过一定数值,不再显示行号

(setq line-number-display-limit 1000000)

----
保留删除文本的 kill-ring 最多的记录个数

(setq kill-ring-max 200)

----
打开 CVS 中的文件的符号连接时,无须询问

(setq vc-follow-symlinks t)

----
M-x apropos 时多查询些结果,但需要更多的 CPU

(setq apropos-do-all nil)

----
每当设置书签的时候都保存书签文件,否则只在你退出 Emacs 时保存

(setq bookmark-save-flag 1)

----
在 mode-line 上显示时间

(display-time-mode 1)
(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)

----
在行首 C-k 时,同时删除该行

(setq-default kill-whole-line t)

----
设置时间戳,标识出最后一次保存文件的时间

(setq time-stamp-active t)
(setq time-stamp-warn-inactive t)
(setq time-stamp-format "%:y-%02m-%02d %3a %02H:%02M:%02S chunyu")

----
Emacs 的备份

(setq kept-old-versions 2)
(setq kept-new-versions 5)
(setq delete-old-versions t)
(setq backup-directory-alist '(("." . "~/var/tmp")))
(setq backup-by-copying t)

Emacs 中,改变文件时,默认都会产生备份文件(以 ~ 结尾的文件)。可以完全去
掉(并不可取),也可以制定备份的方式。这里采用的是,把所有的文件备份都放
在一个固定的地方("~/var/tmp")。对于每个备份文件,保留最原始的两个版本和
最新的五个版本。并且备份的时候,备份文件是复本,而不是原件。


----
改变 Emacs 固执的要你回答 yes 的行为,按 y 或空格键表示 yes,n 表示 no

(fset 'yes-or-no-p 'y-or-n-p)

----
hippie-expand 所使用的补全函数及使用的顺序

(setq hippie-expand-try-functions-list
'(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))

----
用于编辑远程文件的 tramp 和 ange-ftp 的设置

(setq tramp-unified-filenames t)
(setq tramp-auto-save-directory "~/var/tramp")
(setq ange-ftp-generate-anonymous-password "user@cyber.net")
(setq ange-ftp-default-user t)

----
.emacs 中设置 register

Register 是一种资源,可以用来保存文本(text),位点(mark),文件名或目录,
数值等。所有的大小写字母和数字都可以用作 Register。

C-x j e 就打开 .emacs.el 文件
(set-register ?e '(file . "~/.emacs.d/.emacs.el"))
C-x j g
(set-register ?g '(file . "~/.emacs.d/.gnus.el"))

----
调整 Emacs 的行距

(setq-default line-spacing nil)

----
设置 DISPLAY 变量

到我的 Windwos 机器,上面装了 X-Win32,用来显示 Linux 机器上的 X 程序
(setenv "DISPLAY" "chunyu:0")

----
minibuffer 缺省输入

(minibuffer-electric-default-mode 1)

----
minibuffer 中输入部分命令就可以使用补全

例如:
M-x t-t-l RET
就可以执行
M-x toggle-truncate-lines。其中的 "-" 处只需按空格。

(partial-completion-mode 1)

----
打开压缩文件时自动解压缩

(auto-compression-mode 1)

----
显示列号

(column-number-mode 1)

----
光标不要闪烁

(blink-cursor-mode -1)

----
高亮显示匹配的括号

(show-paren-mode 1)

----
不要 menu-bar 和 tool-bar

(menu-bar-mode -1)
(tool-bar-mode -1)
或者,在 Windows 上,通过注册表:
HKEY_LOCAL_MACHINE\SOFTWARE\GNU\Emacs\EMACS.Toolbar=0 (REG_SZ)

----
给出用 M-x foo-bar-COMMAND 输入命令的提示

(icomplete-mode 1)

----
方便打开文件和转换 buffer 的模式

(ido-mode 1)

ido 模式中,使用 tramp 的补全方式
(setq ido-enable-tramp-completion t)

ido 模式中不保存目录列表
(setq ido-save-directory-list-file nil)

----
自己的名字和邮件地址

很多地方用得到,比如 VC(version control) 中产生 ChangeLog 文件

(setq user-full-name "Chunyu Wang")
(setq user-mail-address "dddkk(at)sina(dot)com")

----
关于 mail 的简单设置

(setq mail-signature-file "~/.sig/default")
(setq mail-user-agent 'gnus-user-agent)
(setq mail-alias-file "~/.mailrc")

----
设置 gnus 的初始化文件

(setq gnus-inhibit-startup-message t)
(setq gnus-init-file "~/.emacs.d/.gnus.el")

----
Dired 中递归的删除、复制子目录

(setq dired-recursive-deletes t)
(setq dired-recursive-copies t)

----
通过 Dired 中的 CVS 目录进入 pcl-cvs 界面

在一个 CVS 本地拷贝目录的 Dired buffer 中时,如果进入 CVS 目录,自动进
入 PCL-CVS 界面:

(setq cvs-dired-use-hook 'always)

----
Emacs 的 Calendar

Emacs 中有日历,而且可以称之为一个系统,因为其中除了最常用的日历之外,
还有其他的近十种历法,其中有日记、约会提醒、纪念日提示以及节假日提示等
等。其中的历法包括中国的农历、希伯来历、伊斯兰历、法国革命历、中美玛雅
历等等,可以根据经纬度告知你的所在的每天日出日落的时间等等。

----
保存日记的文件

(setq diary-file "~/.emacs.d/.diary")

----
查看日出日落时间

设置所在地的经纬度和地名,calendar 中按 S,可以根据这些信息告知你每天的
日出和日落的时间:
(setq calendar-latitude +45.75)
(setq calendar-longitude +126.63)
(setq calendar-location-name "Harbin")

----
有关日历的设置

(setq calendar-remove-frame-by-deleting t)
(setq calendar-week-start-day 1) ; 每周第一天是周一
(setq mark-diary-entries-in-calendar t) ; 标记有记录的日子
(setq mark-holidays-in-calendar nil) ; 标记节假日
(setq view-calendar-holidays-initially nil) ; 不显示节日列表

----
去掉了不感兴趣的节日

(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 4 1 "愚人节")
(holiday-float 5 0 2 "母亲节")
(holiday-float 6 0 3 "父亲节")))

----
Calendar 中 p C 可以看到我们的阴历有中文的天干地支

(setq chinese-calendar-celestial-stem
["甲" "乙" "丙" "丁" "戊" "己" "庚" "辛" "壬" "癸"])
(setq chinese-calendar-terrestrial-branch
["子" "丑" "寅" "卯" "辰" "巳" "午" "未" "申" "酉" "戌" "亥"])

----
开启语法高亮

(global-font-lock-mode 1)

语法高亮,除 shell-mode 和 text-mode 之外的模式中使用语法高亮
(setq font-lock-maximum-decoration t)
(setq font-lock-global-modes '(not shell-mode text-mode))
(setq font-lock-verbose t)
(setq font-lock-maximum-size
'((t . 1048576) (vm-mode . 5250000)))

----
中文设置

默认的语言环境:
(set-language-environment 'Chinese-GB)
键盘输入的编码,用于输入法:
(set-keyboard-coding-system 'chinese-iso-8bit)
终端显示的编码:
(set-terminal-coding-system 'chinese-iso-8bit)
剪切板,用于和其他程序之间复制内容:
(set-clipboard-coding-system 'chinese-iso-8bit)

----
缺省书签的文件

(setq bookmark-default-file "~/.emacs.d/.emacs.bmk")
或者,不同的机器上用不同的文件:
(setq bookmark-default-file
(substitute-in-file-name "~/.emacs.d/emacs_$HOSTNAME.bmk"))
其中的 HOSTNAME 是环境变量,Windows 系统上或许需要自己定义一下。

----
保存缩写定义的文件

(setq abbrev-file-name "~/.emacs.d/.abbrev_defs")

----
保存 customize 设置的文件

M-x customize 功能保存设置的文件,默认的是 Emacs 的初始化文件 .emacs。
但是我比较喜欢用另外的文件保存:
(setq custom-file "~/.emacs.d/.emacs_custom.el")
当然,这样还需要在 .emacs 中加载一下:
(load custom-file)

----
Emacs TODO 模式的相关文件

(setq todo-file-do "~/.emacs.d/todo-do")
(setq todo-file-done "~/.emacs.d/todo-done")
(setq todo-file-top "~/.emacs.d/todo-top")

----

?
  评论这张
 
阅读(376)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017