前言:最近使用Emacs,因此整理了官方中文教程中的一些知识点和常用的命令,方便查阅使用。


对于用习惯Windows的人来说,想要入门Emacs不是一件特别容易的事,但好在Emacs提供了官方的教程文档,比较清晰和详尽的讲述了Emacs的基本使用方法。

首先是Emacs的基本布局,如图:

C-h-h查看帮助窗格

Emacs提供了大量帮助信息,可以在帮助窗格中查看。

C-h t 官方教程

C-h t可以打开官方的使用教程,本文档基于此进行整理。

首先需要理解Emacs命令(快捷键)的构成:

值得注意的是,Emacs的命令提示中短横线-表示组合键同时按下

例如C-h-h,就是在按下CONTROL键之后,按两次h;而C-h h,则是在按下CONTROL键之后按一次h,松开CONTROL键再按一次h。

根据官方教程介绍:META 系列组合键用来操作“由语言定义的单位(比如词、句子、段落)”,而 CONTROL

系列组合键用来操作“与语言无关的基本单位(比如字符、行等等),后面的快捷键可以体会到这一点。

Emacs各种基础常用命令介绍:

命令 作用
常用控制命令 C-x C-c 退出Emacs
C-z 挂起Emacs,回到shell但不杀死Emacs进程。在常用的 shell 中,通常可以用“fg”或者“%emacs”命令再次回到 Emacs 中
C-g 退出正在运行的命令(包括C-u命令)
C-/ 或 C-_ 或 C-x u 撤销 Undo,可用C-u命令指定次数
帮助命令 C-h-h 或 C-h ? 打开帮助,可以查看与帮助相关的命令有哪些
C-h b 列出当前模式下的所有组合键命令及其效果
C-h c 其后接某个命令,用于在小缓冲区查看其作用,例如 C-h c C-p
C-h k 其后接某个命令,用于打开一个新窗格显示更多帮助信息
C-h f 其后接函数名,解释一个函数,例如C-h f previous-line
C-h a 相关命令搜索,用于列出与关键字相关的所有长命令名称(可用M-x执行的命令),例如C-h a file
C-h i 打开名为“*info*”的特殊缓冲区,可以阅读安装的软件包使用手册
ESC ESC ESC 通用的“离开”命令,可以用于关掉多余窗格、离开小缓冲区,或者退出“递归编辑”模式(状态栏的编辑模式小括号外出现大括号表示进入递归编辑,例如【比如在用 M-% 进行交互式替换的时候你又用了 C-s 进行搜索,这时替换模式并没有结束,但你又进入了搜索模式,这就是所谓的递归编辑。不能用 C-g 退出递归编辑,因为 C-g 的作用是取消“本层递归编辑之内”的命令和其参数(arguments)】
移动光标命令 C-v 移动到下一屏,相当于PageDn
M-v 移动到上一屏,相当于PageUp
C-l 重绘屏幕,将光标所在行置于屏幕中央
C-p 上一行,p代表previous
C-n 下一行,n代表next
C-b 向左移,b代表backward
C-f 向右移,f代表forward
M-b 向左移动一个“语言单位”(英文移动一个单词,中文移动到标点符号)
M-f 向右移动一个“语言单位”(同上)
C-a 移动到一行的头部
C-e 移动到一行的尾部
M-a 移动到句子的头部
M-e 移动到句子的尾部
M-< 移动到所有文字(文档)的最开始
M-> 移动到所有文字(文档)的最末尾
数字参数命令 C-u (或按住META不放) 指定数字作为其后命令的参数,如C-u 8 C-f 会向前移动8个字符,C-u 8 * 会输入8个*
窗格命令 C-x 1 关闭其他窗格,保留光标所在窗格,注意是数字1不是小写字母l
C-x 2 分隔出两个垂直窗格,水平分隔线
C-x 3 分隔出两个水平窗格,垂直分隔线,可以和C-x 2混合使用,例如:
C-x 0 关闭当前光标所在窗格,注意是数字0
C-x o 将光标移动到下一个窗格,注意是小写字幕o
窗口命令 M-x make-frame 窗口由多个窗格及其菜单、滚动条、回显区等组成。只有在图形界面下能够显示多个窗口,文本终端中只能显示一个窗口。该命令用于创建一个新的窗口(相当于Emacs多开)。
M-x delete-frame 删除选中的窗口
插入删除命令 对应Backspace键,删除(Delete)光标前的一个字符
C-d 相当于Delete键,删除(Delete)光标后的一个字符
M- 移除(Kill)光标前的一个词,可粘贴
M-d 移除(Kill)光标后的一个词,可粘贴
C-k 移除(Kill)光标到行尾的字符,可粘贴。其后所有的行都向上移动。单独的 C-k 会把一行的内容移除,而第二个 C-k 则会移除换行符,但如果同时使用C-u命令,则会将多行连同其后的换行符一起移除,而不仅仅是重复 C-k 而已。比如 C-u 2 C-k 会把两行以及它们的换行符移除
M-k 移除(Kill)光标到句尾的字符,可粘贴
C- 或 C-@ 为空格键,选择需要被移除的文本高亮,如图:
C-w 剪切 Cut(Kill),w代表wipe
M-w 复制 Copy
C-y 粘贴 Paste,y代表召回(yank),用于召回前一次移除(Kill)的内容,通过同一个命令移除的内容可以被一次性召回(yank)
M-y 召回上一次之前移除(Kill)的内容,需要先使用C-y命令,再使用该命令。不断重复该命令直到找到想要召回的内容,用C-u可为其指定正或负数参数,表示执行次数和方向
文件命令 C-x C-f 寻找一个文件,输入的文件名出现在底部小缓冲区中(minibuffer)。该命令用于寻找不存在文件时,会创建一个新文件(并在保存文件时最终写入硬盘)
C-x C-s 保存文件,如图:
C-x C-w 写入文件,类似于Save as,另存为
缓冲区命令 C-x C-b Emacs将每个编辑中的文件存储在缓冲区(buffer)中,每打开到一个文件,就开辟一个缓冲区。该命令用于列出所有缓冲区(注意缓冲区名称与文件名并不总是相同)。例如:
C-x b 该命令加缓冲区名称,切换缓冲区
C-x s 保存多个缓冲区
命令集扩展 扩展命令风格 由于Emacs命令众多,不能都对应到CONTROL和META组合键上,所以采用扩展命令的方式来解决,包含两种风格。C-x 字符扩展:在其后输入另一个字符或组合键;M-x 命令名扩展:在其后输入一个命令名。
C-x 扩展 C-x扩展很常见,不赘述
M-x扩展 M-x扩展不常用,例如使用M-x replace-string进行字符串替换,会将光标之后的所有符合条件的文本进行替换:。多字符命令可以使用键进行自动补全,如果有多个可补全的命令,Emacs会在窗格下方的“回显区”(ECHO AREA)进行提示,类似在Shell中按两次Tab的提示
自动保存的恢复 M-x recover file Emacs会定期将编辑的文件写入”自动保存“文件,文件名首尾带有”#“字符,该文件会在正常存盘后被删除。可以使用该命令恢复自动保存的文件。
切换主模式 M-x NAME-mode 命令中的NAME表示主模式的名称,例如fundamental-mode切换到缺省模式,python-mode切换到python模式等
切换Emacs外观主题 M-x customize-themes 用于更换Emacs的外观主题
扩展包查询 M-x list-packages 列出可用的Emacs扩展包
搜索命令 C-s 向前搜索,输入该命令进入“I-search”状态。Emacs搜索命令属于渐进式(incremental)的搜索,搜索与输入同时进行
C-r 向后搜索,输入该命令进入“I-search backward”状态
替换命令 M-x replace-string 在前述M-x扩展部分提到过,用于替换光标之后符合条件的所有文本
M-% 交互式替换,根据用户的输入查询文本,询问并替换

Emacs状态栏介绍:

Emacs回显区上方的一行是状态栏包含当前缓冲区的一些信息,如下图:

(1)编码类型:状态栏第一项为当前缓冲区所编辑文字的编码类型,例如这里的U表示utf-8,c表示中文gbk等。

(2)文本换行方式:编码类型后面是换行符表示方式,主要是三种类型,Unix、Mac和\,分别代表:

  • Unix系统(如linux和近几年的MacOS等)风格,每行以LF结尾,即"\n"
  • Mac系统风格,每行以CR结尾,即“\r”
  • Dos(包括Dox系统和Windows系统)风格,每行以CRLF结尾,即“\r\n”

(3)文本写入权限:第一个*的位置,表示文本是否可以写入,“*”表示可写入,“-”表示只读

(4)文本是否被修改:第二个*的位置,表示缓冲区文本是否被修改,“*"表示已被修改,”-“表示未被修改

(5)当前文件夹:图中-所在位置,表示本地的当前文件夹(工作区)

(6)当前文件名:TUTORIAL.cn位置是当前缓冲区的文件名

(7)光标位置百分比:55%位置表示当前光标位置占全文的百分比,如光标在开头则显示--Top--,在结尾则显示--Bot--。若文件很小,一屏就能显示全部内容,则显示--ALL--

(8)光标所在行:L之后给出光标所在行数

(9)主模式:最后的括号表示当前使用的编辑模式,类似于在VScode中选择使用什么语言。Fundamental表示缺省模式,可用M-x fundamental-mode切换。C-h m命令可以查看主模式。主模式只能有一个。

(10)辅模式:与主模式对应,辅模式提供一些辅助功能,可以独立开启和关闭,如自动折行(Auto Fill)辅模式,使用M-x auto-fill-mode命令开启,启用之后Emacs会在打字超出一行边界(通常为70个英文字符,可用C-x f命令重新设定,例如C-u 20 C-x f)时自动换行,同时,如果在段落中间进行修改,可用M-q手动折行。开启辅模式之后,会在状态栏主模式后方显示。


写在最后:因为Emacs可扩展性非常强,有很多扩展包可以使用,同时也带来了一些组合命令的扩展,例如Standard ML语言编辑模式(sml-mode)下,C-c C-x 命令后输入sml可用于开启sml语言的命令行模式(交互模式)。所以Emacs只是一个工具,具体到各种语言的使用时,还有非常多需要学习的地方。

Emacs基础使用教程及常见命令整理的更多相关文章

  1. Git常见命令整理

    Git常见命令整理 + 注释 git init # 初始化本地git仓库(创建新仓库) git config --global user.name "xxx" # 配置用户名 gi ...

  2. [Linux基础]Linux基础知识入门及常见命令.

    前言:最近刚安装了Linux系统, 所以学了一些最基本的操作, 在这里把自己总结的笔记记录在这里. 1,V8:192.168.40.10V1:192.168.40.11Linux ip:192.168 ...

  3. Github常见命令整理

    常见命令: 将文件增加到index/stage暂存区: git add filename 将暂存的文件更新到本地库中:git commit -m "备注内容" 将本地库更新到远程库 ...

  4. mongo安装、备份与常见命令整理

    http://zlboy888.blog.163.com/blog/static/315357072012919241104/ 1 下载安装包  官方下载地址:http://www.mongodb.o ...

  5. Linux常见命令整理(一)

    整理一下,以备后用 cd /home 进入/home文件夹 cd .. 返回上一级文件夹  cd ../.. 返回上两级文件夹  cd 进入个人的主文件夹  cd - 返回上次所在的文件夹 pwd 显 ...

  6. ubuntu 常见命令整理

    SSH 查看ssh服务的进程是否已经开启ps -e | grep ssh 安装ssh服务组件sudo apt-get install openssh-server 服务启动和关闭 方法1:servic ...

  7. linux常见命令整理

    Linux管理文件和目录的命令 命令 功能 命令 功能 pwd 显示当前目录 ls 查看目录下的内容 cd 改变所在目录 cat 显示文件的内容 grep 在文件中查找某字符 cp 复制文件 touc ...

  8. Linux 究级基础入门命令整理

    Linux 究级基础入门命令整理 条条框框,三三两两,怎讷个这么多,哈哈!no zuo no die. 纯粹个人菜鸟笔记,望大神笑纳! 后续,未完!! 查看系统信息 uname -a - 查看内核/操 ...

  9. 嵌入式Linux开发教程:Linux常见命令(上篇)

    摘要:这是对周立功编著的<嵌入式Linux开发教程>的第7期连载.本期刊载内容有关LinuxLinux常见命令中的导航命令.目录命令和文件命令.下一期将连载网络操作命令.安装卸载文件系统等 ...

随机推荐

  1. hdu5197 DZY Loves Orzing(FFT+分治)

    hdu5197 DZY Loves Orzing(FFT+分治) hdu 题目描述:一个n*n的矩阵里填入1~n^2的数,要求每一排从前往后能看到a[i]个数(类似于身高阻挡视线那种),求方案数. 思 ...

  2. CF1545X Codeforces Round #732

    A. AquaMoon and Strange Sort 叉人题 如果数字各不相同,只需要统计每个数参与构成的逆序对总数,如果是奇数一定最终朝左,偶数朝右.无意义的数字交换对方向是没有影响的 继续考虑 ...

  3. Oracle :value too large for column "SCHEMA"."TABLE"."COLUMN" (actual: 519, maximum: 500)的解决方案

    原因:我是使用 CREATE TABLE XXX AS subquery 进行创建的数据表,主要是将相关的数据聚合在一起,然后通过导出为SQL脚本文件,进行导入到新库中,导致部分INSERT INTO ...

  4. 哪种依赖注入方式你建议使用,构造器注入,还是 Setter方法注入?

    你两种依赖方式都可以使用,构造器注入和Setter方法注入.最好的解决方案是用构造器参数实现强制依赖,setter方法实现可选依赖.

  5. 如何用 Java 代码列出一个目录下所有的文件?

    如果只要求列出当前文件夹下的文件,代码如下所示: import java.io.File; class Test12 { public static void main(String[] args) ...

  6. 一个注解@Recover搞定丑陋的循环重试代码

    使用背景 在实际项目中其中一部分逻辑可能会因为调用了外部服务或者等待锁等情况下出现不可预料的异常,在这个时候我们可能需要对调用这部分逻辑进行重试,代码里面主要就是使用for循环写一大坨重试的逻辑,各种 ...

  7. jsp报错问题之“使用jstl的c标签choose报错Illegal text inside "c:choose" tag问题”

    一.报错 [bessky_it][ERROR][2022-03-25 17:19:07] | PLATFORM | ):[c]鍜孾/com.bessky.pss.portal/purchase/sam ...

  8. 断言工具类之"判断条件不为空"

    1 Assert.notNull(query, AssertConstants.NOT_NULL_MSG);

  9. c++ 虚函数多态、纯虚函数、虚函数表指针、虚基类表指针详解

    静态多态.动态多态 静态多态:程序在编译阶段就可以确定调用哪个函数.这种情况叫做静态多态.比如重载,编译器根据传递给函数的参数和函数名决定具体要使用哪一个函数.动态多态:在运行期间才可以确定最终调用的 ...

  10. 小记-用canvas完成图像液化(向前变形)过程

    前几天由于团队需要,折腾了一下图像液化的处理过程. 现在来整理一下思路,做个记录. 用到公式如下,网上拿来的 话不多说,上代码 本来想尽量写出点逼格...后来发现怎么写也还是几个function搞定, ...