前言:最近使用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. SpringCloudAlibaba 微服务讲解(四)Sentinel--服务容错(一)

    4.1 高并发带来的问题 在微服务中,我们将业务拆分成一个个的服务,服务与服务之间可以相互调用,但是由于网络原因或者自身的原因,服务并不能保证100%可用,如果单个服务出现问题,调用这个服务就会出现网 ...

  2. C++ 文件加解密

    通过文件二进制数据 与密钥进行异或处理,可加密文件 #ifndef __ENCRYPT__HEAD__ #define __ENCRYPT__HEAD__ #include <fstream&g ...

  3. Spring cloud config 客户端连接RabbitMQ 报 socket closed

    java.net.SocketException: socket closed at java.net.SocketInputStream.socketRead0(Native Method)     ...

  4. volatile 变量和 atomic 变量有什么不同?

    Volatile 变量可以确保先行关系,即写操作会发生在后续的读操作之前, 但它并不 能保证原子性.例如用 volatile 修饰 count 变量那么 count++ 操作就不是原子 性的. 而 A ...

  5. Ribbon和Feign的区别?

    1.Ribbon都是调用其他服务的,但方式不同.2.启动类注解不同,Ribbon是@RibbonClient feign的是@EnableFeignClients3.服务指定的位置不同,Ribbon是 ...

  6. BLOB 和 TEXT 有什么区别?

    BLOB 是一个二进制对象,可以容纳可变数量的数据.TEXT 是一个不区分大小写 的 BLOB. BLOB 和 TEXT 类型之间的唯一区别在于对 BLOB 值进行排序和比较时区分大小 写,对 TEX ...

  7. 2020/12/28为止好用的PC下载工具

    IDM:http://www.internetdownloadmanager.com/ NDM(免费):http://www.neatdownloadmanager.com/index.php/en/ ...

  8. java-設計模式概述

    什麽是設計模式?? 软件设计中常见问题的典型解决方案. 能根据需求进行调整的预制蓝图, 可用于解决代码中反复出现的设计问题. 模式并不是一段特定的代码, 而是解决特定问题的一般性概念. 你可以根据模式 ...

  9. shell脚本编程(一) 变量、条件判断、循环

    目录   1. shell脚本编程   2. 运行 Shell 脚本有两种方法   3. 变量   4. 本地变量   5. 环境变量   6. 参数变量   7. 多行注释   8. if条件判断 ...

  10. 串联型PID,并联型PID与标准型PID简要说明

    PID广泛应用于工业生产各个环节,然而对于不同PID结构会有一些差异,导致在调参时若按照常规的经验调试,结果将会有非常大的不同. 串联型PID(Serial PID) 串联型PID的三个环节由比例,积 ...