「EMACS」- Editor MACroS | From 1970s

该笔记将记录:Emacs 文本编辑器(但又不仅是文本编辑器),以及相关内容、常见问题的解决办法。

认识

官网:http://www.gnu.org/software/emacs/
文档:https://www.gnu.org/software/emacs/documentation.html
仓库:https://www.gnu.org/software/emacs/download.html

Emacs,编辑器,功能多,但或许开箱不能即用。

补充说明,它有众多的分支,比如 GNU Emacs、XEmacs、SXEmacs、……。如果没有特殊说明,则相关文章中指的都是 GNU Emacs 版本。

GNU Emacs 是 Emacs 的一个版本,由原始(PDP-10)Emacs 的作者 Richard Stallman 编写。GNU Emacs 的用户功能包含其他编辑器所做的一切,并且由于其编辑命令是用 Lisp 编写的,所以它很容易扩展。

Emacs 有一个广泛的交互式帮助工具,但该工具假设您知道如何操作 Emacs 窗口和缓冲区:

  • CTRL-h 或 F1 进入 Help 工具;
*(CTRL-h t)Help Tutorial 启动一个交互式教程,以快速向初学者讲授 Emacs 的基础知识;

*(CTRL-h a)Help Apropos 帮助您查找名称与给定模式匹配的命令;

*(CTRL-h k)Help Key 描述给定的键序列;
  • Help Function(CTRL-h f)描述给定的 Lisp 函数。

GNU Emacs 的许多特殊包能够处理邮件阅读(RMail)和发送(Mail),大纲编辑(Outline),编译(编译),在 Emacs 窗口中运行子 Shell(Shell),运行 Lisp 的 read-eval-print 循环(Lisp-Interaction-Mode),自动化心理治疗(Doctor)等等。

与「Emacs LISP」有关

《GNU Emacs Lisp 编程入门》
Emacs Lisp 编程语言介绍
Emacs Lisp 官方手册

组成

Emacs Channel https://www.emacswiki.org/emacs/EmacsChannel

命令程序 and 配置文件

ctags,生成标记文件,文件中记录的是:源码之间的交叉引用关系。就是 IDE 里经常使用的那个:按住 Ctrl,然后点击函数名的功能中使用的标记文件。
etags,生成标记文件,文件中记录的是:源码之间的交叉引用关系。就是 IDE 里经常使用的那个:按住 Ctrl,然后点击函数名的功能中使用的标记文件。
ebrowse,允许从 emacs 中浏览 C++ 类层次结构。
emacs,Emacs 编辑器
emacsclient,将 emacs 会话附加到已经运行的 emacsserver 实例上。
grep-changelog,打印符合各种条件的 ChangeLog 中的条目。

构建

该笔记将记录:在各平台中,如何安装 GNU Emacs 编辑器,以及部分常见问题处理方法。安装| Debian | Ubuntu | CentOS | 源码编译

Debian-based | Debian,Ubuntu,Kali Linux,…

apt-get install -y emacs emacs-bin-common emacs-common emacs-el emacs-gtk

# 无图形化界面版本
apt-get install emacs24-nox

使用 AppImage 镜像(推荐)

1、到 Releases · probonopd/Emacs.AppImage 下载 AppImage 文件;
2、授予执行权限:chmod u+x Emacs-xxxxx.AppImage
3、运行 AppImage 文件:./Emacs-xxxxx.AppImage

通过 Flatpak 安装

https://flathub.org/apps/org.gnu.emacs
flatpak install flathub org.gnu.emacs
flatpak run org.gnu.emacs

编译安装

BLFS/Emacs-25.1-rc2
BLFS/Emacs-27.1

源码编译的方法不再展开(因为涉及很多细节,内容有冗长),参考「编译安装」部分。

如果编译 Emacs 只是为了体验新版本,建议使用 AppImage 程序,参考「安装最新版本」笔记。

第一步、源码下载

第二步、编译并安装

# Without GUI
./configure \
	--prefix=/usr \
	--localstatedir=/var \
	--without-x

# With GUI
apt-get install libgtk2.0-dev libxpm-dev libgif-dev

./configure \
	--prefix=/usr \
	--localstatedir=/var \
	--with-x-toolkit=gtk2

# 参考 BLFS/Emacs-25.1-rc2 页面,获取详细构建说明
# http://www.linuxfromscratch.org/blfs/view/7.10/postlfs/emacs.html

# 参考 BLFS/Emacs-27.1 页面,获取详细编译说明
# http://www.linuxfromscratch.org/blfs/view/svn/postlfs/emacs.html

第三步、运行 Emacs 程序

/usr/bin/emacs

# 终端模式运行
/usr/bin/emacs -nw

编译错误:[bootstrap-emacs] Segmentation fault
compiling – How to compile GNU Emacs 25.1 on 16.10 – Ask Ubuntu

问题描述:在执行 make 命令时,出现的错误。

解决方案:在配置时,不使用 PIE:

CFLAGS=-no-pie ./configure

安装最新版本

EmacsWiki: Emacs For Linux
EmacsWiki: App Image

