ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Linux下Emacs安装配置全攻略:从零到日常主力编辑器

Linux下Emacs安装配置全攻略:从零到日常主力编辑器 简介这是一份面向Linux系统开发者与运维人员的PDF文档系统梳理了Emacs编辑器的核心概念与在Red Hat环境下的完整安装流程。内容从Emacs的历史渊源讲起说明GNU Emacs与XEmacs两大分支并展示其作为集成开发环境所具备的邮件收发、Telnet登录、多语言编辑、GDB调试、日历查看等丰富功能。安装部分以Redhat Enterprise 5为例给出从GNU官网下载安装包、解压、以root身份运行configure脚本再到调用make程序完成编译安装的逐步说明同时提示配置出错时如何清理备份文件并重新配置。文档共包含1个PDF文件压缩包整体仅143KB轻量易读。文档来自科技视界2012年第12期内容简洁实用已有126人学习浏览。适合刚接触Linux、希望在命令行下搭建高效率编辑与开发环境的初学者参考也可作为系统开发与参考文献类资料的快速入门指引。1. Emacs是什么、为什么值得装先回答值不值得这件事如果你问一个用过三年Linux的人他最离不开的软件是什么答案多半不是某个IDE而是终端里那个看起来上世纪风格的编辑器。Emacs就是这类工具里最典型的一个——它不赶时髦不搞花哨界面却在几十年里积累了一套几乎无敌的文本操作体系和扩展生态。本文要讲的就是在Linux下把它装起来、配置好、真正用起来的全过程。很多人第一眼看到Emacs会觉得「这哪像个现代编辑器」但真正劝退新手的从来不是界面而是不知道装完之后该做什么、配置怎么写、出了问题去哪查。这篇不会带你背命令而是按「为什么选它 → 怎么装 → 怎么配 → 踩了什么坑 → 怎么变成日常主力」的顺序把一条能直接照做的路走通。适合想在Linux下找一个能长期用、可高度定制、不折腾就能顺手的文本编辑环境的开发者、运维和写文档的人。2. 在Linux上安装Emacs不同发行版的安装命令与启动验证2.1 先分清你要装的是终端版还是图形版Emacs在Linux下有两个形态搞混了后面很多问题都说不清。一个是纯终端版包名通常叫emacs-noxno X打开后直接占据整个终端窗口适合服务器、SSH远程会话、或者你习惯在tmux里工作的情况。另一个是带图形界面的版本包名通常是emacs或emacs-gtk支持鼠标、菜单栏、多窗口适合桌面环境里日常用。Debian系仓库里有个细节容易让人懵在Ubuntu里执行apt install emacs装的是带GTK图形界面的版本但在Debian里执行同样命令很多情况下装到的是emacs-nox。如果你执行emacs命令发现只在终端里打开、桌面上找不到图标先检查包名再决定要不要补装。# 查看当前系统里安装的是哪个Emacs dpkg -l | grep emacs输出里的ii emacs-nox说明你装的是终端版ii emacs-gtk或ii emacs才是图形版。终端版和图形版的核心能力没有区别只是前者缺少X窗口支持。平时主要在服务器上改配置、写脚本的emacs-nox完全够用日常在桌面环境写代码、看文档的还是建议上图形版光标移动和分屏体验会舒服很多。2.2 各发行版的安装命令Debian、Fedora、Arch一次说清安装本身没什么玄学但不同发行版的包管理器和源设置决定了你会拿到什么版本。Debian/Ubuntu系的命令最常用CentOS系的要额外开EPEL仓库Fedora和Arch则直接一条命令搞定。# Debian / Ubuntu sudo apt update sudo apt install emacs # Fedora sudo dnf install emacs # openSUSE sudo zypper install emacs # Arch / Manjaro sudo pacman -S emacs # CentOS / RHEL需要先启用EPEL仓库 sudo yum install epel-release sudo yum install emacs以Ubuntu为例拆解一下。apt update必须在安装前执行它把软件源索引刷新一遍否则你拿到的可能是过期的包列表轻则版本旧重则依赖解析失败。CentOS系里epel-release是一个第三方仓库包装它是因为CentOS默认源里不带EmacsEPEL里才有维护良好的版本跳过这一步直接yum install emacs大概率提示找不到软件包。装完后验证一下版本和启动方式这一步别省它能快速暴露“装是装了但没装全”的问题。# 查看版本 emacs --version # 终端版启动 emacs -nw # 图形版启动 emacs-nw是--no-window-system的简写强制Emacs以终端模式运行在服务器和SSH环境里几乎每天都会用到。图形版直接敲emacs就会弹出一个新窗口。如果可以正常打开并能看到欢迎界面说明安装成功。2.3 在远程服务器上安装为什么多数运维选 -nw 而不是图形版如果你要通过SSH管理服务器第一次装Emacs时可能会遇到一个问题运行emacs后终端卡住不动或者报“无法打开显示器”一类的错误。这不是Emacs坏了而是它默认尝试连接X图形环境而远程终端里没有这个环境。这种情况下的标准做法是使用emacs -nw让它在纯文本模式下运行。# 远程服务器上打开编辑器 ssh userserver emacs -nw /etc/nginx/nginx.conf在服务器上工作时这套组合非常常见tmux里开一个窗口跑Emacs旁边放另一个窗口用来执行命令。终端版Emacs不依赖图形资源即使网络很差、延迟很高也能流畅编辑。配置、日志、脚本这些纯文本文件在终端版和图形版里操作完全一致没有功能损失。那什么时候需要图形版呢当你需要在多个窗口间拖拽文件、用鼠标做选区、或者查看带图片的org-mode文档时图形版体验更好。还有一种选择是X11转发也就是在SSH连接时加上-X参数让远程图形界面显示在本地。但转发有延迟日常编辑不推荐偶尔应急可以用一下直接输入emacs就能打开远程的图形版窗口。2.4 安装完成后的第一个自检命令安装过程从头到尾跑通后我一般会执行一组很短的检查确认环境没有隐患。这不是多此一举因为后面配置写错了排查范围会大很多先把基础确认清楚后面出问题就知道不是装的问题。# 确认可执行文件路径 which emacs # 确认依赖库完整图形版需要检查 ldd /usr/bin/emacs | grep -i not # 确认系统里有可用的终端类型 echo $TERMwhich emacs如果输出/usr/bin/emacs说明命令在PATH里。ldd那条命令检查动态链接库是否有缺失如果输出里有not found说明图形版依赖的库没装全常见的是GTK或X11相关库用包管理器补上就行。echo $TERM输出xterm-256color或类似值就正常如果输出dumb说明终端类型不对后续Emacs的颜色方案和键位绑定可能会异常。这步排查很值得做我曾经在最小化安装的CentOS上装完Emacs后界面花屏最后定位就是TERM环境变量没设置导致的。3. 第一次启动Emacs后必做的配置一段能直接用的最小配置3.1 配置文件到底放哪.emacs与init.el的关系安装完成只是第一步真正让Emacs从「能用」变成「好用」的是配置。第一次启动Emacs时默认界面会显示一个欢迎页面你可以看到顶部菜单栏和底部的状态栏但这时候用起来还是很别扭——退格键没反应、光标移动不顺畅、没有行号。这些问题都可以通过一个配置文件解决。Emacs的配置文件名有两种约定家目录下的~/.emacs和~/.emacs.d/init.el。两个文件同时存在时加载优先级有讲究~/.emacs.d/init.el优先于~/.emacs。新版本Emacs官方推荐使用~/.emacs.d/init.el因为这整个目录是以后的配置主目录插件、主题、临时文件都会放在里面管理起来更清晰。我一般直接创建后者老项目里如果已经有一个~/.emacs了可以把它合并进init.el后再删掉别留两个否则配置文件会越改越乱出问题都不知道是哪个文件生效。# 创建配置目录和配置文件 mkdir -p ~/.emacs.d touch ~/.emacs.d/init.el3.2 一份给新手的init.el关掉冗杂界面、打开常用功能下面这份配置是我自己常用的最小集合每一行都有明确用途没有任何多余功能。可以直接复制到~/.emacs.d/init.el里然后重启Emacs看效果。;; 关闭启动时的欢迎页面 (setq inhibit-startup-message t) ;; 关闭工具栏图形版上方的图标按钮 (tool-bar-mode -1) ;; 关闭滚动条 (scroll-bar-mode -1) ;; 菜单栏保留新手期用鼠标操作更方便 (menu-bar-mode 1) ;; 显示行号Emacs 26.1之后内置支持 (global-display-line-numbers-mode 1) ;; 高亮当前光标所在行 (global-hl-line-mode 1) ;; 自动加载外部修改过的文件 (global-auto-revert-mode 1) ;; 显示括号匹配 (show-paren-mode 1) ;; 最近打开的文件列表 (recentf-mode 1) (setq recentf-max-saved-items 100) ;; 设置默认Tab宽度 (setq-default tab-width 4) ;; 备份文件集中存放避免家目录被#号文件淹没 (setq backup-directory-alist ((. . ~/.emacs.d/backups))) (setq auto-save-file-name-transforms ((.* ~/.emacs.d/autosave/ t)))这段配置解决的是刚装完Emacs最让人难受的几个点。inhibit-startup-message关闭欢迎页省得每次启动都要看一屏广告一样的说明文字。tool-bar-mode和scroll-bar-mode关掉的是图形版默认的工具栏和滚动条对界面做一个减法让编辑区更大、更专注。global-display-line-numbers-mode是Emacs自带的行号显示不需要额外装插件这个功能在很多编辑器里是标配Emacs早期版本没有所以每次配置新环境我都会第一时间打开它。global-auto-revert-mode是个很容易被忽视但很有用的选项当你在外部用git checkout切换分支、或别的程序修改了当前文件时Emacs会自动重新加载磁盘上的内容不会出现“文件已变更要不要重新读取”的弹窗打断思路。recentf-mode记录最近打开的文件配合下一节的M-x recentf-open-files能在不装任何插件的情况下快速回到昨天的工作现场。需要说明的是这段配置使用backup-directory-alist把Emacs的备份文件统一放到~/.emacs.d/backups/目录下。默认情况下Emacs保存文件时会在原目录生成一个filename~的备份文件用久了整个目录全是带波浪号的垃圾文件。auto-save-file-name-transforms则处理自动保存的临时文件这些文件在系统崩溃或断电时能起到后悔药的作用但平时堆在项目目录里很碍眼。两行配置就把这两类文件全部收纳到配置目录下干净且不影响找回机制。3.3 针对中文环境字体与编码设置Linux桌面环境下用Emacs中文显示乱码是高频问题。多数情况下不是Emacs没装好而是系统里缺少中文字体或者Emacs默认字体族设的是英文字体中文环境里找不到对应的字模就退化成方块。解决方法是先给系统安装一款中文字体再在配置里显式指定。# Debian / Ubuntu 安装文泉驿微米黑 sudo apt install fonts-wqy-microhei # Fedora 安装相同字体 sudo dnf install wqy-microhei-fonts然后在init.el里追加两行字体设置让Emacs在中文和英文之间自动切换字体;; 中文字体优先使用系统中的中文字体 (set-fontset-font t han (WenQuanYi Micro Hei . WenQuanYi Micro Hei)) ;; 默认字体用等宽字体大小12pt (set-face-attribute default nil :font DejaVu Sans Mono-12)set-fontset-font告诉Emacs处理中文han字符时使用文泉驿微米黑英文继续使用默认的等宽字体。这里将两部分分开设置的原因很实际中文字体里包含的英文字模通常不如专门的等宽字体整齐混排代码时会让缩进和列对齐看起来乱。指定了等宽英文加中文字体后代码里注释和代码混排也是对齐的。编码方面现代Linux发行版的locale基本都是UTF-8Emacs会跟随系统的locale设置通常不需要手动干预。但如果你的系统locale是C或POSIXEmacs默认可能用Latin-1解析文件中文会显示成乱码。判断方法很简单打开一个含中文的文件如果中文正常就是UTF-8生效乱码就看下面这个命令locale输出里LANG、LC_ALL如果显示en_US.UTF-8或zh_CN.UTF-8就正常如果是C或POSIX需要在/etc/locale.conf或~/.bashrc里正确导出LANGen_US.UTF-8之类的变量后重新登录一次。4. Emacs安装与使用避坑指南五个翻车现场与排查思路4.1 终端里启动Emacs提示“无法打开显示器”这是一个极具代表性的现象在服务器或本地终端里输入emacs屏幕输出类似于Error: Display :0 cant be opened然后程序退出。原因是Emacs默认优先尝试图形模式而当前环境里没有可用的X显示。这个问题最容易出现在三种场景SSH远程登录、最小化安装的Linux服务器、以及tmux里新建的会话没有继承图形环境变量。解决方式分两个思路。如果你确认不需要图形界面直接改用emacs -nw。如果你是远程连接且确实想用图形窗口SSH连接时额外加上-X参数做X11转发然后执行echo $DISPLAY能看到localhost:10.0或类似输出就说明转发生效了。还有一种容易忽略的情况本地桌面环境里当前用户没有访问X server的权限。比如通过su切换到root用户后执行Emacs会因为root不是桌面会话的属主而被拒。这种情况不建议折腾权限直接切回普通用户执行即可。4.2 保存文件后目录里多出一堆#号文件和~号文件打开一个文件编辑一会儿目录里出现了#test.txt#和test.txt~两种类似于碎片的文件看起来像是编辑器的垃圾残留。这两种文件性质不同#test.txt#是自动保存文件每输入5个字符或停顿几秒就会写入一次目的是在Emacs崩溃后能找回内容test.txt~是保存时生成的备份文件记录的是本次打开前的旧版本。两者都有价值但都默认写在原文件同目录数量多了确实烦人。上面的配置文件已经给出了处理方案backup-directory-alist管~备份文件auto-save-file-name-transforms管#临时文件把二者都迁移到~/.emacs.d/下集中管理。这样项目目录始终保持干净同时崩溃后依旧能在配置目录里找回未保存的内容。4.3 中文显示成一排方块或问号在写中文注释时Emacs显示不是方块就是问号英文和数字正常。这个现象的本质是字体缺字模系统里没有能渲染汉字的字体Emacs默认字体列表里当然也找不到。解决的第一步不是改Emacs而是检查系统字体。执行fc-list | grep -i wqy如果没有输出就按前面 3.3 节的方式安装文泉驿微米黑。装完字体后再执行fc-cache -fv刷新字体缓存Emacs里重新打开文件通常会立刻恢复正常。如果字体装好后仍然乱码再检查文件编码。用hexdump -C 文件名 | head看文件开头的字节如果能看到e4 b8 ad这样的序列说明文件是UTF-8编码配置没有生效如果显示的是高字节和低字节交错的模式可能是GBK编码。Emacs对GBK文件可以用M-x revert-buffer-with-coding-system然后输入gbk重新解码但长期方案还是建议把文件统一转成UTF-8因为Linux下UTF-8才是主流后续的grep、sed等工具处理起来最省事。4.4 软件源里的版本太老插件列表缺胳膊少腿Ubuntu 18.04 自带的Emacs版本是26.x这已经相当老如果是在某个长期维护的CentOS系统上版本可能停留在24.x。新版Emacs有许多改动比如原生行号、原生JSON解析、更好的libjansson支持老版本缺少这些能力装某些插件时还会因为依赖版本过低直接失败。有两个思路可以处理。一是用发行版源接受版本较老但系统集成度高、升级维护由发行版负责的现实。二是用snap包安装较新版本sudo snap install emacs --classicsnap版的Emacs 版本会及时跟随上游--classic参数让它能访问家目录和系统目录的完整读写权限。需要注意snap版配置目录和普通版一致都是~/.emacs.d如果之前装过APT版配置和插件能直接复用不会有迁移成本。用flatpak也行但flatpak沙箱可能导致对家目录之外文件的访问受限如果不是为了包隔离没必要为此增加复杂度。4.5 emacsclient连不上窗口弹不出来配置好(server-start)并执行emacs --daemon后运行emacsclient -c却发现长期没有反应或者提示emacsclient: connect: Connection refused。原因通常是emacs --daemon启动时也没能成功加载init.el里的(server-start)导致服务并未建立。排查方法是查看daemon启动信息emacs --daemon --debug-init在输出里能看到具体的错误行。最常见的情况是用户没有在家目录执行daemon命令导致服务进程的umask或权限和客户端不一致。另一种常见情况是用户运行了多个版本Emacs——比如既装了EPEL版的/usr/bin/emacs又装了snap版的/snap/bin/emacsdaemon和client命令来自不同版本socket文件路径不一致连接自然失败。你会注意到问题往往不是因为配置写错了而是环境里有两套Emacs在打架。解决很简单统一使用同一路径下的emacs命令。which emacs确认当前默认版本然后用绝对路径启动daemon和client。如果你在init.el里写了(server-start)每次图形版Emacs启动时都会在/tmp/emacs$(id -u)/下创建socket文件后续用emacsclient连接即可。5. 装完先跑通这三步把Emacs真正变成日常主力5.1 第一件事用daemon模式消灭冷启动等待配置完成、避坑也有了底之后真正让Emacs好用的第一步是把它变成常驻服务。传统方式是每次打开都执行emacs file这意味着每次都要重新加载init.el、重新初始化所有变量大概需要一两秒甚至更久。更稳妥的做法是让Emacs在后台常驻需要编辑时用emacsclient连接。# 启动后台服务 emacs --daemon # 客户端请求打开文件终端模式 emacsclient -t filename.txt # 客户端请求打开文件图形窗口 emacsclient -c filename.txt为了让这个过程顺手我一般会在~/.bashrc里加两个别名把emacsclient包装成接近emacs的用法alias ememacsclient -t alias ecemacsclient -c alias edemacs --daemon执行em filename.txt就能快速打开文件。-c在有图形界面的桌面上会弹出一个新的图形窗口读取已经加载过的配置和插件几乎瞬时完成。如果你习惯用多窗口emacsclient -t可以在tmux的多个窗口里同时建立连接每个窗口独立编辑不同文件但底层的Emacs进程只有一个。这样既享受了常驻进程的加载速度又不会因为多个进程共用配置而产生冲突。5.2 第二件事背熟五组快捷键先回到编辑主流程很多人装了Emacs立刻被一大堆按键吓退缩。其实日常使用最初需要的没有几组把下面五组练熟练就已经能覆盖大部分编辑动线了。按键功能说明C-x C-f打开文件输入路径后回车Tab可以补全也可以直接打开一个不存在的文件创建新文件C-x C-s保存文件随时按不会打断编辑状态C-x C-c退出Emacs有未保存的修改时会逐个询问是否保存C-g退出当前操作连按两次最保险取消一切键位积压状态C-x u撤销撤销上一次修改连续按连续撤销C-g这组键是最容易被低估的“救命键”。初学Emacs时一次误按C-u或M-x之后光标状态会变得奇怪、没能执行任何命令此时最正确的动作不是研究发生了什么而是按两下C-g让Emacs回到可接受命令的普通状态。这套机制很像Linux命令行的CtrlC只不过它不会杀掉进程只取消当前输入。记住一个原则遇到任何不确定的键位状态先C-g再说。打开、保存、退出、撤销这四件事对应日常工作流里八成的操作。等这些键形成肌肉记忆后再逐个学习C-a行首、C-e行尾、M-f前进一个单词、M-b后退一个单词移动效率会再上一个台阶。Linux下做文本编辑这套键位一旦熟悉了再回到其他编辑器反而会觉得处处受制。5.3 第三件事用 M-x 把命令搜索出来摆脱背命令的焦虑最后一组必会的是M-x。这是Emacs里的命令执行入口按下M-x后输入命令名的一部分按Tab就可以补全。不需要背什么参数所有操作都是一条条命名清晰的命令。M-x的价值在于它把「知道功能」和「记得快捷键」解耦了。比如我最初记不住最近文件列表的快捷键只需M-x recentf-open-files在补全菜单里选中回车即可想打开插件管理界面M-x package-list-packages一个管理窗口就出来了。久而久之随着使用频率提高记熟的快捷键自然会替代这部分操作但不需要一开始就全部背下来。我这里还有一个个人习惯第一次用某个M-x命令后会顺手C-x C-s保存配置把这个命令设为常用。比如M-x global-display-line-numbers-mode在执行后会立刻生效如果你确定要长期开启就把这行写进init.el。这些命令从「临时执行」变成「写进配置」的过程也正好是掌控Emacs的过程。把它当作一个可探索的工具箱而不是一个需要背完整手册的教科书所有扩展能力都可以在M-x里找到入口。最后说一点个人教训我最早接触Emacs时总想着一步到位找网上的美化和IDE配置粘贴进去结果启动报错也没法排查只能换回别的编辑器。后来老老实实从最小配置开始每次增加一个功能出问题时通过emacs --debug-init定位花了不到一周就把日常编辑完全切了过来。把这个路径也推荐给你先跑通安装和基础配置背熟开头那5个键再慢慢拓展每一位Linux用户的Emacs都长得不一样这也正是它作为文本编辑利器的魅力所在。希望这篇能帮到你。本文还有配套的精品资源点击获取
返回列表