emacs

GNU Emacs编辑器


语法格式

emacs [-nw] [-qQ] [+line[:column]] [-t file] [-u user] [gnu-opts] [files]
emacs [--help] [--version]

命令简介

emacs是一个传统的功能丰富的全屏幕编辑器,支持普通的字符终端,也支持X Windows终端。emacs提供大量的交互帮助信息与手段。无论何时,只要按下Ctrl-H组合键即可进入帮助机制,显示相应的帮助信息。其中,按下“Ctrl-H t”组合键即可进入emacs自学界面,其他帮助功能详见“联机帮助”一节。

当需要编辑文件时,输入下列emacs命令即可启动基于文本的常规编辑器(其中的“-nw”必须是第一个选项,如果省略,将会进入基于X Windows界面的编辑器),把指定的文件读入缓冲区,在终端窗口中显示文件前部的内容,在底部显示缓冲区(文件)的名字。如果指定的文件不存在,emacs将显示一个空的屏幕,同时在底部显示“New file”信息。“-q”选项表示禁止读取“ ~/.emacs”用户启动文件,确保使用未定制的标准编辑器功能。

$ emacs -nw -q file

在emacs的屏幕窗口中,底部是一个反显的条形模式行(Mode Line),其中展示了当前编辑的是哪一个缓冲区(文件),缓冲区中的内容是否已经修改,当前窗口中的内容在缓冲区的位置,如当前行号和已读数据的百分比等。如果拆分成多个窗口,每个窗口都会存在一个模式行。屏幕底部是一个单行的交互信息区(Echo Area),用于显示各种信息,提请用户确认,以及用户输入命令等。

emacs通常总是处于插入模式。当需要输入数据时,可以使用箭头键等移动光标,在光标位置输入数据即可。也可以使用Delete或退格符等键删除字符。利用撤销功能撤销最近一次或最近若干次的修改,校正编辑错误。使用检索命令正向或反向检索、增量或非增量检索,详见“编辑命令”一节的说明。

当需要退出emacs编辑器时,可以按下Ctrl-X与Ctrl-C组合键。如果编辑的文件需要保存,emacs将会在交互信息区提示用户是否需要保存文件。此时可以输入y或n表示保存或放弃,或者直接按下Ctrl-G组合键返回编辑界面。在编辑期间,也可以按下Ctrl-X与Ctrl-S组合键,随时保存已编辑的文件。如果当前的缓冲区没有任何改动,emacs将会在交互信息区给出“No changes need to be saved”的提示信息。

emacs提供大量的编辑命令,这些命令大部分都捆绑到一定的键序列,其中包括C-x(即Ctrl-X,简写作^X)、Meta-x和Meta-C-x等组合键(x可以是任何字母)。在不提供Meta键的终端上,可以使用ESC键或Alt键替代。例如,当需要按下Meta-x键时,可以先按ESC键,释放后再按x键,或者同时按下Alt与x键。至于Meta-C-x键,可以先按ESC键,释放后再按下Ctrl-X组合键。

如果没有绑定的键序列可用,可以按下Meta-x键,然后在交互信息区输入emacs命令。如果命令太长,可用空格或制表键补缺。也可以使用“?”命令查询可用的命令列表。

命令选项

+line[:column]  直接跳转到指定的行或行与列。从指定的文本行开始编辑文件。注意,加号与行号之间没有空格,冒号前后也没有空格。这个选项仅适用于文本文件。

-q, --no-init-file  禁止加载初始化文件。

-Q, --quick  等价于指定了“-q”等选项。

-t file, --terminal file  使用指定的文件取代终端作为标准输入与标准输出。如果存在,这个选项必须是命令行的第一个选项。

-u user, --user user  加载用户的初始化文件~/.emacs。

--debug-init  在处理用户启动文件~/.emacs期间启用Emacs Lisp调试器。这个选项主要用于调试用户启动文件中的问题。

--file file, --find-file file, --visit file  编辑指定的文件。这与在命令行上直接指定文件参数一样。

--multibyte, --no-unibyte  启用多字节模式(默认)。

-nl, --no-shared-memory  禁止使用共享内存。

-nw, --no-window-system  禁止使用X Windows界面,从而禁止使用鼠标和菜单。作为一个普通的图形界面编辑器,直接使用按键方式编辑文件。

--unibyte, --no-multibyte  启用单字节模式。

编辑命令

文件操作

^X^F  提示用户输入文件名,读取其中的数据,置于一个新的缓冲区中,使用文件的名字(不包括扩展名)命名缓冲区。

^X^V  提示用户输入文件名,读取其中的数据,置于当前的缓冲区中(覆盖当前缓冲区中的数据)。

