如何阅读
以下emacs 命令中
- C 代表Contral 键,M 代表Alt 键,ret 是回车。C-x 的含义是按住Contral 再按x
- 空格用于分隔控制字符和命令,其它字符是emacs 命令,按顺序输入。
- 尖括号<> 当中的内容不是emacs 命令,按语义输入。
- 斜杠/用于隔开多个类似的命令和描述。
常用命令
打开文件
C-x f <FilePath> ret
多窗口间切换(窗口1... 窗口N)
C-x 1...<N>
多窗口间切换(上一个/下一个)
C-x 左/右箭头键
关闭当前Buffer
C-x k ret
保存
C-x C-s
退出
C-x C-c
光标上、下、左、右移动
C-p/C-n/C-b/C-f
光标移动到行首、行尾
C-a/C-e
光标前/后移动一个单词
M-f/M-b
光标前/后移动一个句子
M-a/M-e
光标前/后移动一个段落
M-{/M-}
光标到buffer 首/尾
M-</M->
光标到第N行
M-g-g N ret
删除后一个字符
Del/C-d
删除前一个单词
M-Del/M-Backspace
删除后一个单词
M-d
删除到句首/尾
M-k/C-x Backspace/Del
删除到行尾
C-k
将当前行与上一行进行合并,空格分隔
M-^
类似于vi 的Shift+j ,不过合并的方向相反。
向前/后搜索
C-r/C-s
向上/下翻页
M-v/C-v
光标行居中
C-l
选择一个范围
C-空格
或者
C-2个空格
上面的命令将当前光标所在位置设为选择起始点,然后移动光标,移动到那就选择到那,直接执行命令即可。后面的用法,会高亮选中的区域,更利于识别。
也可以用鼠标滑亮所选区域。
注:如果输入法占用了"C-空格"的快捷键,最好改成其它。
复制所选文本
M-w
剪切所选文本
C-w
插入^G或其它控制字符
C-q C-G
dos2unix
C-x ret f unix ret
刷新一个文件内容的tricky 方法(reload)
C-x C-v ret
字符替换
M-x replace-string ret <OldStr> ret <NewStr> ret
替换行尾为换行(正则表达式)
M-x replace-regexp ret $ ret C-q C-J ret
以上2个命令作用范围是当前光标至buffer 末尾。
范围替换
高亮选中范围 M-x replace-string ret <OldStr> ret <NewStr> ret
列替换
选中范围 C-x r t <NewStr> ret
列删除
选中范围 C-x r d
列剪切
选中范围 C-x r k
列粘贴
C-x r y
替换Tab为空格
选中范围 M-x untabify ret
删除文件所有行尾空格
M-x delete-trailing-whitespace ret
批量大小写转换
选中范围 C-x C-u/C-l
光标后一个单词大小写转换
M-u/M-l
光标所在单词首字母变为大写
M-c
版本比较 diff
C-x v =
版本提交 commit
C-x v v <"message here"> C-c C-c
如果有个emace命令记不起来,可以根据几个字母或者单词搜索,也可用来发现新的命令
C-h a <CmdStr>
更改文件的编码方式
从当前编码变更UTF-8:
C-x ret f utf-8 ret
从当前编码变更到GB2312:
C-x ret f gb2312 ret
这与前面的dos2unix的原理是一样的,在f命令之后可以用TAB键查看编码名称的列表。
需要注意的是,在某些情况下,emacs在保存文件之前会对字符集做些判断,并自动的修改他们,这可能会导致上面的命令事实上的失效。比如,对于一个HTML文档,若在META标签中指定了UTF-8字符集,那么即使你使用上面命令将文件编码修改成任何其它,在emacs执行保存之后,它会自动回到UTF-8编码方式,即使你使用 将META 标签注释也是如此。
查看光标所在那个字符的编码方式
M-x describe-char ret
结果中file code: 后面的内容指出了这个字符在文件中的内码以及编码方式,这里显示的编码方式与emace内部处理文件所采用的编码无关,是文件中真实的、二进制code所用的编码方式。而charset: 后面显示的字符集并不总是与file code一致,似乎这里仅仅表明了与这个字符最亲近的一种字符集。
DB2 相关命令
建立一个db2 进程,并将当前emacs 实例中的buffers 与其关联
M-x sql-db2 ret
将当前buffer 与emacs实例中已经存在的db2 进程进行关联
M-x sql-set-sqli-buffer ret
在db2 进程已经建立并且关联之后,可以使用以下命令执行db2 CLP命令或SQL语句。
执行整个buffer的语句
M-x sql-send-buffer
执行选中的语句
选中范围 M-x sql-send-region
执行光标所在段落的语句
M-x sql-send-paragraph
段落的默认分隔符是空行(或者仅含有空格和TAB)。
在命令编辑区编辑新语句并执行
M-x sql-send-string
以上执行语句的部分命令有快捷键可调用,也可以使用global-set-key 命令将其更改为自己习惯的按键。
emacs环境配置
将emacs加入Windows 右键菜单
为了能使用鼠标右键菜单,快捷的将任何文件以emacs方式打开,可以通过以下两种方式实现:
- 使用"发送到(Send to)
为runemacs.exe 创建一个快捷方式,并放至"发送到(Send to)"文件夹,一般位于:"C:\Documents and Settings\***\SendTo"。
- 右键菜单直接打开
这种方式需要修改注册表,参照以下注册表内容,可以修改路径后导入,也可以独立创建注册表项目
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\*\shell\Open with emacs] [HKEY_CLASSES_ROOT\*\shell\Open with emacs\command] @="C:\\emacs-23.1\\bin\\runemacs.exe\" \"%1\""
这种方式会为每个文件创建一个单独的编辑窗口(多个emacs实例),若希望共享一个emacs编辑窗口(共享emacs实例),请参照下面一个小节。
更友好的右键菜单
为了实现多次打开的文件共享同一个emacs编辑窗口,需要以下步骤:
- 将以下命令加入.emacs文件(一般位于: "C:\Documents and Settings\***\Application Data\.emacs")
(server-start) - 新建以下Windows 环境变量:
EMACS_SERVER_FILE=C:\Documents and Settings\***\Application Data\.emacs.d\server\server
在完成第一步以后,启动emacs,查看以上环境变量路径中的文件是否创建成功,若没有找到此文件,请核对你的emacs版本修改为正确的路径。以上文件在emacs关闭后自动删除。
环境变量设置完毕需要重新启动Windows才能生效。 - 修改注册表,添加右键菜单项。若前面已经创建此注册表项目,对照这里修改即可。
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\*\shell\Open with emacs] [HKEY_CLASSES_ROOT\*\shell\Open with emacs\command] @="C:\\emacs-23.1\\bin\\emacsclientw.exe -a \"C:\\emacs-23.1\\bin\\runemacs.exe\" \"%1\""
emacsclientw.exe 将不启动新的实例,而是在当前实例中打开新的文件,而"-a"参数通知emacs若没有实例在运行,则启动新的实例runemacs.exe。
这个方式简单有效,可以满足大部分需求,但有一个缺陷,即在没有任何emacs实例运行的情况下,一次选中多个文件打开时,会打开等同于文件数目的emacs窗口,即第一次无效。原因是打开文件的请求是同时处理的,第一个emacs实例创建的服务(前述的server文件)还来不及被检测到。
解决这个问题要稍微复杂点,请参考接下来的小节。
完美的右键菜单
- 按照上一小节的步骤1与步骤2,配置好.emacs文件与环境变量EMACS_SERVER_FILE
- 下面是两个文件(emacs.bat 与emacs.vbs)的代码,保存到emacs的bin目录。
- 修改注册表,添加右键菜单项。若前面已经创建此注册表项目,对照这里修改即可。
tasklist /FI "IMAGENAME eq emacs.exe" /NH | find "emacs.exe" && goto check || goto new
:new
C:\emacs-23.1\bin\runemacs.exe
:check
if not exist "%EMACS_SERVER_FILE%" goto check
:existing
C:\emacs-23.1\bin\emacsclientw.exe -n %1
DIM objShell
set objShell=wscript.createObject("wscript.shell")
iReturn=objShell.Run("cmd.exe /C C:\emacs-23.1\bin\emacs.bat " & """" & WScript.Arguments(0) & """", 0, TRUE)
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\shell\Open with emacs]
[HKEY_CLASSES_ROOT\*\shell\Open with emacs\command]
@="Wscript.exe \"C:\\emacs-23.1\\bin\\emacs.vbs\" \"%1\""
延展阅读
- 文章信息
- 版权声明: 本文可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息。
- 原文出处: http://www.aiview.com/
- 写于: 2008-02-29 [Edit]
- 作者: Alex (email &msn)

- 标签 Tags: emacs (1), Study notes (10)