我们需要安装 Emacs 最新版,我们想体验 Emacs 27 的 Tab Bars 功能(事实证明,对于我们来说这个功能相当棒)

这里有两种方法可以获取最新版本:
1)使用 AppImage 镜像;
2)使用源码编译安装最新版本;

应用

How can I make Emacs start-up faster?

EAF Emacs Application Framework

manateelazycat/emacs-application-framework: Emacs application framework
https://github.com/manateelazycat/emacs-application-framework

创建加密文件 Encrypting Files

EmacsWiki/Easy PG

EasyPG 是 Emacs 中的 GPG 接口。分为两个方面:允许使用 Emacs(EasyPG Assistant)的 GnuPG 的快捷工具,以及 GnuPG(EasyPG Library)的全功能接口库。

在目前的 Emacs 版本(25.0)中,已经内置了 EasyPG。

并且 eap-file-enable 属性已经默认启动,该属性启用后 Emacs 会把以.gpg 结尾的文件默认视为需要解密的文件,所以使用 C-f C-x 创建以.gpg 结尾的文件就可以了。当执行保存的时候,Emacs 会提示你选择密钥类型,并设置密码。

编辑二进制文件 Editing Binary Files

Emcas Manual/43 Editing Binary Files

使用 hexl-mode 进入二进制模式。另外 nhexl-mode 使用不同技术实现 hexl-mode 功能。

但是该模式对于二进制文件,但是只能编辑,不能编写。

编写二进制文件

目前 03/22/2020 还没有找到编写二进制文件的插件。为了能够编写二进制文件,我们可以先创建内容只有 NUL 的文件。但是依旧很难用,每输入一次就要按一次快捷键。我们决定还是用 hexedit 进行编辑。

改进

配置使用 Fcitx 输入法、Fcitx 输入法无效、Emacs Fcitx zh_CN

Fcitx – ArchWiki/#Emacs
Locale – ArchWiki

在 Emacs 中,无法使用 Fcitx 中文输入法。根据 Fcitx – ArchWiki/#Emacs 描述,这是 Emacs 早期 BUG 导致的。

我们的 Emacs 运行的 XTerm 中,使用的是 emacs -nw 的无窗口模式运行,因为这个样子可以绕过无法输入中文的问题。但是现在(08/22/2018)根本不需要了。因为,可以指定 LC_CTYPE=zh_CN.UTF-8 emacs 来运行 Emacs,解决窗口模式下无法使用中文输入法的问题。

如果要解决这个问题,有如下几种方法:

通过终端模式运行(即不使用图形界面,而使用终端界面),这依托于输入法在终端中能正常工作:

# 在 GNOME Terminal 中
/usr/bin/emacs -nw 

通过 LC_CTYPE=zh_CN.UTF-8 解决,需要在启动 Emacs 时,将 LC_CTYPE 设置为 zh_CN.UTF-8 语言:

# 在 Shell 中
LC_CTYPE=zh_CN.UTF-8 /usr/bin/emacs

# 在 emacs.desktop 中
...
Exec=env LC_CTYPE=zh_CN.UTF-8 /usr/bin/emacs
...

Warning: locale not supported by C library, locale unchanged
How to install/change locale on Debian?
`Gtk-WARNING **: Locale not supported by C library. ` when starting apps from the commandline

当使用 env LC_ALL=zh_CN.UTF-8 方式启动 Emacs 时,虽然能够切换输入法,但是依旧无法输入中文。并控制台输出类似如下错误:

Warning: locale not supported by C library, locale unchanged

问题原因:我们没有安装 zh_CN.UTF-8(中文语言)环境。使用命令 locale -a 查看当前语言环境。

安装语言包:

apt-get install locales-all
apt-get install language-pack-en-base language-pack-en

注意事项

  • 解决方法只使用于我们的环境。发行版不同,配置方法可能不同。
  • 由于我们未研究过语言环境问题,因此部分内容可能有失准确。

参考

了解 Emacs 的历史
查看 Emacs 的发行日志Emacs 的发行历史

GNU Emacs 的主要文档在 GNU Emacs 手册中,可以使用 Info 从 Emacs 或作为独立程序阅读。请查看完整和最新的文档。此手册页仅在有人志愿者更新时更新。

相关的文档及手册

Documentation & Support: https://www.gnu.org/software/emacs/documentation.html
Further information: https://www.gnu.org/software/emacs/further-information.html

GNU Emacs FAQ: https://www.gnu.org/software/emacs/manual/efaq.html
EmacsWiki: https://www.emacswiki.org/

与「Emacs」有关

《学习 GNU Emacs》 O’REILLY

Emacs 手册
https://www.gnu.org/software/emacs/manual/html_mono/emacs.html
https://www.gnu.org/software/emacs/manual/emacs.html

常见术语整理 GNU Emacs Glossary

该笔记将整理在 GNU Emacs 中某些常用术语,完整的术语列表参考 Glossary 页面 | https://www.gnu.org/software/emacs/manual/html_node/emacs/Glossary.html

Point: The place in the text where editing commands operate.
Echo Area: Short messages appear at the bottom of the screen.
Mode Line: Interpreting the mode line.
Menu Bar: How to use the menu bar.

minibuffer