^X 4 ^F  提示用户输入文件名,读取其中的数据,置于一个新的缓冲区中,使用文件的名字(不包括扩展名)命名缓冲区。针对新的缓冲区,创建一个新的窗口,然后进入该窗口。这个命令将会把原先的窗口分成上下两半(假定原先只有一个窗口)。

^X^S  把当前缓冲区中的数据写入原先的文件。

^X S  提示用户确认是否保存每个修改过的缓冲区。

Meta-x set-visited-file-name  提示用户输入文件名,使用该文件名命名当前的缓冲区。

^X^W  提示用户输入文件名,使用该文件名命名当前的缓冲区,然后把当前缓冲区中的数据写入该文件或另行指定的其他文件中。

Meta-~  清除当前缓冲区的修改标志。

光标定位

^F, ←  光标左移一个字符位置。

^B, →  光标右移一个字符位置。

^P,↑  光标移至上一行的同一字符位置。

^N,↓  光标移至下一行的同一字符位置。

Meta-f  光标右移一个字(由字母和数字组成的字符串),移至当前或下一个字的字尾。

Meta-b  光标左移一个字(由字母和数字组成的字符串),移至当前或前一个字的字首。

^A  光标移至当前行的行首。

^E  光标移至当前行的行尾。

Meta-r  光标移至终端窗口中间一行的行首。

^V  终端窗口内容前(下)滚一屏。

Meta-v  终端窗口内容后(上)滚一屏。

Meta-a  把光标移至当前句子的句首。

Meta-e  把光标移至当前句子的句尾。

Meta-{  把光标移至当前段落的起始位置。

Meta-}  把光标移至当前段落的结尾位置。

Meta-<  把光标移至缓冲区的起始位置。

Meta->  把光标移至缓冲区的结尾位置。

^L  清除并刷新终端窗口,把当前行滚动至终端窗口的中间行。

联机帮助

^H a  提示用户输入字符串,显示包含字符串的命令列表。

^H b  列出当前有效的键序列与emacs命令绑定关系列表。

^H c keyseq  显示绑定到指定键序列的emacs命令的名字。

^H k keyseq  显示绑定到指定键序列的emacs命令文档的名字。

^H i  从顶级菜单开始运行info命令(使用q)退出。

^H l  显示最近输入的100个字符。

^H n  显示emacs新闻文件。

^H t  进入emacs自学界面。

^H w  提示用户输入命令的名字,显示绑定到指定命令的键序列(如果已绑定)。

删除命令

退格键  删除光标位置之前的字符。

^D,Delete  删除光标位置的字符。

Meta-d  删除从光标位置开始至当前字字尾间的字符串。

Meta-退格键  删除从光标位置开始至前一个字字首间的字符串。

Meta-k  删除从光标位置开始直至句尾间的任何字符。

^K  删除从光标位置开始直至行尾间(不包括换行符)的任何数据。

^U 1 ^K  删除从光标位置开始直至行尾(包括换行符)的任何数据。

^U 0 ^K  删除从光标位置左边开始直至行首间的任何数据。

Meta-z char  删除从光标位置开始直至第一个指定字符之间的任何数据。

Meta-w  把当前区域中的数据复制到删除环形缓冲区(但不会从缓冲区中删除区域内的数据)。

^W  删除当前缓冲区内已设区域中的数据。

^Y  召回最近删除的数据,写到当前缓冲区的光标位置。

Meta-y  清除刚召回的数据,旋转删除环形缓冲区,召回下一个数据。注意,这个命令只能在Ctrl-Y之后使用。

^_  撤销最近一次的改动。

^_^_  撤销最近两次的改动。

^Q  插入特殊字符,如控制字符或3个八进制数值编码表示的字符等。

窗口操作命令

^X b  提示用户输入缓冲区的名字,在当前窗口中切换到默认或指定的缓冲区。

^X 2  把当前的窗口纵向一分为二。

^X 3  把当前的窗口横向一分为二。

^X o  选择其他窗口。

Meta-C-v  滚动其他窗口。

^X 4b  提示用户输入缓冲区的名字,在其他窗口选择该缓冲区。

^X 4f  提示用户输入文件的名字,在其他窗口选择该文件。

^X 0  关闭当前的窗口。

^X 1  保留当前的窗口,关闭其他所有的窗口。

^X shrink-window  使当前的窗口缩短一行。

^X ^  使当前的窗口增高一行。

^X {  使当前的窗口缩进一列。

^X }  使当前的窗口扩展一列。

缓冲区操作命令

^X^S  把当前缓冲区中的数据写入相关的文件。

^X^F  提示用户输入文件名,打开该文件。

^X b  提示用户输入缓冲区的名字,然后选中相应的缓冲区。如果缓冲区不存在,则创建新的缓冲区。

^X 4b  提示用户输入缓冲区的名字,在另外一个窗口显示缓冲区中的数据。

