前言:最近使用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. json知识点总结(一)--基础介绍

    前言 JSON是一种轻量化的数据编码方式它不依赖于编程语言是独立的文本格式.和xml相比JSON具有格式简洁,转译速度快的特点,因此现在被广泛使用.JSON的本质是字符串,采用了特定的分隔方式对字符串 ...

  2. sum 函数语法与应用

    一.sum 函数语法: SELECT SUM(expression )   FROM tables    WHERE predicates; expression 常量.列或函数,或者是算术.按位与字 ...

  3. 洛谷 P1020 [NOIP1999 普及组] 导弹拦截

    Coidng #include <iostream> #include <algorithm> #include <cstring> #include <ve ...

  4. 【论文阅读】CVPR2021: MP3: A Unified Model to Map, Perceive, Predict and Plan

    Sensor/组织: Uber Status: Reading Summary: 非常棒!端到端输出map中间态 一种建图 感知 预测 规划的通用框架 Type: CVPR Year: 2021 引用 ...

  5. 还在担心CC攻击? 让我们来了解它, 并尽可能将其拒之服务之外.

    还在担心CC攻击? 让我们来了解它, 并尽可能将其拒之服务之外. CC攻击是什么? 基本原理 CC原名为ChallengeCollapsar, 这种攻击通常是攻击者通过大量的代理机或者肉鸡给目标服务器 ...

  6. Azure DevOps (七) 通过SSH部署上传到服务器的应用

    上一篇中,我们实现了通过FTP把流水线编译出来的制品上传到我们的公网服务器上,这一篇我们来研究一下通过azure的ssh连接到服务器 把应用在服务器上运行起来. 首先,我们书接上文,在release流 ...

  7. Git常见错误整理

    参考文章 git 排错 fatal: 'git status --porcelain' failed in submodule abi/cpp 1 fatal: 'git status --porce ...

  8. jQuery--属性和CSS

    1.属性和CSS介绍 属性(重点掌握) attr(name) 获取指定属性名的值 attr(key,val) 给一个指定属性名设置值 attr(prop) 给多个属性名设置值.参数:prop json ...

  9. java-中的代理

    静态代理: 例子: 接口: public interface InterfaceBase { void proxy(); } 接口实现类: public class InterfaceBaseReal ...

  10. windows编写sh脚本在linux上不能执行

    报错:/bin/sh^M:bad interpreter: 编码没有被识别, vi *.sh Esc 输入 :set fileformat 查看文件格式(显示  fileformat=dos) Esc ...