☰
Emacs源码编译安装实战:从Linux基础到开发环境配置
2026/9/29 6:49:02 网站建设 项目流程

简介:这份PDF文档聚焦Linux平台上的经典文本编辑器Emacs,面向Linux系统开发者、运维人员及软件工程师。文章从Emacs的起源讲起,说明其全称Editor MACroS由Richard Stallman等人在1975年于MIT共同完成,并对比GNU Emacs与X Emacs两大分支。随后重点介绍Emacs作为“整合环境”的诸多能力:收发电子邮件、Telnet登录主机、查看日历、撰写文章大纲、编辑与调试多语言程序、结合GDB与EDebug,还支持C/C++、Perl、Python、Lisp等编程语言,甚至可玩游戏、管理目录和浏览网站。安装环节以Red Hat Enterprise Linux 5为例,逐步讲解从GNU官网下载安装包、解压文件、切换到root用户后执行configure脚本、检查系统配置输出、清除历史配置备份后重新configure,以及调用make程序完成安装的完整步骤。资源本身为1个PDF文档,包大小143KB,内容编排紧凑,便于按需查阅。目前已有126人学习下载,对于需要系统理解Emacs功能并快速完成Redhat环境部署的用户是一份实用参考。

1. 先聊清楚:Emacs 到底是个什么“编辑器”

在 Linux 平台上摸过几年键盘的人,基本都会听过一句话:Vim 是编辑器之神,Emacs 是神的编辑器。这话有玩笑成分,但也确实说出了 Emacs 的定位——它不是一个单纯的文本编辑器,而是一个以文本编辑为核心的整合环境。你可以用它收发邮件、看日历、写大纲、调程序、跑 shell,甚至玩内置的游戏。这篇笔记就是基于一份 2012 年的 Emacs 安装文献整理的实战回顾,重点解决三件事:Emacs 是什么、在 Redhat 系 Linux 上怎么从源码把它装起来、装完之后哪些坑是新手必踩的。适合刚接触 Linux、想在终端里找一个能长期用下去的编辑工具的人,也适合那些已经在用 Vim 但想对比一下另一套哲学的老手。

需要先说明的是,这份资源对应的是 Emacs 23.4 时代的安装流程,到今天我常用的已经是 29.x,但源码编译安装的核心步骤——configure、make、make install——二十年来基本没变过。所以下面的操作放到 CentOS 7/8、Rocky Linux 甚至 Ubuntu 上依然成立,只是在依赖包名字上需要做一点替换。下面直接进入正题。

2. 认识 Emacs:从 Editor MACroS 到“半个操作系统”

2.1 EMACS 这个名字的来历和两个分支

EMACS 是 Editor MACroS 的缩写,直译过来就是“编辑器宏”。它最初由 Richard Stallman 于 1975 年在 MIT 与 Guy Steele 共同完成。这里有个关键点:Emacs 的设计核心不是“编辑文本”这个动作本身,而是“可扩展”——你做的每个操作本质上是调用一个 Lisp 函数,而你完全可以用 Elisp(Emacs Lisp)写新的函数,然后绑定到任意按键上。

Emacs 有两个主要分支:GNU Emacs 和 XEmacs。GNU Emacs 是 Stallman 主导的、随 GNU 项目发布的版本,也是目前 Linux 发行版里默认的那个;XEmacs 是后来分叉出去的版本,曾经在图形界面和某些包管理上有过优势,但近十年基本处于停滞状态。我的建议是:新上手的人直接选 GNU Emacs,不要犹豫。

2.2 为什么说它不只是编辑器

文献里写得很清楚,Emacs 在编辑器功能之上还能干这些事:

  • 收发电子邮件(内置 Gnus 邮件客户端)
  • 通过 Telnet 登录主机(现在更常用的是 Tramp 模式走 SSH)
  • 查看日历
  • 撰写文章大纲(org-mode 的前身就是这种大纲编辑思路)
  • 编辑调试多种编程语言,结合 GDB、EDebug
  • 支持 C/C++、Perl、Python、Lisp 等语言的语法高亮和缩进
  • 玩游戏、目录管理、浏览网站
  • 为各种程序提供操作界面