^X^B  创建名为“Buffer List”的缓冲区,在另外一个窗口中显示其内容。现有的窗口仍然存在且仍为当前窗口,但新的窗口可能会叠加在上方。在“Buffer List”缓冲区中,显示每个缓冲区中的名字、大小、编辑模式或最初的文件名。

Meta-x rename-buffer  提示用户输入一个新的缓冲区名,把新的缓冲区名赋予当前缓冲区。

Meta-x append-to-buffer  提示用户输入缓冲区的名字,把当前区域中的数据附加到指定缓冲区的后面。

Meta-x prepend-to-buffer  提示用户输入缓冲区的名字,把当前区域中的数据插入到指定缓冲区的前面。

Meta-x copy-to-buffer  提示用户输入缓冲区的名字,删除指定缓冲区中的数据,把当前区域中的数据复制到指定的缓冲区。

Meta-x insert-buffer  提示用户输入缓冲区的名字,把其中的全部数据插入到当前缓冲区的光标位置。

^X k  提示用户输入缓冲区的名字,删除指定的缓冲区。

Meta-x kill-some-buffers  遍历缓冲区表,从而提供删除每个缓冲区的机会。

行操作命令

Meta-x occur  提示用户输入正则表达式,把包含匹配正则表达式的每一行写入名为Occur的缓冲 区中。

Meta-x delete-matching-lines  提示用户输入正则表达式,从光标的当前位置开始,正向删除匹配正则表达式的每 一行。

Meta-x delete-non-matching-lines  提示用户输入正则表达式,从光标的当前位置开始,正向删除不匹配正则表达式的每一行。

检索命令

^S  提示用户开始执行增量检索,逐步输入字符,正向检索匹配的字符串。

^S CR  提示用户输入完整的字符串,按下Enter键之后开始正向检索。

^R  提示用户开始执行增量检索,逐步输入字符,反向检索匹配的字符串。

^R CR  提示用户输入完整的字符串,按下Enter键之后开始反向检索。

M-C-s  提示用户开始执行增量检索,逐步输入正则表达式,正向检索匹配的字符串。

M-C-s CR  提示用户输入完整的正则表达式,按下Enter键之后开始正向检索。

Meta-x isearch-backward-regexp  提示用户开始执行增量检索,逐步输入正则表达式,反向检索匹配的字符串。

Meta-x isearch-backward-regexp CR  提示用户输入完整的正则表达式,按下Enter键之后开始反向检索。

替换与响应命令

Meta-x replace-string  分两次提示用户输入两个字符串,从标记开始正向检索,使用第二个字符串替换发现的第一个字符串实例。在命令执行的起始位置设置标记。

Meta-%, Meta-x query-replace  同上,但每个替换都需要事先提请用户确认。

Meta-x query-regexp  分两次提示用户分别输入一个正则表达式与字符串,从标记开始正向检索,使用字符串替换匹配正则表达式的字符串实例。在命令执行的起始位置设置标记。

Meta-x query-replace-regexp  同上,但每一个替换都需要事先提请用户确认。

CR  退出整个检索与替换操作。

退格键  认可当前的替换,继续下一个替换确认。

Delete  禁止执行当前的替换,继续下一个替换确认。

,  认可当前的替换,显示替换结果,提示用户输入另外一个命令。

.  认可当前的替换,但检索与替换到此为止。

!  认可当前的替换,其余的所有替换无须确认自动替换即可。

区域操作命令

^@  在当前的光标位置设置标记,从而设定区域的边界。

Meta-W  把区域中的数据复制到删除环形缓冲区。

^W  删除区域中的数据。

Meta-x print-region  复制区域中的数据,提交给打印服务打印。

Meta-x append-to-buffer  提示用户输入缓冲区的名字,把区域中的数据附加到该缓冲区。

^X^U  把当前区域中的数据转换成相应的大写字母。

^X^L  把当前区域中的数据转换成相应的小写字母。

字母大小写转换命令

Meta-l  把光标右边的单字或光标位置开始的当前单字转换成小写字母。

Meta-u  把光标右边的单字或光标位置开始的当前单字转换成大写字母。

^X^L  把区域中的数据转换成相应的小写字母。

^X^U  把区域中的数据转换成相应的大写字母。

运行Shell命令

Meta-!  提示用户输入Shell命令,按下Enter键后立即执行,显示输出结果。

^U Meta-!  提示用户输入Shell命令,按下Enter键后立即执行,把命令的输出结果插入当前的光标位置。

Meta-|  提示用户输入Shell命令,把指定区域中的数据作为命令的输入,执行命令并显示其输出结果。

^U Meta-|  提示用户输入Shell命令,把指定区域中的数据作为命令的输入,执行命令,删除区域中的数据,把命令的输出结果插入区域中。

命令简介

1. 利用emacs编辑器,在普通的终端窗口中编辑文件。

$ emacs -nw mycode.c

索引:A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z