该笔记将记录: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 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
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