这就是它被称为“半个操作系统”的原因。你在 Emacs 里待久了会发现,很多操作根本不需要切到外部 shell——开文件、跑编译、看输出、Git 提交,全在同一个界面里完成。

2.3 Emacs 和 Vim 的选择逻辑

很多新手会纠结到底学 Vim 还是 Emacs。我的看法是:这不是一个“哪个更好”的问题,而是一个“哪种交互方式更符合你的直觉”的问题。Vim 的模式切换(普通模式/插入模式/可视模式)初学曲线陡峭但肌肉记忆形成后极快;Emacs 则是“按住 Ctrl/Alt 的 chords 组合键”,没有模式切换,但对手指友好度要求高(所以才有 Evil 模式把 Vim 的按键搬进来)。

下面用一个表把两者的关键差异列出来,方便你判断自己要站哪边:

对比维度VimEmacs
交互模型模式切换(Normal/Insert/Visual)无模式,直接按键组合
扩展语言Vimscript(新版有 Lua 选项)Emacs Lisp(Elisp)
启动速度很快较慢,但可接受
内置功能偏向编辑器本身邮件、日历、shell、调试器都内置
配置文件~/.vimrc~/.emacs 或 ~/.emacs.d/init.el
学习曲线前两周很痛苦前两周也很痛苦,但逻辑更一致

提示:如果你是做运维、写配置、经常在服务器上改文件的,Vim 是性价比更高的选择;如果你是要把编辑器用成 IDE、喜欢在一个窗口里完成所有事,Emacs 会更合拍。

3. Redhat 系源码编译安装 Emacs:从下载到 make install 的完整流程

这一章是整个资源的核心。文献以 Redhat Enterprise 5 为例,我下面的操作以 RHEL/CentOS 7/8 系的命令为准,老版本的差异我会在每一步里标注。

3.1 下载安装文件:版本选择和校验

