Win7下Emacs使用笔记一
1. 为了用得顺手,需要把Caps Lock键设为Ctrl。Caps Lock功能则设到右手的Context Menu键上或Win键上。可使用KeyTweak工具来帮助改键,不嫌麻烦的话也可直接改注册表。
2. M-x按得不顺手(位置太近反而不好按),可以用ESC-X来代替,或者在.emacs中加入以下代码,把它设到C-X C-M与C-C C-M上,同时把C-X与C-C都设了可以防止不小心按错。
2. M-x按得不顺手(位置太近反而不好按),可以用ESC-X来代替,或者在.emacs中加入以下代码,把它设到C-X C-M与C-C C-M上,同时把C-X与C-C都设了可以防止不小心按错。
Lisp代码
1 ;;更顺手的M-x(可以用C-x C-m或C-c C-m来触发)
2 (global-set-key"\C-x\C-m" 'execute-extended-command)
3 (global-set-key"\C-c\C-m" 'execute-extended-command)
3. 实际使用中经常需要使用系统剪贴板(与其他编辑器或浏览器互相复制粘贴),CUA模式对按键习惯影响太大,不想用。用鼠标中键可以粘贴,但太麻烦。可以在.emacs中加入以下代码,把C-c C-c设为复制到系统剪贴板,C-c C-v设为从系统剪贴板粘贴。
Lisp代码
4 ;;系统剪贴板快捷键(C-c C-c复制,C-c C-v粘贴)
5 (global-set-key"\C-c\C-c" 'clipboard-kill-ring-save)
6 (global-set-key"\C-c\C-v" 'clipboard-yank)
4. C-z默认是挂起emacs,跳回到shell中,这对文本型的shell很有用。但在windows中,事实上变成了毫无实际意义的窗口最小化,浪费了C-z这么顺手的键。可以用以下代码把C-z改为一个类似C-x的组合起始键。
Lisp代码
8 (define-prefix-command 'ctl-z-map)
9 (global-set-key (kbd"C-z") 'ctl-z-map)
Lisp代码
10 ;;用C-z i快速打开~/.emacs文件。
11 (defun open-init-file ( )
12 (interactive)
13 (find-file"~/.emacs"))
14
15 (global-set-key"\C-zi" 'open-init-file)
Lisp代码
16 ;;C-Space被输入法占用,改用C-c m来标记文本块
17 (global-set-key"\C-cm" 'set-mark-command)
7. 大而无当的工具栏可以关掉,提供更大的编辑空间。
Lisp代码
18 ;;关闭toolbar
19 (tool-bar-mode)
8. 使用emacs时经常需要管理多个buffer,C-x C-b的默认界面太过简陋。emacs事实上已经提供了更好的buffer管理界面ibuffer,在配置文件中选用即可。
Lisp代码
20 ;;启用ibuffer支持,增强*buffer*
21 (require 'ibuffer)
22 (global-set-key (kbd"C-x C-b") 'ibuffer)
9. 如果想临时开一个缓冲区来输入或暂存一些文本,只要按C-x b,然后胡乱输入一个名称(例如asdf)即可。但默认会使用没有什么功能的Fundamental-mode,可以将默认模式改为Text-mode,并自动打开Fill-mode。
Lisp代码
23 ;;默认进入text-mode,而不是没有什么功能的fundamental-mode
24 (setq default-major-mode 'text-mode)
25 (add-hook'text-mode-hook 'turn-on-auto-fill)
10. 用以下配置开启显示行号
Lisp代码
26 ;;显示行号
27 (global-linum-mode1)
11. 用C-x C-f打开文件时默认路径是~,可以用以下配置来更改。
Lisp代码
28 ;;设置初始目录为rails项目目录
29 (setq default-directory"d:\\rails")
12. 编程时,一般采用utf-8编码,用以下代码配置。
Lisp代码
30 ;;设定语言环境为utf-8
31 (setq current-language-environment"UTF-8")
32 (setq default-input-method"chinese-py")
33 (setq locale-coding-system 'utf-8)
34 (set-terminal-coding-system 'utf-8)
35 (set-keyboard-coding-system 'utf-8)
36 (set-selection-coding-system 'utf-8)
37 (prefer-coding-system 'utf-8)
13. 用shell命令来进入shell mode,默认只能开启一个shell。事实上只要把shell所在的buffer
改名(用rename-buffer或rename-uniquely命令)即可。还嫌麻烦的话,可以在配置文件中定义一个新的newshell命令,在开启shell时询问buffer名称。
Lisp代码
38 ;;打开一个新的shell
39 (defun newshell (name)
40 (interactive"sBuffer name: ")
41 (shell name)
42 )
14. 刚上手时常用的按键命令记不住,可以自己写一个按键帮助文件(例如~/),用C-z k自动在一个新buffer中打开。(需要以上第4点支持)
Lisp代码
43 ;;用C-z k快速打开自定义的按键说明文件
44 (defun open-key-info-file ()
45 (interactive)
46 (split-window-horizontally)
47 (find-file-other-window"~/")
48 (outline-mode)
49 (hide-body))
50
51 (global-set-key"\C-zk" 'open-key-info-file)
帮助文字自动进入Outline Mode,可以用C-c C-a命令来展开所有分类,用C-c C-t命令来收起所有分类(只显示标题),光标在某一个分类上时,可以用C-c C-e命令来查看本分类内容。详细命令可参考后面附文中的Outline Mode部分。(~/文件内容附在本文最后)
15. 在windows下,可以让emacs启动后自动最大化。可在配置文件的最后加入:
Lisp代码
52 ;;启动0.5秒后自动最大化 (windows下)
53 (run-with-idle-timer0.5 nil 'w32-send-sys-command61488)
为了避免其他第三方模块初始化时把窗口复原,这里设置了启动后延时0.5秒再最大化。
16. 在emacs中,如果同时打开了两个buffer,可以用C-M-v按键来让另一个窗口的内容向下翻页,而不改变光标的位置。在阅读文档时非常方便。
17. 最常用的移动光标方式,不是上下左右,而是C-s和C-r(增量查)。
附常用按键命令列表(~/)
引用
* 移动快捷键
C-b :左移一个字符
win7显示隐藏文件C-f :右移一个字符
C-n :下移一行
C-p :上移一行
M-b :左移一个单词
M-f :右移一个单词
C-v :下移一屏幕
M-v :上移一屏幕
C-l :刷新屏幕并将光标所在行移到屏幕中央
C-u 0 C-l :刷新屏幕并将光标所在行移动到屏幕上端
C-a :移动到本行开始位置
C-e :移动到本行结束位置
M-a :移动到本句开始位置
M-e :移动到本句结束位置
M-b :左移一个单词
M-f :右移一个单词
C-v :下移一屏幕
M-v :上移一屏幕
C-l :刷新屏幕并将光标所在行移到屏幕中央
C-u 0 C-l :刷新屏幕并将光标所在行移动到屏幕上端
C-a :移动到本行开始位置
C-e :移动到本行结束位置
M-a :移动到本句开始位置
M-e :移动到本句结束位置
M-{ :移动到前一自然段
M-} :移动到后一自然段
M-< :移动到文章开头
M-> :移动到文章结尾
M-x goto-line :移动到某一行
* 其他编辑
M-t :单词后移
C-t :字符后移
C-x C-t :行下移
C-x C-u :区域转大写
C-x C-l :区域转小写
M-u :光标至单词结尾转大写
M-l :光标至单词结尾转小写
M-c :首字大写
* 其他基本键
C-j :带缩进回车
M-x :执行函数
C-u :指定函数参数
C-g :中断命令
C-x u :undo
C-/ :undo
C-_ :undo
C-x C-0 :字体复原
C-x C-- :字体缩小
M-u :光标至单词结尾转大写
M-l :光标至单词结尾转小写
M-c :首字大写
* 其他基本键
C-j :带缩进回车
M-x :执行函数
C-u :指定函数参数
C-g :中断命令
C-x u :undo
C-/ :undo
C-_ :undo
C-x C-0 :字体复原
C-x C-- :字体缩小
C-x C-= :字体增大
C-x C-z:暂停emacs应用
C-x C-c:关闭emacs应用
* 插入删除
<Delback> :删除光标左边字符
C-d :删除光标右边字符
M-z :删除到指定字符
M-<Delback> :删除光标左边单词
M-d :删除光标右边单词
c-k :从光标处删除至行尾
M-k :从光标处删除至句尾
C-x C-z:暂停emacs应用
C-x C-c:关闭emacs应用
* 插入删除
<Delback> :删除光标左边字符
C-d :删除光标右边字符
M-z :删除到指定字符
M-<Delback> :删除光标左边单词
M-d :删除光标右边单词
c-k :从光标处删除至行尾
M-k :从光标处删除至句尾
C-S-<Delback> :删除本行
* 区域操作
M-@ :标记区域起点
M-h :标记一自然段
C-w :删除区域
M-y :将上一次yank所插入的内容改为yank缓冲区中更早的记录内容
C-x C-x :将当前光标与标记位置交换
M-w :缓存区域(以便后续yank)
C-x h :全选当前buffer
* 查与替换
C-s :正向增量查
C-r :反向增量查
M-% :替换(带询问)
C-M-s Enter :正向正则表达式搜索
C-M-r Enter :反向正则表达式搜索
C-M-箭头 :继续正则表达式搜索
C-M-s :正向正则增量搜索
C-M-r :反向正则增量搜索
C-M-% :正则表达式替换(带询问)
M-s h l :高亮显示匹配指定正则表达式的行
M-s h r :高亮显示匹配指定正则表达式的文本
M-s h u :取消指定正则表达式的高亮
* Buffer操作
C-x 1 :当前buffer最大化,关闭其他窗口
C-x C-b :列出所有缓冲区
C-M-s Enter :正向正则表达式搜索
C-M-r Enter :反向正则表达式搜索
C-M-箭头 :继续正则表达式搜索
C-M-s :正向正则增量搜索
C-M-r :反向正则增量搜索
C-M-% :正则表达式替换(带询问)
M-s h l :高亮显示匹配指定正则表达式的行
M-s h r :高亮显示匹配指定正则表达式的文本
M-s h u :取消指定正则表达式的高亮
* Buffer操作
C-x 1 :当前buffer最大化,关闭其他窗口
C-x C-b :列出所有缓冲区
C-x b :打开指定缓冲区
C-x s :保存所有缓冲区
C-x C-<Left> :前一缓冲区
C-x C-<Right> :下一缓冲区
M-x revert-buffer :恢复当前缓冲区内容(放弃上一次保存之后的修改)
C-x k :删除指定缓冲区
* 文件操作
C-x C-f :查并打开文件
C-x C-s :保存文件
* 窗口操作
C-x 2 :横向分割当前窗口
C-x 3 :纵向分割当前窗口
C-x o :移动到另一个窗口
C-x s :保存所有缓冲区
C-x C-<Left> :前一缓冲区
C-x C-<Right> :下一缓冲区
M-x revert-buffer :恢复当前缓冲区内容(放弃上一次保存之后的修改)
C-x k :删除指定缓冲区
* 文件操作
C-x C-f :查并打开文件
C-x C-s :保存文件
* 窗口操作
C-x 2 :横向分割当前窗口
C-x 3 :纵向分割当前窗口
C-x o :移动到另一个窗口
C-x 0 :关闭当前窗口
C-x + :平均窗口大小
C-M-v :另一窗口下卷一屏幕
C-x 4 f :在另一窗口查并打开文件
C-x 4 b :在另一窗口中打开一个buffer
<ESC> <ESC> <ESC> :退出窗口(当Frame中窗口大于一个时)
* Fill Mode
C-x f :设置每行字符数
M-q :对本自然段重新排版
M-o M-s :本行居中
M-o M-S :自然段居中
* 帮助
C-x + :平均窗口大小
C-M-v :另一窗口下卷一屏幕
C-x 4 f :在另一窗口查并打开文件
C-x 4 b :在另一窗口中打开一个buffer
<ESC> <ESC> <ESC> :退出窗口(当Frame中窗口大于一个时)
* Fill Mode
C-x f :设置每行字符数
M-q :对本自然段重新排版
M-o M-s :本行居中
M-o M-S :自然段居中
* 帮助
C-h m :当前major mode的说明
C-h b :键盘命令绑定列表
C-h k :键盘命令帮助
C-h c :键盘命令简明帮助
C-h f :函数帮助
C-h a :函数查
C-h i :阅读手册
* Outline Mode
C-c C-b :前一同级章节
C-c C-f :后一同级章节
C-c C-p :前一章节
C-c C-n :后一章节
C-h b :键盘命令绑定列表
C-h k :键盘命令帮助
C-h c :键盘命令简明帮助
C-h f :函数帮助
C-h a :函数查
C-h i :阅读手册
* Outline Mode
C-c C-b :前一同级章节
C-c C-f :后一同级章节
C-c C-p :前一章节
C-c C-n :后一章节
C-c C-u :上一级章节
C-c C-t :令所有除标题外的文字不可见
C-c C-a :显示所有文字
C-c C-q :令前N级的文字可见
C-c C-d :隐藏当前章节的文字和子章节
C-c C-s :显示当前章节的文字和子章节
C-c TAB :显示当前章节的直接子章节标题
C-c C-c :隐藏当前章节的文本
C-c C-e :显示光标所在位置内容
C-c C-l :隐藏光标所在章节的文本和子章节的文本
C-c C-k :显示所有子章节的标题
* Abbrev Mode
C-x a l :将当前光标之前的单词添加为当前Mode的Abbrev
C-c C-t :令所有除标题外的文字不可见
C-c C-a :显示所有文字
C-c C-q :令前N级的文字可见
C-c C-d :隐藏当前章节的文字和子章节
C-c C-s :显示当前章节的文字和子章节
C-c TAB :显示当前章节的直接子章节标题
C-c C-c :隐藏当前章节的文本
C-c C-e :显示光标所在位置内容
C-c C-l :隐藏光标所在章节的文本和子章节的文本
C-c C-k :显示所有子章节的标题
* Abbrev Mode
C-x a l :将当前光标之前的单词添加为当前Mode的Abbrev
C-x a e :展开Abbrev
C-x ' :展开Abbrev
M-' :标记Abbrev前缀
C-x a g :将当前光标之前的单词添加为全局的Abbrev
C-x a n :跳到Abbrev的下一个slot
C-x a p :跳到Abbrev的上一个slot
* Shell Mode
M-p :向前滚动历史输入记录
M-n :向后滚动历史输入记录
C-c C-p :光标移动到上一次输入位置
C-c C-n :光标移动到下一次输入位置
C-c C-o :清除上一次执行的输出
C-c C-r :光标移动到上一次执行的输出开始位置
C-c C-u :清空本次输入
C-x ' :展开Abbrev
M-' :标记Abbrev前缀
C-x a g :将当前光标之前的单词添加为全局的Abbrev
C-x a n :跳到Abbrev的下一个slot
C-x a p :跳到Abbrev的上一个slot
* Shell Mode
M-p :向前滚动历史输入记录
M-n :向后滚动历史输入记录
C-c C-p :光标移动到上一次输入位置
C-c C-n :光标移动到下一次输入位置
C-c C-o :清除上一次执行的输出
C-c C-r :光标移动到上一次执行的输出开始位置
C-c C-u :清空本次输入
C-c C-s :保存上一次执行的输出结果
C-c 空格 :换行但不执行(一次性执行多个命令)
C-c . :将历史输入作为参数插入到当前位置
M-r :增量搜索历史输入记录
C-c M-r :根据当前输入内容在历史输入中反向搜索
C-c M-s :根据当前输入内容在历史输入中正向搜索
C-c C-c :中断任务(相当于shell中的Ctrl-C)
C-c C-d :发送eof字符
C-c 空格 :换行但不执行(一次性执行多个命令)
C-c . :将历史输入作为参数插入到当前位置
M-r :增量搜索历史输入记录
C-c M-r :根据当前输入内容在历史输入中反向搜索
C-c M-s :根据当前输入内容在历史输入中正向搜索
C-c C-c :中断任务(相当于shell中的Ctrl-C)
C-c C-d :发送eof字符
1. 利用Server模式快速启动emacs
Emacs启动比较慢,使用Server模式可以解决这个问题。启动一个Emacs实例后,可以用M-x server-start命令进入Server模式,然后保留此实例不关闭。此后,可以用“emacesclientw <文件名>”启动emacs,则这次编辑的内容事实上是由server模式的emacs实例打开,速度很快。
但在Win7下启动server-mode (用M-x server-start)命令时,会报某个目录“is an unsafe directory”的错误,无法进入server模式。这时只需要在Windows的资源管理器中到该目录(如果没有则自己创建),在该目录上按右键,选属性。“安全”-》“高级”-》“所有者”-》“编辑”,将所有者设为当前用户(原来的所有者可能是SYSTEM),即可顺利进入server模式。
如果打开emacsclientw时并没有启动一个server模式的emacs,会报错失败。可以选用EmacsW32 (/Emacs/EmacsW32.html)的patched版,它所提供的emacsclientw在不到server的时候会自动打开一个emacs实例并进入server模式。
2. 快速启动非定制的emacs
使用emacs的-Q参数即可,这时不载入任何定制包与~/.emacs文件,启动速度也很快。
3. 把emacs加入右键菜单
执行regedit打开注册表编辑器,在【HEY-CLASSES-ROOT/*/shell】下添加一项【Edit with
emacs】,数据为“Emacs编辑”,在其下再添加一项【command】,数据为“<emacs安装目录>\ -n %0” (如果不想用Server模式,则为“<emacs安装目录>\ %0”)
4. 整合w3m支持
1. 安装cygwin(win/),保证选择了w3m包,如果系统里没有cvs客户端,把cvs包也选上。安装后把cygwin下的bin目录(例如d:\cygwin\bin)加入path环境变量中。
2. 建议选用EmacsW32的patched版(/Emacs/EmacsW32.html)。(gnu emacs 23.x版在w3m中无法打开图片)
3. cmd打开命令行窗口,进入emacs安装目录的site-lisp子目录,执行“cvs -d :pserver:anonymous@:/storage/cvsroot co emacs-w3m”命令获取emacs-w3m插件的最新源码。(网站上的打包下载据说不支持emacs 23.x版)
4. 进入emacs-w3m目录,执行“emacs -batch -q -no-site-file -l w3mhack.el NONE -f w3mhack-nonunix-install”(参考 /index-en.html#installation)
4. 整合w3m支持
1. 安装cygwin(win/),保证选择了w3m包,如果系统里没有cvs客户端,把cvs包也选上。安装后把cygwin下的bin目录(例如d:\cygwin\bin)加入path环境变量中。
2. 建议选用EmacsW32的patched版(/Emacs/EmacsW32.html)。(gnu emacs 23.x版在w3m中无法打开图片)
3. cmd打开命令行窗口,进入emacs安装目录的site-lisp子目录,执行“cvs -d :pserver:anonymous@:/storage/cvsroot co emacs-w3m”命令获取emacs-w3m插件的最新源码。(网站上的打包下载据说不支持emacs 23.x版)
4. 进入emacs-w3m目录,执行“emacs -batch -q -no-site-file -l w3mhack.el NONE -f w3mhack-nonunix-install”(参考 /index-en.html#installation)
。将在上层目录(site-lisp\)中创建一个w3m目录。
5. 在~/.emacs目录中刚加入:
5. 在~/.emacs目录中刚加入:
发布评论