Emacs中文FAQ
-
键绑定
-
-
常用的键绑定
光标移动
参数设置
模式相关
-
-
cc-mode
emacs-lisp-mode
hs-minor-mode
矩形模式
text-mode
flyspell-mode
auto-fill-mode
misc
文本编辑
常用命令
查找与替换
some tips about emacs
参考资料
键绑定
- 记住在所有要绑定到快捷键的函数上面加上(interactive)关键字,否则,会发生(wrong-type-argument commandp my-command)的错误
对于要绑定到鼠标的函数,要在函数声明中指定参数(event),在修饰段,加入(interactive "e"),然后才能绑定 - 对于要传递参数的函数,可以用lambda匿名函数来实现
(global-set-key [(prior)] '(lambda () "Previous" (interactive) (scroll-down 1)))
或则(global-set-key [(prior)] (function (lambda () "Previous" (interactive) (scroll-down 1))))
记住对于 global-set-key函数需要的第二个参数是一个symble或者是list - (read-event)可以得到emacs的键码的内部表示
- 如果你觉得每次为了关闭一个buffer都要按C-x k很麻烦,那么你可以这样绑定:
(global-set-key (kbd "<M-f4>") (lambda () (interactive) (kill-buffer (current-buffer))))
- 在emacs中可以用buffer-menu调出bufferlist窗口,建议绑定到Menu key上,并且将point转到buffer List上面。很方便的,与之相比,C-x C-b则显得有点慢。建议用buffer-menu
- 在emacs中交互的绑定键
M-x global-set-key
常用的键绑定
- 打开文件
C-x i #插入一个文件的内容 C-x r #以只读的方式打开一个文件
- 查找和替换
M-% #确认替换
- 其他
C-x ESC ESC #调出上一条复杂命令 C-x C-q #清除一个窗口的只读属性 M-/ #自动补齐 M-; #注释 C-c C-e #扩展宏 C-c C-\ #在当前区域的行尾加入"\"
光标移动
- 如何在匹配的括号之间移动光标
`C-M-n' Move forward over a parenthetical group (`forward-list').
`C-M-p' Move backward over a parenthetical group(`backward-list').
`C-M-u' Move up in parenthesis structure (`backward-up-list').
`C-M-d' Move down in parenthesis structure (`down-list').
- emacs用M-.可以跳到tag定一处,要回来可以用M-即可
参数设置
- Emacs 变量可在命令行中设置(如果您知道它们的名字和适当的值),设置方法是输入 M-x set-variable,然后在提示符后输入变量名和它的新值。
模式相关
cc-mode
- 在emacs中要想打开诸如:#include之类的文件,必须保证ffap-c-path包含stdio.h的路径
- emacs可以实现程序变量得自动对齐功能。要达到这样的效果
int main() { int aa; unsigned int bb; double cc; }
选择区域,让后M-x align即可 - 如何使""成为语法的单词的一部分.(add-hook 'c-mode-hook (lambda () (modify-syntax-entry ? "w" c-mode-syntax-table)))(setq c++-mode-hook c-mode-hook)
emacs-lisp-mode
- 再emacs中编译整个目录下的.el文件输入 [Alt]-x 。 当提示输入命令时,输入 byte-force-recompile [Enter] 。
- 如何再emacs下编译整个目录下的*.el文件两个办法,一是在dired里面用m标记,然后用B编译还有就是用emacs的批处理:
emacs -batch -f batch-byte-compile *.el
hs-minor-mode
- hs-minor-mode 就可以用C-c @ C-c 进行代码隐藏了
矩形模式
Keystrokes | Command name | Action |
C-x r k | kill-rectangle | Delete a rectangle and store it. |
C-x r d | delete-rectangle | Delete a rectangle and do not store it. |
C-x r y | yank-rectangle | Insert the last rectangle killed |
C-x r c | clear-rectangle | Using spaces, blank out the area marked as a rectangle and do not store it. |
C-x r o | open-rectangle | Insert a blank rectangle in the area marked. |
C-x r r r | copy-rectangle-to-register | Copy rectangle to register r (where r is any character) . |
C-x r i r | insert-register | Insert rectangle from register r (where r is any character). |
none) | delete-whitespace-rectangle | If a rectangle includes initial whitespace, deletes it, narrowing rectangle. |
C-x r t string Enter | string-rectangle | Change contents of marked rectangle to string (if string is narrower or wider than rectangle, dimensions change accordingly). |
(none) | string-insert-rectangle | Prompts for string and inserts rectangle. |
text-mode
- 居中M-s
flyspell-mode
启动flyspell-mode可以在输入的同时完成拼写检查. M-$提示如何修正auto-fill-mode
用于实现单词的自动折行misc
- 寻找下一个对应的tag匹配,menu-bar-next-tag,也可以用C-u M-.
- 递归建立TAGS文件
find ./ -name "*.[hc]" -type f -exec etags -a {} \;
文本编辑
- 每行显示30个汉字(setq fill-column 60)放到.emacsM-x auto-fill-mode
- narrow 功能.用于隐藏文本,在进行string replace时十分有用选中要保留的文本,然后C-x n n 或M-x narrow-to-region要展开文本: C-x n w 或 M-x widen
- emacs的自动排版用M-q
- window下面用emacs远程编辑文件,可以用ftp方式:
C-x C-f RET /ftp:user@host:/path/test.txt
ssh方式:下载plink.exe,将其路径加入PATH变量C-x C-f RET /ftp:user@host:/path/test.txt
- emacs下的su可以用C-x C-f安下列方式实现su文件编辑
/su::/etc/foobar.conf
- 用空格代替tab(setq-default indent-tabs-mode nil)
M-x untabify
- 指定文件的编码方式:C-x RET f
常用命令
- 下一个错误 [C-x `]
- 列出 Emacs 自动识别的所有主要模式的方法是输入 M-x describe-variable,按 Enter,然后在小缓冲区的提示符后输入 auto-mode-alist。一些我常用的模式包括文本、c 和 SGML,有时还用 LISP。
- redoC-g C-/
- 左右滚屏C-x < C-x >
- emacs执行shell命令,可以用 M-!来执行一个shell命令也可以用C-u M-!将一个命令的结果插入当前的光标处.
- 用shell-command-on-region命令在选择的区域上面执行shell命令,快捷键是M-¦
- 列出emacs所有可用的颜色
M-x list-colors-display
- 更改正在编写的文件的编码 C-x RET f 编码名 RET
设置emacs打开文件的默认编码set-buffer-file-coding-system
如果你想用另一种不同的编码打开文件:revert-buffer-with-coding-system
- 如何在终端启动emacs.
emacs -nw
如果你不想每次都这样麻烦,可以在bash里面设置alias.如在你的HOME目录下的.bashrc文件中加入下面一行alias emacs='emacs -nw'
- 修改tages文件: M-x visit-tags-table
查找与替换
- emacs中要对换行进行匹配的查找和替换的话,请用C-q C-j来代替.既不是,也不是\n,这一点千万注意.
- 去掉一个文件中所有的空行
M-x query-replace-regexp ^^q [ret] [ret]
[note] ^^q的输入方式是 shift-6 C-q C-j
- 如何搜索cursor所在处的单词? C-s C-w
- 正则表达式搜索C-A-r
- 切换查找时是否区分大小写M-c (也就是在C-s M-c).
some tips about emacs
- windows下面远程编辑文件可以下载plink.exe, 放入path路径即可
C-x C-f RET /plink:reality@10.0.0.99:/home/reality/test.txt
- 捕捉程序的输出可以用
C-u M-! ls
- 如何让dired不显示隐藏文件(setq dired-omit-files "^\\.")
- 如何在dos和unix文件类型之间转化
C-x RET f unix #转化成Unix文件格式 C-x RET f dos #转化成dos文件格式
- abbrevs
C-SPC #include <stdio.h> ... #include <stdlib.h> C-u 0 C-x a g includec RET now create a new buffer and type includec RET info/emacs/abbrevs for detail
参考资料
以下是使您更快掌握 Emacs 的一些参考资料:
- Linux 文档计划(Linux Documentation Project)中的 The Emacs Beginner HOWTO 是不错的入门读物。
- The GNU Emacs Manual 是该编辑器的最终参考资料,链接来自 GNU Emacs 主页。
- 如果您更喜欢 XEmacs,那么您需要访问 XEmacs 主页。
- 在 IBM 的 developerWorks 站点,您可以找到各种参考资料,用于扩展您对 Emacs 的使用,例如 Using Regular Expressions。
- 还有,在 Emacs 的讨论中如果不讲它在 Linux 文本编辑器范围中的死对头,那么这种讨论是不完全的。请查看 vi intro - the cheat sheet method,自己看看它到底怎样。
- Emacs 的终级的首选的参考资料是永远流行的 Learning GNU Emacs 和 GNU Emacs Pocket Reference,均来自 O'Reilly。请在您喜欢的在线或传统书商那挑选它们。
- Emacs 的授权协议是自由软件基金的 GNU GPL。
- 如果您想获得更多关于 Emacs 的历史(和许许多多其它 UNIX 主题),请参见行话文件。