先去 GNU 官网(https://www.gnu.org/software/emacs/)下载新版安装文件。文献里用的是 2012 年初发布的 Emacs 23.4,下载的是 emacs-23.4.tar.bz2。今天你再去下载,会看到 29.x 的 tar.xz 包,xz 压缩比更高,解压命令也从 jxvf 变成了 Jxvf(注意大写 J)。

下载完成后我建议先做校验,别急着解压。GNU 官网每个文件旁边都有对应的 .sig 签名文件,用 GPG 验证一下:

# 下载源码包和签名文件 $ wget https://ftp.gnu.org/gnu/emacs/emacs-29.4.tar.xz $ wget https://ftp.gnu.org/gnu/emacs/emacs-29.4.tar.xz.sig # 导入 GNU 官方密钥并验证签名 $ gpg --keyserver keys.gnupg.net --recv-keys 066DAFCB81C29029 $ gpg --verify emacs-29.4.tar.xz.sig emacs-29.4.tar.xz

这段命令的逻辑是:先用 wget 把源码包和签名文件拉到本地,然后通过 GPG 导入 GNU 项目的发布密钥,最后用签名文件验证源码包没有被篡改过。如果你看到Good signature字样,说明文件完整。这个步骤在正规项目里是标配,很多新手会跳过去,但在服务器这种长期运行的环境里,养成校验习惯能避免很多安全隐患。

3.2 解压:注意压缩格式对应的参数

把源码包拷到 /opt 下并解压:

# 拷贝源码包到 /opt 目录 $ cp emacs-29.4.tar.xz /opt $ cd /opt # 解压 tar.xz 格式的源码包 $ tar -Jxvf emacs-29.4.tar.xz

再啰嗦一句:.tar.bz2用tar -jxvf,.tar.xz用tar -Jxvf,.tar.gz用tar -zxvf。这三个参数不记住没关系,搞混的时候tar会直接报错告诉你格式不对,但多一次报错就多浪费一分钟。解压成功后 /opt 下会生成一个 emacs-29.4 目录。

3.3 configure:安装前最关键的一次体检

安装前要切换到 root 用户。然后进入解压目录,调用 configure 脚本:

# 切换到 root $ su - # 输入 root 密码 # 进入解压目录 # cd /opt/emacs-29.4 # 执行配置脚本,指定安装前缀 # ./configure --prefix=/usr/local/emacs --with-x-toolkit=gtk3

这里我加了两个参数,文献里没有但实际安装时几乎必用:

  • --prefix=/usr/local/emacs:指定安装目录。默认是/usr/local,但把它单独放到/usr/local/emacs下,以后卸载时直接删这个目录就行,不污染系统其他路径。
  • --with-x-toolkit=gtk3:指定图形界面的工具包为 GTK3。如果你不需要图形界面,纯终端使用,可以加上--with-x=no,这样编译时间会短很多,依赖也少。

configure 执行结束后,屏幕会输出一大段系统配置相关的细节信息。文献里特别提醒:仔细阅读这些信息,看是否有错误提示,比如 CPU 错误、libraries 文件缺失等。这一步实际上是 Emacs 在“体检”——它会检测你的系统里有哪些库、缺哪些库、编译器是什么版本。如果一切正常,没有错误输出,环境配置就完成了。

3.4 make:编译的等待期

configure 通过之后就进入真正的编译阶段:

# 编译主程序,-j4 表示用 4 个 CPU 核心并行编译 # make -j4

-j4是并行编译参数,4 表示同时用 4 个进程编译。如果服务器是 8 核 16 线程,可以写-j8甚至-j16,能明显缩短编译时间。Emacs 源码编译在普通配置的机器上大约需要 5~15 分钟,取决于 CPU 和磁盘性能。make 过程中偶尔会有 warning,只要没有 fatal error 就可以继续等。

编译完成后,在 src 路径下会生成一个 Emacs 可执行程序。文献里给了个验证方法:

# 用 no-init 模式启动,跳过用户配置文件加载 # src/emacs -Q

-Q(或者--no-init-file)的意思是启动时不加载任何用户配置文件,以最干净的默认状态运行。如果这个命令能弹出一个 Emacs 窗口(有图形界面)或者进入终端编辑界面,说明编译成功。

3.5 make install 和 make clean:装进去,清干净

程序能启动之后,就可以正式安装到系统里了:

# 安装程序和附属文件到 --prefix 指定的目录 # make install # 清理编译产生的二进制和 object 文件,释放磁盘空间 # make clean

make install会把 Emacs 的可执行文件、文档、Lisp 库文件等复制到/usr/local/emacs对应目录。make clean则是把编译过程中生成的 .o 中间文件和二进制程序删掉,只保留源码,这样以后想重新编译时可以从干净状态开始。这一步做完,磁盘占用能省掉不少。

3.6 软链接:让 emacs 命令全局可用

安装完成后,emacs命令默认只在/usr/local/emacs/bin下。为了让系统全局直接敲emacs就能打开,我习惯加一个软链接:

# 创建软链接到 /usr/local/bin,这样所有用户都能直接使用 emacs 命令 # ln -s /usr/local/emacs/bin/emacs /usr/local/bin/emacs

提示:如果是在老 Redhat 5 上安装,依赖包名是gtk2-devel、libX11-devel、ncurses-devel,先yum install这些开发包再 configure,能避免 90% 的报错。

4. 装上之后先学会这几组操作:翻页、删除与配置文件

安装完成只是开始,真正让 Emacs 用起来顺手的是按键操作体系。文献第二部分给了几个关键操作,我在这里重新整理并补充一些细节,建议你装完后照着敲一遍。

4.1 按键表示法和两个最常用的翻页命令

Emacs 的按键约定:[Ctrl]键用大写 C 表示,[Meta]键(很多键盘上是[Alt]键)用大写 M 表示。比如C-v就是按住 Ctrl 再按 v,M-v就是按住 Alt 再按 v。

C-v 向前移动一屏(相当于 PageDown) M-v 向后移动一屏(相当于 PageUp) C-l 重绘屏幕,并将光标所在行置于屏幕的中央

文献里特别强调了一个容易犯的错:C-l是 CONTROL-L,也就是按住 Ctrl 再按字母 l,不是数字 1。这两个键在键盘上挨着,新手极易按错。我当年第一次试的时候就按了 C-1,结果屏幕纹丝不动,还以为是 Emacs 坏了。

C-l这个命令的妙处在于:它是“重定位光标到屏幕中间”,不是滚动几行。写代码时如果光标跑到屏幕底部,按一下 C-l,视野立刻清爽。

4.2 删除操作:比 Backspace 和 Delete 高效在哪

文献给的这组删除命令非常实用:

C-d 删除光标后的一个字符(相当于 Delete) M-<Backspace> 移除光标前的一个词 M-d 移除光标后的一个词 C-k 移除从光标到“行尾”间的字符 M-k 移除从光标到“句尾”间的字符

这里我补充两个细节。第一,M-<Backspace>在某些终端模拟器里会被吞掉,因为 Alt+Backspace 有时被终端当成特殊序列。遇到这种情况,可以用C-u M-<Backspace>或绑定到其他键位。第二,C-k删除行尾内容时,如果光标在行中间,它只删光标右侧的内容,不删整行;想删整行,先C-a移到行首再C-k,或者C-k C-k连按两次。

4.3 配置文件:从 ~/.emacs 开始定制

装完 Emacs 后第一件事不是学习所有快捷键,而是建一个配置文件。Emacs 默认读取~/.emacs文件,每次启动时自动加载。最简单的配置先加上这几行:

;; 关闭启动时的欢迎界面 (setq inhibit-startup-screen t) ;; 显示行号 (global-linum-mode t) ;; 用空格代替 Tab 缩进 (setq-default indent-tabs-mode nil) ;; 括号匹配高亮 (show-paren-mode t)

这段配置的逻辑是:前两行解决的是界面体验——不想每次启动都看到那个欢迎页面,就用inhibit-startup-screen关掉;写代码时行号是刚需,global-linum-mode全局限开启。后面两行是编码规范——indent-tabs-mode设为 nil 让缩进全部用空格,避免不同编辑器之间 Tab 宽度不一致导致的错位;show-paren-mode打开括号匹配,写 C/C++ 或 Lisp 时能少犯一半错误。

配置改动后不用重启 Emacs,直接执行M-x load-file并输入~/.emacs就能热加载,或者用M-x eval-buffer一次性执行整个文件。

5. 常见问题与避坑清单:我在安装和日常使用中踩过的五个坑

这一章是全文最值钱的部分。文献只提到了“configure 输出错误要仔细看”,但真正在机器上装过的人都知道,坑远不止这一个。下面按“现象 → 原因 → 解决”的结构写五个高频问题。

5.1 configure 报错:checking for X... no

现象:执行 configure 时屏幕输出checking for X... no,然后后续一堆跟 X Window 相关的检测全部失败,最终 configure 中断或生成了没有图形支持的配置。

原因:系统缺少 X Window 开发库,也就是libX11-devel这个包。Redhat 系的服务器默认是不装图形开发库的。

解决:在 CentOS/RHEL 上执行:

# 安装 X Window 开发库和 GTK 开发库 # yum install -y libX11-devel gtk2-devel libXt-devel libXpm-devel

装完重新跑 configure。如果你本来就不需要图形界面,更省事的方案是直接./configure --with-x=no,纯终端模式。

5.2 编译到一半报错:make[1]: *** [bytecode] Error 1

现象:make 过程在编译 Lisp 字节码时中断,报错信息指向某个 .el 文件,比如loadup.el,错误码 1。

原因:最常见的原因是磁盘空间不足。Emacs 编译生成的中间文件很多,加上 Lisp 字节码编译需要临时空间,/tmp或者源码目录所在分区满了。

解决:先查空间:

# 查看磁盘使用情况,确认 /tmp 和 /opt 分区是否够用 $ df -h

如果确实满了,清理 /tmp 下的临时文件,或者在编译前把源码目录挪到空间更大的分区。还有个偏方:make bootstrap强制从头构建所有 Lisp 字节码,有时候能绕过中间状态损坏的问题。

5.3 打开 Emacs 后中文显示成方块

现象:在终端里打开 Emacs,中文内容全部显示为方块或者问号,英文正常。

原因:终端环境的 locale 没有设置成 UTF-8,或者 Emacs 启动时检测到的编码不是 UTF-8。在 Redhat 5 时代这是个高频问题,因为老系统默认 locale 可能是 POSIX。

解决:在启动 Emacs 前设置环境变量:

# 强制使用 UTF-8 的 locale 启动 Emacs $ LANG=en_US.UTF-8 emacs

或者在 ~/.emacs 里加上:

;; 设置默认编码为 UTF-8 (set-default-coding-systems 'utf-8) (prefer-coding-system 'utf-8)

5.4 C-l 按了没反应

现象:按下C-l,屏幕没有任何变化,光标也不移动。

原因:99% 的情况是你按成了C-1(Ctrl+数字 1),因为两个键在物理上相邻。剩下的 1% 是终端软件把 C-l 拦截了(少见)。

解决:先确认按键是字母 l 而不是数字 1。如果确认无误还没反应,可以在终端里输入C-q C-l,强制把 C-l 发给 Emacs。C-q是 quoted-insert,它的作用是让下一个按键以原始字符形式传给编辑器,绕过终端的特殊处理。

5.5 make install 之后 emacs 命令找不到

现象:make install成功,但退出 root 后普通用户敲emacs,提示command not found。

原因:安装路径是/usr/local/emacs/bin,但系统的 PATH 环境变量里没有包含这个目录。Redhat 系的普通用户 PATH 通常只包含/usr/local/bin、/usr/bin、/bin等。

解决:上面我提到过创建软链接到/usr/local/bin,这是最省心的方式。软链接建好之后,还需要确认/usr/local/bin在 PATH 里:

# 确认 PATH 中包含 /usr/local/bin $ echo $PATH

如果不包含,编辑/etc/profile,在末尾加一行export PATH=$PATH:/usr/local/bin,然后source /etc/profile。这属于环境变量配置的基础操作,但很多人会漏掉软链接这一步,导致装完找不到命令。

6. 把 Emacs 从“编辑器”变成“IDE”:三分钟配置一个顺手的开发环境

最后这一章,分享一个我每次装了新机器都会做的配置流程——让 Emacs 从默认的“白纸”状态变成能写 Python、Go、C/C++ 的轻量 IDE。

第一步是配置包管理器。Emacs 24 以后自带 ELPA 包管理,你需要先把包源配置好:

;; 启用 MELPA 包源 (require 'package) (add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t) (package-initialize)

这段配置放在 ~/.emacs 里,重启 Emacs 后执行M-x package-refresh-contents刷新包列表,然后就可以用M-x package-install安装需要的包了。

第二步是装三个最常用的包:company(自动补全)、flycheck(语法检查)、use-package(包管理简化)。安装命令统一走M-x package-install RET 包名 RET。装完之后,公司的补全在写代码时自动弹出,flycheck 会在你写错语法时在行内标红。

第三步是打开一个特殊模式。Emacs 会根据文件扩展名自动切换主模式:.py文件进 Python 模式,.go文件进 Go 模式,.c文件进 C 模式。你不需要手动配置太多,内置的模式已经处理好了语法高亮和基础缩进。想进一步调缩进宽度,比如 Python 用 4 空格:

;; Python 模式统一用 4 空格缩进 (setq python-indent-offset 4)

到此,你的 Emacs 已经具备了一个现代编辑器该有的基本功能:语法高亮、自动补全、实时语法检查、括号匹配、行号、按词删除。

回想这些年我用 Emacs 的经历,最深的教训其实是:不要一上来就照搬别人的 .emacs 配置。网上那些几百行的配置文件,每行都对应一个使用习惯,照搬的结果就是打开 Emacs 后发现连光标移动都有 5 种方式,完全不知道哪个是默认的。从那以后我每次配新环境都强制走一遍这条流程——先装原版跑通,再按需加配置,一次只加一个包,用一周确认真的需要再加下一个。这套“最少配置”的原则让我在终端里干活的速度提升了不少,也希望这个思路能帮到你——先让 Emacs 跑起来,再谈让它跑得顺。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询