(转)Editor MACroS(宏编辑器)
??最初,人们认为Emacs是一个编辑器,与Vim一起并称为两大编辑神器,据说Vim是编辑器之神而Emacs是神之编辑器,又据说这世界上的程序员分三种,一种是使用Emacs,一种是使用Vim,另外一种是其他。也有人认为Emacs是一个架构在编辑器上的集成环境,除了编辑功能外,还可以完成文件管理,终端模拟,浏览网页,收发邮件,编译程序,以及煮咖啡等工作。更有人说Emacs是伪装成编辑器的操作系统,甚至说Eamcs是一种信仰。
??Emacs最初由Richard Stallman于1975年开发,之后产生了众多的衍生版本,而目前使用得最多的两个版本是Richard Stallman在1984年开发的GNU Emacs和1991年由Jamie Zawinski写成的XEmacs。Emacs可谓历史悠久,可以说Emacs的历史,等于一部计算机史,等于一部世界黑客史。
附:编辑器大战
Emacs能做什么王垠师兄如是说: 据我所知,Emacs 的能力包括:
- 编辑文本
- 编辑程序,
- 作为其他程序的界面
- 作为操作系统
- 煮咖啡。
Emacs是一个具有超强扩展性,超强定制性的操作平台,它能做什么取决于你对它的定制和扩展。Emacs的强大来源于其近乎无限的可定制性和可扩展性。
Emacs 介绍
Emacs界面(从上到下):
缓冲区buffer
状态栏:?[U]?[**|--|%%]?[name]?[All|Bot]?[L23]?[fundamental]
回显区:提示正在进行的操作,如“文件已保存”,等待输入命令等。
命令: 通过M-x command方式执行命令,执行命令时,可用TAB补全,使用M-p上翻,使用M-n下翻。Eamcs的取消按钮是连按三下ESC ( M-x keyboard-escape-quit ),但当使用一些交互式命令时可能无法使用此种方法,此时可用C-g ( M-x keyboard-quit )。
快捷键: 用快捷键(组合键)发送命令,C- , M- , C-M- , S- , RET , TAB , ESC , SPC , DEL , Delete,如C-x C-c ( M-x save-buffers-kill-emacs),还有些命令可传递参数,如C-u(参数)C-f 参数表示重复执行C-f 的次数
模式: 主要模式major mode和次要模式minor mode
??主要模式由文件类型决定,常见的有:
fundamental:缺省的Emacs模式,有最少的设置和绑定
text-mode:编辑文本的基本模式
c-mode:用于C程序源代码
lisp-interaction-mode:用于编辑和编译Lisp
ptex-mode:用于编辑TeX文档
??次要模式可以组合到主要模式中,常见的如:
abbrev-mode:用于生成和使用缩写
auto-fill-mode:用于自动文字环绕,填充较长的行和段落
line-number-mode:显示当前行号
overwrite-mode:覆盖模式,代替默认的插入模式
??可以用命令来指定模式:M-x modeName,对于一个buffer来说,当前的主要模式只能有一种,当指定主要模式时,原来的主要模式会被替换,而当前的次要模式可以有多种。如果输入的模式包含在当前模式中,对于主要模式,会清空所有的次要模式,对于次要模式,会关闭这个次要模式。模式的变化在状态栏中可以看到。
帮助文档:
快捷键 | 命令 | 说明 |
---|---|---|
C-h ? | 关于帮助系统的帮助,可以通过SPC和DEL键滚动,通过ESC退出 | |
C-h t | M-x help-with-tutorial | 进入《Emacs 快速指南》 |
C-h r | M-x info-emacs-manual | Emacs使用手册 |
C-h i | M-x info | 《Emacs说明》 |
C-h a | M-x apropos-command | 搜索命令》 |
C-h v | M-x describe-variable | 查看变量说明》 |
C-h f | M-x describe-function | 查看函数说明 |
C-h m | M-x describe-mode | 查看当前mode的相关文档,包含mode中的命令、快捷键等》 |
C-h k KEYS | M-x describe-key KEYS | 查看快捷键对应的命令及其简要说明 |
C-h c KEYS | M-x describe-key-briefly | 查看键绑定说明》 |
C-h w | M-x where-is | 查看某个命令对应的快捷键》 |
C-h b | M-x describe-bindings | 查看当前buffer所有的快捷键列表》 |
KEYS C-h | 查看当前buffer中以某个快捷键序列开头的快捷键列表 |
使用帮助时,可能会分割出其他frame,可通过C-x 1 关闭。
一. 编辑功能
1. 文件操作
文件操作都集中在C-x “菜单”中:
快捷键C-x | 命令M-x | 说明 |
---|---|---|
C-x C-f | fine-file | 打开文件或者目录 |
C-x C-c | save-buffers-kill-emacs | 保存并退出 |
C-x C-z | iconify-or-deiconify-frame | 挂起(最小化) |
C-x C-r | fine-file-read-only | 只读模式打开 |
C-x i | insert-file | 插入文件 |
C-x C-s | save-buffer | 保存 |
C-x s | save-some-buffers | 保存所有buffers |
C-x C-w | write-file | 另存为 |
C-x RET r | revert-buffer-with-coding-system | 以指定编码读取文件 |
C-x RET f | set-buffer-file-coding-system | 以指定编码保存文件 |
revert-buffer | 恢复至初始状态 | |
C-x d | dired | 进入目录列表模式 |
C-x C-d | list-directory | 获取文件列表(简洁) |
2. 光标定位
向前 | 向后 | 向下 | 向上 | |
---|---|---|---|---|
翻页 | C-v | M-v | ||
字符 | C-f | C-b | C-n | C-p |
单词 | M-f | M-b | ||
句 | M-a | M-e | ||
行 | C-a | C-e | ||
段落 | M-{ | M-} | ||
缓冲区 | M-< | M-> |
其他:
M-g M-g | goto-line | 跳转到某行 |
M-x | goto-char | 跳转到字符位置 |
C-M-l | reposition-window | 将当前行卷至页面中部(使用数字参数指定行) |
M-r M-x | move-to-window-line | 移动光标至页面中间的行(使用数字参数指定行) |
3.输入删除
??输入很简单,直接在缓冲区输入即可,不像Vim
- | 向前 | 向后 |
---|---|---|
字符 | C-d | DEL |
单词 | M-d | M-DEL |
行 | C-k(删除至行尾) | |
整行 | C-S-backspace | |
按表达式删除 | C-M-k | |
区块 | C-w | |
删除连续空格 | M-x delete-horizontal-space |
注1. 在PC中,用Backspace代替DEL
注2. 单词、行、区块的删除是kill,相当于剪切,会被放入kill-ring,字符及空格的删除是delete
4.复制粘贴
复制前要选择:C-@开始区块选择,然后移动光标,选中区域会高亮
剪切:前面“剪切”部分包括了一些剪切操作,对区块剪切可用C-w
复制:区块复制用M-w
粘贴:C-y粘贴kill-ring堆栈的最后一次内容,C-y之后可以继续M-y,对kill-ring内容依次召回。
5.撤销重做
撤销:C-/ (每插入20个字符,视为一个undo的单位)
重做:C-/ 后,依次输入C-g C-/ 就可以redo
二.高级编辑
1.窗口管理
- | - | - |
---|---|---|
C-x 2 | split-window-vertically | 水平分割 |
C-x 3 | split-window-horizontally | 竖直分割 |
C-x 1 | delete-other-window | 只保留当前窗格 |
C-x 0 | delete-window | 关闭当前窗口 |
C-x o | other-window | 切换窗口 |
C-M-v | scroll-other-window | 滚动下一个窗格 |
2.缓冲区管理
Emacs打开新的buffer时,并不会关闭原来的buffer,需要手动操作
- | - | - |
---|---|---|
C-x C-b | list-buffers | 查看缓冲区列表 |
C-x b | switch-to-buffer | 切换缓冲区 |
C-x k | kill-buffer | 关闭缓冲区 |
其他可参考ibuffer.el扩展。
3.搜索和替换
Emacs搜索包括增加搜索和一般搜索,前者指在前一次搜索的结果上继续搜索,在使用增加搜索时,若上一次搜索之后进行了其他操作,则需要连续按两次快捷键召回关键词。
(1). 增加搜索
- | - | - |
---|---|---|
C-s M-x | isearch-forward | 向前增加搜索 |
C-r M-x | isearch-backward | 向后增加搜索 |
C-M-s M-x | isearch-forward-regexp | 正则表达式向前增加搜索 |
C-M-r M-x | isearch-backward-regexp | 正则表达式向后增加搜索 |
(2). 一般搜索
- | - | - |
---|---|---|
M-x | search-forward | 向前搜索 |
M-x | search-backward | 向后搜索 |
M-x | search-forward-regexp | 正则表达式向前搜索 |
M-x | search-backward-regexp | 正则表达式向后搜索 |
(3). 替换
- | - | - |
---|---|---|
M-x | replace-string | 替换 |
M-x | replace-regexp | 正则表达式替换 |
(4). 询问替换
- | - | - |
---|---|---|
M-% M-x | query-replace | 询问替换 |
C-M-% M-x | query-replace-regexp | 正则表达式询问替换 |
(5). 取消搜索
C-g 取消搜索,光标返回搜索前的位置,RET结束搜索,光标停留在当前位置。
3. 批量处理
批量处理的命令有很多,如:
选中区域,M-x untabify 将TAB字符转换为空格。
选中区域,M-x indent-region 对齐文本块。
三.简单配置
Emacser通常要对Emacs进行定制,使用起来才会爽。据说Vimer嘲笑Emacser的一个理由就是:
Emacser如果丢了配置文件就什么都干不了。
1.配置文件
Emacs的配置文件在~/.emacs,如改一下颜色配置:
(set-background-color "black") ;; 使用黑色背景
(set-foreground-color "white") ;; 使用白色前景
(set-face-foreground ‘region "green") ;; 区域前景颜色设为绿色
(set-face-background ‘region "blue") ;; 区域背景色设为蓝色
重启可使配置文件生效,但Emacser一般用 M-x eval-buffer 使其立即生效。
2.安装插件
??Emacs和Vim都有大量的插件,Emacs的插件文件一般都是以el为后缀,首先指定一个插件目录,如~/.emacs.d/lisps
,然后在~/.emacs
中指定插件目录和要使用的插件:
(add-to-list ‘load-path "~/.emacs.d/lisp/"‘)
(require ‘pluginname‘)
??还是对于颜色设置,前面的方法只是进行了一些简单的颜色设置,有热心人写了插件,配置好了很多方案,不仅仅是前景背景色,还包括语法高亮等,可从这里下载,解压后将color-theme.el文件和themes文件夹复制到插件目录,然后修改配置文件:
(add-to-list ‘load-path "~/.emacs.d/lisp/"‘)
(require ‘color-theme)
(color-theme-initialize)
??M-x eval-buffer使配置文件生效后,可执行插件提供的命令:M-x color-theme-select RET进入配色方案选择界面,此时可能希望将配色方案设成默认,按d,会出现该配置的提示信息,如:
color-theme-classic is an interactive Lisp function in
`color-theme-library.el‘.
(color-theme-classic)
Color theme by Frederic Giroud, created 2001-01-18.
AntiqueWhite on darkslategrey scheme. Based on Gnome 2, with my favorit
color foreground-color and fontlock color.
将类似 (color-theme-classic) 的内容添加到.emacs中,就可每次启动Emacs时自动选择配色方案了。
3.大佬进化
这里推荐几个有名的发行版: