简介:Emacs作为一款开源文本编辑器,在Linux开发者群体中广受推崇,这份PDF系统介绍了Emacs的起源、主要功能特性及其在Redhat企业版中的安装配置过程,适合Linux系统运维、软件开发及对高效文本编辑工具有兴趣的读者参考。资源包含1个PDF文档,大小仅143KB,为期刊论文格式的简明资料,内容紧凑、层次分明,便于快速通读与保存。已有126人学习/下载,可作为Emacs入门与部署的实用参考。文档不仅讲解了Emacs涵盖邮件收发、远程登录、多语言编程支持等集成环境特性,还完整演示了从官网获取安装包、解压、执行configure脚本、处理配置备份到运行make完成安装的步骤流程,并提示了配置出错时的重新构建方法,能够帮助读者避开常见坑点,在Linux环境中顺利完成Emacs的安装与基础配置。
1. Emacs 是什么:Linux 下那台活了五十年的“文本编辑机器”
2024 年了,Visual Studio Code 和 JetBrains 全家桶统治着开发者的桌面,但你在生产服务器、嵌入式开发板和没有图形界面的远程终端里,依然能看到有人在用 Emacs。甚至不少老工程师在 SSH 连上去之后,第一件事就是敲emacs—— 不是因为他们不会用 vim,而是 Emacs 的编辑命令一旦形成肌肉记忆,效率确实比鼠标流高太多。这份资料讲的是 Emacs 在 Redhat 系 Linux 上的完整安装流程,从下载 tar 包、configure 配置到 make 编译、make install 落地,覆盖了源码安装的全部关键步骤,还附带了一组高频编辑命令。适合刚接触 Linux 的运维新手、需要在服务器上快速配置文本编辑环境的开发人员,以及想把手头 CentOS/RHEL 机器上的编辑器换掉的工程师。与其被各色 IDE 卡得动弹不得,不如先把这个五十年历史的编辑器装明白。
2. 编译安装全流程:从 tar 包到可执行文件的关键路径
2.1 下载与解压:版本选择和文件完整性校验
源码安装的第一步永远是获取干净的源码包。原文例子下载的是 2012 年初发布的 Emacs 23.4,对应文件名是emacs-23.4.tar.bz2。这份资料的适用场景虽然是 Redhat Enterprise 5,但整个流程放到 CentOS 6/7、Rocky Linux、AlmaLinux 上依然成立,只是依赖包的安装命令从yum换成了dnf。从 GNU 官网https://www.gnu.org/software/emacs/下载时,我一般会同时把.sig签名文件拉下来验证完整性,防止下载过程损坏或镜像源被污染,不过内网环境跳过这步也常见。
# 把安装包拷到 /opt 下统一管理,避免散落在家目录 cp emacs-23.4.tar.bz2 /opt # 解压 .bz2 格式的压缩包,-j 告诉 tar 使用 bzip2 解压 cd /opt tar -jxvf emacs-23.4.tar.bz2 # 解压完成后确认目录结构 ls -ld /opt/emacs-23.4tar -jxvf四个参数里,-j指定 bzip2 解压格式,-x是解压操作,-v显示过程文件列表方便观察,-f指定归档文件名。如果下载的是emacs-23.4.tar.gz,对应的解压参数就要换成-zxvf,这是新手最容易翻车的第一处。解压后/opt下会生成emacs-23.4目录,里面是完整的源码树,包括src(C 源码)、lisp(Emacs Lisp 标准库)、etc(文档和配置文件模板)等子目录。
2.2 configure 配置:让编译系统认识你的发行版
进入解压目录之后,第一件正经事是执行./configure。这一步的作用不是编译,而是探测当前系统的编译环境——检查有没有 C 编译器、X11 图形库是否齐全、ncurses 终端库在哪个路径、CPU 架构是什么,并根据探测结果生成Makefile。原文特别强调要仔细阅读 configure 输出的配置细节,看有没有CPU 错误、libraries 文件缺失之类的提示,这是血泪经验:configure 阶段漏掉的依赖,到 make 阶段会以另一种更难看的方式炸回来。
# 切换到 root 用户,编译安装需要写 /usr/local 等系统目录 su - # 进入源码目录 cd /opt/emacs-23.4 # 执行配置脚本,--prefix 指定安装路径,避免污染系统默认目录 ./configure --prefix=/usr/local/emacs-23.4 # 如果只需要纯终端版本,不依赖 X11 图形界面,加 --without-x # ./configure --prefix=/usr/local/emacs-23.4 --without-xconfigure 脚本支持大量参数,最常用的是--prefix,它决定了make install最终把可执行文件装到哪个目录。默认是/usr/local,这样emacs可执行文件会落在/usr/local/bin,一般已经在 PATH 环境变量里了。但我习惯指定一个带版本号的目录,比如/usr/local/emacs-23.4,好处是将来升级或卸载时直接删目录就行,不会在/usr/local里留下一堆不知道属于哪个版本的零散文件。代价是装完后需要手动把/usr/local/emacs-23.4/bin加进 PATH,后面会说怎么配。
--without-x是个重要选项。在纯服务器环境或最小化安装的系统上,经常缺 X11 开发库,configure 会提示checking for X... no。此时如果不加--without-x,Emacs 会退化成无图形支持的版本,某些功能会受限;加了之后则明确告诉编译系统我不需要图形界面,编译出来的版本更小、依赖更少,在 SSH 终端里使用完全够用。还有一个选项--with-x-toolkit=gtk或--with-x-toolkit=no控制图形工具栏的样式,如果你用的是 GNOME 桌面,GTK 版本观感最协调。
2.3 make 编译与安装:输出里的关键信息怎么读
configure 顺利通过后,Makefile生成完毕,接下来就是真正的编译环节。原文给出的命令序列是make,然后验证src/emacs -Q,最后make install和make clean。这一步的耗时取决于机器性能,Pentium 4 时代的老机器编 Emacs 23.4 可能要十几分钟,近年来的 CPU 基本两分钟搞定。
# 开始编译,-j 4 表示并行编译,4 核机器可以提速 # 但 Emacs 这种老牌项目有时并行编译会出古怪错误,保险起见先不加 -j make # 编译成功后在源码目录验证可执行文件 src/emacs -Q # 安装可执行文件和附属的 lisp 库、文档等到 --prefix 指定目录 make install # 清理编译产生的 object 文件,释放磁盘空间 make cleanmake执行过程中会滚动大量编译日志,不需要每行都看,但有几个节点值得关注。第一是编译是否报错,如果出现Error 1或Error 2且前面跟着undefined reference、cannot find -lXXX之类的信息,说明有依赖库缺失或版本不对。第二是最后几行是否输出DONE或类似的完成提示,有些版本的 Emacs 编译完成后会显式提示下一步该做什么。
src/emacs -Q是原文给的一个很妙的验证手段。-Q参数等价于--no-init-file --no-site-file --quick,意思是启动时跳过所有用户级和站点级的初始化配置文件,以最干净的状态启动。这样验证的是编译出的二进制本身是否健康,排除了用户配置文件的干扰。如果src/emacs -Q能正常弹出界面,说明编译成功,可以放心make install。
make clean的作用是删除编译过程中生成的*.o目标文件和最终可执行文件,把源码目录恢复到接近刚解压的状态。这样做的意义有二:一是节省磁盘空间,src/目录下那些 object 文件加起来有几百 MB;二是为将来重新编译做准备——如果你改了 configure 参数想重新构建,不清干净的话残留的 object 文件可能导致链接错误。但注意make clean只清编译产物,不会删除 configure 生成的Makefile。如果想彻底回到初始状态重新开始,需要用make distclean,这个命令会把Makefile和 config 缓存一并清除。原文里提到的“清除之前生成的编译配置备份文件再运行 configure”,指的就是make distclean这层操作,只是 2012 年时的写法在make distclean还没完全普及时,实际操作可能是手动删除 config 文件。在 Emacs 23.4 上,我一般这样做:配错参数后先make distclean,再重新./configure,避免残留的 config.cache 污染新的配置。
编译安装过程中的 PATH 问题也值得提前处理。如果用了自定义--prefix,装完后 shell 可能找不到emacs命令。常见的做法是:
# 编辑 /etc/profile,让所有用户生效 echo "export PATH=/usr/local/emacs-23.4/bin:$PATH" >> /etc/profile # 重新加载配置文件 source /etc/profile # 验证命令可用 which emacs emacs --version这里有个容易忽略的细节:echo >> /etc/profile之前先确认/etc/profile文件末尾是否有换行,否则追加的内容会粘在上一行末尾。还有就是source只对当前 shell 生效,重新打开的终端会自动读取/etc/profile,不需要每次手动 source。
2.4 表格式掌握:安装过程中的关键文件与目录
| 路径/文件 | 作用 | 备注 |
|---|---|---|
/opt/emacs-23.4.tar.bz2 | 源码压缩包 | bzip2 格式,解压用tar -jxvf |
/opt/emacs-23.4/ | 源码根目录 | configure、make 都在这里执行 |
/opt/emacs-23.4/src/emacs | 编译生成的原始可执行文件 | 未安装前可直接运行验证 |
/opt/emacs-23.4/Makefile | configure 生成的编译脚本 | 决定 make 的行为 |
/usr/local/emacs-23.4/ | 最终安装路径 | make install后生成 bin、lib、share 等 |
/etc/emacs/site-start.el | 站点级全局初始化文件 | 对系统内所有用户生效 |
站点级配置文件site-start.el在安装后就会生成,放置在$(prefix)/share/emacs/site-lisp/下,也可以通过 configure 参数调整。它比用户级.emacs先加载,适合做系统级的默认配置,但普通用户应该尽量把个性化配置放在自己的~/.emacs或~/.emacs.d/init.el里,避免相互干扰。
3. 安装后的验证与基础操作:把编辑命令变成肌肉记忆
3.1 启动自检:用 -Q 参数隔离问题
安装完成后,第一次启动 Emacs 时别急着干活,先跑一遍自检流程。原文在 make 阶段就用了src/emacs -Q,安装后我依然会用全路径启动一次干净模式,确认安装目录下的二进制和 lisp 库文件路径配置正确。
# 用安装后的真实路径启动,-Q 跳过所有初始化配置 /usr/local/emacs-23.4/bin/emacs -Q # 正常方式启动,加载用户配置 emacs-Q和--no-init-file的区别值得说清楚。--no-init-file只跳过用户的~/.emacs和~/.emacs.d/init.el,但依然会加载站点级配置site-start.el;-Q则连站点配置一起跳过,是最彻底的干净启动。当你怀疑某个 Emacs 异常行为是自己配置文件引起的时候,先用-Q启动一遍,如果问题消失,基本可以断定锅在配置文件上,这是个效率极高的排错手段。
3.2 高频编辑命令:C-v、M-v、C-l 的操作逻辑
Emacs 的按键表示法有一套统一规则:大写 C 代表 Ctrl 键,大写 M 代表 Meta 键(在键盘上通常是 Alt 键,但某些终端里需要额外配置)。原文给出的翻页命令中,C-v是向前移动一屏,M-v是向后移动一屏,这两个命令比 PageUp/PageDn 高效的地方在于手不用离开键盘主区。
# 在 Emacs 中按 C-h t 可以打开内置教程 # C-h 表示先按 Ctrl+h,然后按 t,进入交互式学习向导光标移动一组命令,是构建肌肉记忆的第一个台阶:
| 按键组合 | 功能 | 使用场景 |
|---|---|---|
C-f | 向前移动一个字符 | 替代方向键右键 |
C-b | 向后移动一个字符 | 替代方向键左键 |
C-n | 移动到下一行 | 替代方向键下键 |
C-p | 移动到上一行 | 替代方向键上键 |
C-a | 移动到行首 | 快速回到行开头 |
C-e | 移动到行尾 | 快速跳到行末 |
C-v | 向前移动一屏 | 大型文件翻页神器 |
M-v | 向后移动一屏 | 配合 C-v 双向浏览 |
C-l | 重绘屏幕且光标居中 | 滚动查看上下文 |
C-l这个命令很有意思,原文特意提醒是字母 l 不是数字 1。它的作用是清屏重绘,并把光标所在行移到屏幕正中央——当你在一个很长的文件里编辑时,C-l能瞬间把当前编辑位置拉回视野中心,不需要手动滚动找光标。这也是 Emacs 老手和新手直观拉开差距的命令。在无图形界面的终端里,C-l还承担着缓解终端残影的作用。
3.3 删除与撤销:理解“移除”和“杀死”的区别
原文给了一组删除类命令,这里的术语需要提前说明:Emacs 把删除操作细分为“移除”(删除)和“杀死”(剪切到 kill ring 环形剪贴板)。普通删除是去掉字符,而“杀死”会把文本存到内存中的 kill ring 里,方便后续粘贴复用。
| 按键组合 | 功能 | 对应的用户习惯 |
|---|---|---|
C-d | 删除光标后的一个字符 | Delete 键 |
M-<Backspace> | 移除光标前的一个词 | Ctrl+Backspace |
M-d | 移除光标后的一个词 | Ctrl+Delete |
C-k | 移除从光标到行尾的所有字符 | Shift+Delete 行尾部分 |
M-k | 移除从光标到句尾的所有字符 | 按句子粒度删除 |
这里最容易误解的是C-k。刚接触 Emacs 的人常以为C-k会删除整行,但实际上它只删除从光标位置到行尾的内容,光标之前的字符和换行符都保留。如果光标在行首,第一次C-k删掉整行内容,但空行还在,需要再按一次C-k才能连换行符一起删掉。这个设计初看别扭,实际用起来却是精准控制的好工具——想删后半行就删后半行,想删全行就按两次。M- 前缀的命令在终端里需要注意:如果按着 Alt 键没反应,检查终端软件的“使用 Alt 作为 Meta 键”设置,或者直接用 Esc 键代替,先按一下 Esc 再按对应字符,效果等同于 M- 前缀。
3.4 保存、退出与帮助系统:第一次使用的安全网
编辑器用得再熟练,不知道怎么保存退出就是灾难。Emacs 的保存快捷键是C-x C-s(先按 C-x 再按 C-s),退出是C-x C-c。这套组合键的设计逻辑是:C-x 是扩展命令前缀,之后跟的 C-s 表示 save——用一次就能发现 Emacs 帮助系统的规律。
C-h是帮助系统的入口。按C-h C-h会列出所有帮助相关的子命令,比如C-h t打开内置教程,C-h k查询某个按键绑定的命令,C-h f查询某个函数的功能说明。这套帮助系统的密度比 Vim 的:help更高,因为它本身就是 Emacs Lisp 交互环境的一部分,任何命令都能追溯到它的函数定义和源码。
# 在 Emacs 内输入以下按键,查看 Ctrl-f 绑定了什么命令 # C-h k C-f # 输出会显示: f is bound to forward-char # 这说明 C-f 调用的是 forward-char 函数,函数源码可以直接跳转查看我见过不少新手卡在退出这一步——按了几次C-x C-c没反应,直接关终端导致编辑内容丢失。这里有一个实际场景:如果你打开了多个文件,C-x C-c会逐一询问是否保存每个修改过的缓冲。如果不想被逐个问,可以先C-x s一次性保存所有需要保存的文件,再C-x C-c退出。
4. 避坑与常见问题:Redhat 系上安装 Emacs 的六次翻车记录
4.1 configure 提示 no window system found
现象:执行./configure时,输出信息最后出现checking for X... no,或直接提示The following required libraries were not found: X11。
原因:系统没有安装 X11 开发库。Redhat Enterprise 5 和 CentOS 最小化安装时默认不装图形开发包,而 Emacs 的图形界面版本编译时需要 X11 头文件和链接库。
解决:两个方案二选一。如果确认不需要 GUI 图形界面,加--without-x参数重新 configure,编译纯终端版,体积小、依赖少。如果确实需要在图形桌面里使用 Emacs,用包管理器补齐依赖:Redhat Enterprise 5 上用yum install libX11-devel libXpm-devel,CentOS 7 及更新版本用yum install libX11-devel libXpm-devel libjpeg-devel libgif-devel libtiff-devel。装完后重新./configure就能探测到 X11。
4.2 make 时报错 cannot find -lgif 或 -ljpeg
现象:configure 正常通过,但make编译到中段时报错,类似ld: cannot find -lgif,链接器找不到某个库文件。
原因:configure 阶段虽然探测到了部分 X11 组件,但缺少图像格式支持库。Emacs 的图形工具栏和图片显示功能依赖 libgif(GIF 格式)和 libjpeg(JPEG 格式),这些开发包在最小化安装的 Redhat 系系统上不是默认组件。
解决:安装对应的-devel包后重新编译。RHEL/CentOS 5/6 上执行yum install libgif-devel libjpeg-devel libtiff-devel。注意装完包后必须重新执行make distclean再./configure,因为 configure 已经把“没有 libgif”的结果缓存进了 config 文件,直接重跑 make 不会重新探测。此处分两步走:先make clean清理上次编译的 object 文件,再make distclean清除 Makefile 和 config 缓存,最后重新 configure。顺序不能反,否则 distclean 找不到完整的 Makefile 会报错。
4.3 make -j4 并行编译中途崩溃
现象:执行make -j4想加快编译速度,结果编译线程跑到一半报错,错误信息五花八门,比如gcc: internal compiler error或奇怪的segmentation fault。
原因:Emacs 23.4 这种老项目的 Makefile 依赖关系设计较早,对并行编译的支持并不完善。多个编译线程同时生成头文件或同时写同一个输出文件时会产生竞争条件,导致偶发性的编译失败。这类错误在单线程编译时不会出现,排查起来极具迷惑性。
解决:别挣扎,直接回到单线程编译。先make distclean彻底清理,再执行不带-j参数的make。多等两三分钟换来稳定的编译结果,这笔时间花得值。如果确实想并行加速,可以用make -j2这种保守参数碰碰运气,但不要在一台新环境上默认-j4。编译成功后再次make clean和make install。
4.4 终端里 Alt 键失效,M-x 变成特殊字符
现象:在 SSH 连接或某些终端模拟器(如 Xshell、SecureCRT)里按Alt+x,Emacs 没有调出命令输入框,反而插入了一个奇怪的字符,或者焦点跳到了终端菜单栏。
原因:终端模拟器默认把 Alt 键用作“发送 Escape 前缀”或“激活菜单栏”,没有把 Alt 键事件传给 Emacs。这是终端环境的使用习惯问题,不是 Emacs 安装出错了——图形界面下 Alt 键通常工作正常,问题只在终端里存在。
解决:两个办法。第一种是在终端软件设置里找到类似“Alt 作为 Meta 键”的选项并勾选。第二种是彻底绕开 Alt 键,用 Esc 键代替:按一下 Esc,然后快速按 x,效果等同于M-x。注意 Esc 键要求先按下再松开,后按的键必须跟在后面,不能同时按压。我个人的肌肉记忆是:终端里一律用 Esc 代替 Meta,不折腾终端配置,记起来也简单。
4.5 安装后 emacs 命令找不到
现象:make install顺利完成,没有报错,但关闭终端重新打开后输入emacs,shell 提示command not found。
原因:使用了自定义--prefix安装路径后,该路径没有加入 PATH 环境变量。最常见的是默认终端会话不会自动把/usr/local/emacs-23.4/bin加进 PATH,需要手动配置。
解决:确认实际安装路径,然后把它加入 PATH。编辑/etc/profile或~/.bashrc,加上export PATH=/usr/local/emacs-23.4/bin:$PATH,source 后验证which emacs。
4.6 配置了 .emacs 文件后启动报错
现象:按照网上的教程写了一个~/.emacs配置文件,再次启动 Emacs 时直接报错,或者启动后显示一堆 Warning,甚至直接闪退。
原因:配置文件里用了当前版本不支持的函数或语法。Emacs Lisp 在不同版本之间接口变化很大,网上大量教程是针对 Emacs 24/25/26 写的,里面的函数在 23.4 上可能压根不存在。
解决:先用emacs -Q跳过配置文件启动,确认二进制本身无问题。然后逐段注释配置文件,二分定位出错行。在 Emacs 23.4 上特别要注意package.el相关配置——这个内置包管理功能到 Emacs 24 才正式加入,23.4 只有早期实验版本甚至没有,网上教程里那些(require 'package)的写法大概率直接报错。另外,用emacs --debug-init启动可以看到完整的错误堆栈,比肉眼排查快得多。
5. 让 Emacs 更适合长期使用:我的 .emacs 最小配置模板
安装只是开始,真正让 Emacs 好用的是初始化配置。以下这份~/.emacs配置模板是我在 Redhat 系服务器上反复打磨过的,不依赖任何第三方包,用 Emacs 23.4 自带的能力就能跑起来,开箱即用。
;;; .emacs -- 服务器端 Emacs 23.4 最小配置 ;; 关闭启动画面,省去每次按 q 的步骤 (setq inhibit-startup-message t) ;; 显示行号,Emacs 23.4 用 linum-mode,24+ 才支持 display-line-numbers-mode (require 'linum) (global-linum-mode 1) ;; 显示当前行高亮,定位光标位置 (global-hl-line-mode 1) ;; 括号匹配高亮,写 Lisp 和 C 的时候太重要了 (show-paren-mode 1) ;; 光标移动到行尾时自动插入配对括号 (setq electric-pair-mode nil) ; 23.4 没有 electric-pair-mode,保持默认即可 ;; 默认缩进 4 空格,符合大多数 C/C++ 项目的习惯 (setq c-basic-offset 4) (setq default-tab-width 4) (setq indent-tabs-mode nil) ; 用空格替代 Tab,避免跨编辑器缩进错乱 ;; 显示时间,M-x display-time 或直接开启 (display-time-mode 1) (setq display-time-24hr-format t) ;; 自动加载最近打开的文件 (savehist-mode 1) ;; 设置备份文件目录,避免同目录下生成一堆 ~ 结尾的垃圾文件 (setq backup-directory-alist '(("." . "~/.emacs.d/backups"))) (setq auto-save-file-name-transforms '((".*" "~/.emacs.d/auto-save/" t)))这份配置里最核心的一行是setq c-basic-offset 4。在服务器上改 C/C++ 代码时,缩进风格不一致会直接引爆同事间的代码评审战。indent-tabs-mode nil强制用空格代替 Tab,能保证任何编辑器打开都是一个样,不会因为 Tab 宽度不同而错乱。backup-directory-alist也是个容易被忽略的点:默认情况下每次保存文件 Emacs 都会生成一个文件名~的备份文件丢在原目录,几个月下来目录会变得乌烟瘴气,重定向到~/.emacs.d/backups能让工作目录保持干净。注意这个目录要提前创建,否则 Emacs 会静默跳过备份功能——mkdir -p ~/.emacs.d/backups ~/.emacs.d/auto-save先跑一遍。
配置写好后,验证步骤必须有:先emacs -Q -nw(-nw表示纯终端模式)确认基础二进制正常,再正常执行emacs看配置是否生效。如果配置语法错误,emacs --debug-init会启动后直接弹出错误栈,能看到具体是哪一行的哪个函数有问题,这个调试参数比盲猜效率高一个量级。
从工程角度看,Emacs 的价值不只在编辑本身。它内置的 Lisp 解释器让它变成了一个可编程的工作台——p 服务器上临时改个文本、批量处理日志、写个小脚本管理配置文件,都在这一个环境里解决,不用来回切换工具。但这一切的前提是你把它正确装好、配置到顺手。我在每台新服务器上装 Emacs 都会强制走一遍make distclean → ./configure → make → src/emacs -Q的验证链,编译器版本换了、系统架构变了、依赖库缺了,在这一步都会显形。希望这篇笔记能帮你少踩几个坑,把命令行里的编辑体验真正立起来,也希望你能在 Emacs 的广阔世界里找到自己的编辑节奏。
本文还有配套的精品资源,点击获取