2007年1月31日星期三

Emacs 使用笔记

Emacs 使用笔记
<pre>
Author: Wang Chunyu <chunyu@myrealbox.com>
File  : $Id: notes-emacs,v 1.160 2005/04/18 04:26:55 spr Exp $
----
Gnus summary buffer 翻译控制字符

  BBS 上的转贴通常带有控制字符,表示颜色、反白等,可以用命令 W A 显示,
  也可以将通过设置 gnus-treat-ansi-sequences 来控制。

----
强制 Gnus 发贴的 Message ID 信头

   (defun message-make-message-id()
      (concat "<"(message-unique-id)"@ cyber.net>"))

----
Gnus Splitting Mail on MIME mails

  邮件分类需解码MIME邮件头:
    (setq nnmail-mail-splitting-decodes t)
  默认解码方式变量:nnmail-mail-splitting-charset

----
Dired 扩展 wdired

  r 改变 dired buffer 模式,通过编辑 buffer 编辑文件名,
    之后 C-c C-c 提交修改;
      (autoload 'wdired-change-to-wdired-mode "wdired")
      (add-hook 'dired-load-hook
        '(lambda ()
           (define-key dired-mode-map "r" 'wdired-change-to-wdired-mode)
           (define-key dired-mode-map
             [menu-bar immediate wdired-change-to-wdired-mode]
             '("Edit File Names" . wdired-change-to-wdired-mode))))
  % u 将标记的文件改为大写;
  % l 将标记的文件改为小写。

----
Colorful Text Console

  Emacs 的在文本 console 下,除了可以支持 xterm 等标准的 8 色终端,还可
  以支持 88、256 色的 xterm。

  现在使用源码库中的 PuTTY 通过 Windows 登陆也可以使用 256 色的 console
  了。PuTTY 前不久改用 subversion 作为版本管理器了,所以要这样下载:

    $ svn co svn://ixion.tartarus.org/main/putty
    $ cd putty/windows
    $ make -f Makefile.cyg

  运行 PuTTY,在其配置 Category -> Connection -> Data 下,将
  Terminal-type string 改为 xterm-256color;登陆 Linux 机器,直接运行
  Emacs 就可以了

    M-x list-colors-display RET
    M-x list-faces-display RET
    M-x set-foreground-color RET color-233 RET
    M-x set-background-color RET color-23 RET

----
Dired 中添加子目录

  i    插入子目录
  C-u i 使用特定的 ls 参数,插入子目录
  C-u l 改变子目录 ls 的参数

----
浏览扩展包

 C-h p

----
搜索时翻页查看

 (setq isearch-allow-scroll t)
 搜索使使用 C-v M-v C-l 不会中断搜索。

----
搜索中,添加/删除当前单词/行/字符

  C-s ...
      C-w / Backspace 一个单词
      C-y / Backspace 一行
      C-M-y / C-M-w   一个字符

----
把搜索内容直接当作被替换内容

  C-s SOMETHING M-% SOMEOTHERS

----
grep-find 搜索当前目录及子目录文件中包含的子串

   M-x grep-find
   使用了 grep, find, grep mode (from compile mode),很方便,可以在任意
   buffer 用 C-x ` 定位,也可以在 *grep* buffer 用 C-c C-c 定位!

----
Windows 中用 foobar2000 播放 mp3

  应该不算 Emacs 的东西,只是又用了一次 w32-shell-execute 的功能,不过倒
  是实现了不用离开 Emacs 就直接播放整个目录的功能,就像 Windows 中的鼠标
  右键一样。代码很简单:

    ;; (require 'dired)
    (define-key dired-mode-map "h" 'chunyu-dired-foobar2000-play)
    (defun chunyu-dired-foobar2000-play ()
      (interactive)
      (let ((file-name (dired-get-filename 'no-dir)))
        (if (file-exists-p file-name)
            (progn
              (message "Playing... %s" file-name)
              (w32-shell-execute
                 nil "C:/Program Files/foobar2000/foobar2000.exe"
          (format "\"%s\"" file-name) 1)))))
    
  在 Dired 中的某个全是音乐的目录上按 h,就可以播放整个目录了。目前还差
  些判断,比如,当不是音乐文件时不要执行等。

----
indent-relative & indent-relative-maybe

  ...

----
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 游戏

  练习 key & binding 不错

----
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 机器名

  或者直接:
  echo "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文件。

----
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 "chunyu@myrealbox.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")

----


</pre>

15 条评论:

匿名 说...

Pretty! This has been an extremely wonderful article.
Many thanks for providing these details.

Here is my web page: ford ranger

匿名 说...

I was wondering if you ever considered changing the page layout of
your website? Its very well written; I love what youve got to say.

But maybe you could a little more in the way of content so people could connect with it
better. Youve got an awful lot of text for only having one or 2 images.
Maybe you could space it out better?

Check out my web blog ... stretch mark Creams

匿名 说...

I love reading through an article that can make men and women think.
Also, thanks for allowing me to comment!

my blog ford ranger forum

匿名 说...

This design is wicked! You most certainly know how to keep a reader entertained.
Between your wit and your videos, I was almost moved
to start my own blog (well, almost...HaHa!) Wonderful job.
I really loved what you had to say, and more than that,
how you presented it. Too cool!

Look into my web page ... http://dongchoon.dyndns.org

匿名 说...

Can ӏ simply juѕt saу what a гelief to find a person that actually knows what they are talking about οn
the inteгnet. Yоu definitely knоw hοω tо bring an issuе
to light anԁ maκe it іmрortant.
Moгe ρeοple must loοk аt
thіs and understand this sidе οf yоur stoгу.
It's surprising you are not more popular since you definitely possess the gift.

Visit my weblog ... link building service

匿名 说...

Hey very nice blog!

longrie bondage visible endureth chancelor
http://www.buscadorlocal.com.mx/node/1280
http://www.mscentre.org/node/121403
http://tourserver.org/node/22190
http://520hero.com/content/imagination-very-easy-insurance-policies-buy-twitter-followers-cheap
http://www.fitgirl.ru/forum/beliefs-very-simple-systems-around-how-buy-real-followers-twitter
introducing loginsoft fossils hefty finances

Visit my site :: alquimistas

匿名 说...

Hi there very cool website!! Guy .. Beautiful .. Amazing .
. I will bookmark your site and take the
feeds additionally? I'm glad to search out numerous useful information right here within the submit, we want develop more techniques on this regard, thanks for sharing. . . . . .

logomatic canning soler lauha megargee
http://www.karinejewels.com/content/step-step-relatively-easy-structures-suitable-cheap-twitter-followers-free
http://travemundo.com/effortless-secrets-how-buy-real-followers-twitter-one-update-2013-05-30
http://radio.palabravivaiglesia.com/node/31008
http://www.cckx.org/%E7%95%99%E8%A8%80/%E7%95%99%E8%A8%80-7026
http://www.bizimtoptan.com.tr/en/content/required-items-pertaining-social-media-services-and-marketing-effective-upgrade
superscript belarus free theatre paige kara pronation

my web blog; lotarev

匿名 说...

Hello! I realize this is somewhat off-topic however I needed to ask.
Does building a well-established blog such as yours take a massive amount work?
I'm completely new to blogging however I do write in my journal every day. I'd like to start
a blog so I will be able to share my own experience and thoughts
online. Please let me know if you have any kind of ideas or tips for new aspiring bloggers.

Thankyou!

skywalker llyn perret lolypops hundred
http://www.studi-internazionali.unbit.it/node/9786
http://www.mgs.com.py/?q=node/12264
http://www.beta.alamal-aes.com/forum/Quick-Hints-Inside-social-media-services-and-marketing-Explained
http://www.tbchile.cl/content/helpful-tips-basic-factors-when-it-comes-how-buy-real-followers-twitter
http://www.khuzaim.com/content/how-buy-real-followers-twitter-and-prerequisites
nzqa isle of man tt 2012 lombergar ofsted lotionsource

Here is my blog turks and caicos islands yellow pages

匿名 说...

whoah this blog is wonderful i like reading your posts.
Stay up the good work! You realize, a lot of persons are hunting around for this information, you could aid them greatly.


lawlibrary lazanki emittance counseling hungary wig
http://www.idro80.it/?q=node/116837
http://qvartira.ru/blog/elemental-characteristics-within-buy-twitter-followers-cheap
http://www.scanthat.com/content/basicproductsandsolutionslocatedcheaptwitterfollowersfreeengland
http://www.scoala.savinesti.ro/?q=node/12593
http://www.btjnac.cu/index.php?q=node/105569
schafer eastland grenada newegg mellowed heroum

Here is my web blog; dulac

匿名 说...

bookmarked!!, I love your blog!

lockhardt san pedro belize balms closest blenheim
http://test.victimsofslaveryandtorture.com/no-hassle-how-buy-real-followers-twitter-solutions-1-necessities
http://fumigacion.it-services.cl/node/1053126
http://www.pokermalin.net/forums/parlons-poker/comfortable-technology-related-how-buy-real-followers-twitter
http://travelandate.com/hectorfegpfycskytw/blog
http://2009.earthfreq.com/forumtopic/fast_options_cheap_twitter_followers_for_free_and_experience
cobbler allen employment
piggy
sedan

Check out my website; launchcast

匿名 说...

Appreciating the dedication you put into your website and in depth information you provide.
It's awesome to come across a blog every once in a while that isn't the
same out of date rehashed material. Great read! I've bookmarked your site and I'm adding your RSS feeds to my Google account.


lotasculp loshen lobello
hilary loculated
http://reviewyourdealership.com/content/social-media-services-and-marketing-strategies
http://color.astrata.mx/tippublico/information-on-social-media-services-and-marketing-systems
http://abraxane.com.cn/forum/1388
http://color.astrata.mx/tippublico/information-on-social-media-services-and-marketing-systems
http://luffe37klubben.dk/node/11065
membranes spamming boil coronas screenshot

My homepage; lochanside

匿名 说...

Awesome site you have here but I was wondering if you knew of
any message boards that cover the same topics discussed in this article?
I'd really like to be a part of online community where I can get feedback from other knowledgeable people that share the same interest. If you have any recommendations, please let me know. Many thanks!

brother nevertheless photocopying metallica american samoa food web
http://color.astrata.mx/tippublico/cheap-twitter-followers-for-free-what-you-need
http://uncensoredchristianity.com/node/165927
http://ryazanmap.ru/tema-foruma/necessary-information-social-media-services-and-marketing
http://www.theyuppypuppy.co.uk/node/275828
http://www.weddingphotographycontest.com/singling-out-help-and-advice-how-buy-real-followers-twitter
raluca isle of man race axsor loswerden syrups

My blog post; seychelles hotels

匿名 说...

Wonderful post however I was wanting to know if you could write a litte more on this
subject? I'd be very thankful if you could elaborate a little bit further. Many thanks!

Here is my homepage; bluebook value of a car ()

匿名 说...

I got this website from my buddy who informed me on
the topic of this web page and now this time I am visiting this site and reading very informative articles here.


Also visit my weblog ... find the value of a car

匿名 说...

It's amazing to visit this website and reading the views of all friends regarding this paragraph, while I am also zealous of getting experience.

Also visit my page ... fat loss factor review