读:Emacs newcomers-presets theme —— 30+ 项新手预设一览
Emacs 开发版(2026 年 2 月起)里塞了一个叫 newcomers-presets 的 theme。加载它之后,Emacs 一口气给你设好 30+ 项配置,不用自己一个个去找。
这个 theme 会在 Emacs 31 中正式发布。想现在试的,跑:
M-x load-theme RET newcomers-presets RET
启动界面上也有入口。想永久启用的话, M-x customize-themes 勾上再保存就行。
Sacha Chua 在 博客 里逐条做了记录,我按功能分类整理如下。
键盘快捷键
(setopt repeat-mode t)
启用 repeat-mode 后,部分命令可以用快捷键的最后一段来重复。比如用 C-x n n 进入 narrow 状态后,再按 n 就能继续 narrow,不用每次按完整的 C-x n n 。
外观
(pixel-scroll-mode 1)
滚动平滑了,不再是一行一行跳。
(add-hook 'prog-mode-hook 'display-line-numbers-mode) (add-hook 'text-mode-hook 'display-line-numbers-mode)
代码和文本 buffer 默认都显示行号。
(setopt column-number-mode t)
模式行显示列号。
(setopt font-use-system-font t)
Emacs 使用系统默认等宽字体,而非自身配置的字体。
(setopt frame-resize-pixelwise t) (setopt window-resize-pixelwise t)
窗口和 frame 可以按像素调整,不受字符网格的限制。
(setopt frame-inhibit-implied-resize t)
改了字体或调整界面元素时 frame 大小不变,不会出现改个字体窗口就跟着跳的情况。
(setopt mode-line-compact 'long)
模式行太宽时自动压缩,连续空格合并成单个。
会话持久化
(setopt savehist-mode t)
Minibuffer 历史跨会话保存。下次打开 Emacs, M-x 里用 M-p M-n 还能翻到上次敲过的命令。
(setopt save-place-mode t)
记录每个文件的上次光标位置。
(setopt recentf-mode t)
记录最近打开的文件, M-x recentf-open-files 或 C-x C-r 快速打开。
补全
这一组配置影响补全候选列表的行为( M-x TAB 或其他需要补全的场景)。
(setopt minibuffer-visible-completions t)
可以用上下箭头在 minibuffer 中直接选择补全候选, RET 确认选中项。
(setopt completions-detailed t)
补全列表展示更多细节(如 C-h o 的函数说明)。
(setopt completions-group t)
候选按命令或来源分组显示。
(setopt completion-auto-select 'second-tab)
第一次按 TAB 显示补全列表,第二次 TAB 跳转到补全 buffer。
(setopt completion-eager-update t)
补全 buffer 随输入实时更新筛选。
(setopt completion-styles '(basic emacs22 flex))
补全风格设为三种:
basic:按前缀匹配emacs22:光标前后分别作为前缀和后缀匹配flex:模糊匹配(a-b可以匹配apple-banana)
(setopt global-completion-preview-mode t)
在光标位置自动显示补全预览。TAB 接受建议, M-i 补全最长公共前缀。
(setopt tab-always-indent 'complete)
TAB 优先尝试缩进,如果当前行已经缩进过了就触发补全。部分编程语言有自己的变量控制这个行为(如 c-tab-always-indent ),可能需要额外调整。
帮助
(setopt which-key-mode t)
按完快捷键前缀(比如 C-c )后稍等片刻,Emacs 会弹出后续可用的按键列表。对新手熟悉快捷键很有帮助。
Tab bar
(setopt tab-bar-show 0)
始终显示 tab bar。Tab 可以保存窗口布局和 buffer 组合,点击 tab 切换配置,点 + 新建 tab。
(setopt tab-bar-history-mode t)
Tab 配置变更的历史可前后导航,类似浏览器前进/后退。
Dired
(setopt dired-auto-revert-buffer t)
每次重新进入目录时自动刷新 Dired buffer。
(setopt dired-mouse-drag-files t)
支持鼠标拖放文件。Ctrl+左键拖放复制文件,Shift+左键拖放移动,Meta+左键拖放创建链接。X11、Haiku、macOS、GNUstep 上还可以拖到 Emacs 外的应用程序。
(setopt shell-command-prompt-show-cwd t)
执行 shell 命令时显示当前目录。
包管理
(setopt package-autosuggest-mode t)
打开一个文件时,如果 Emacs 知道有可选包能提供额外支持,会在模式行显示 [Upgrade?] 提示。比如打开 Dockerfile 时提示安装 dockerfile-mode 。
(setopt package-menu-use-current-if-no-marks nil)
在 M-x list-packages 中, x ( package-menu-execute )不再默认操作当前行。需要先用 i 标记安装、 d 标记删除、 u 取消标记,再用 x 执行。防止误操作。
代码
(add-hook 'prog-mode-hook 'flyspell-mode)
在代码 buffer 中启用拼写检查。
(setopt compilation-scroll-output 'first-error)
M-x compile 时,编译输出窗口会自动滚动,但停在第一个错误处。
(setopt global-xref-mouse-mode t)
Ctrl+左键点击函数名,跳转到定义( xref-find-definitions-at-mouse )。
(setopt electric-pair-mode t)
自动插入匹配的括号、花括号、方括号。
(setopt indent-tabs-mode nil)
缩通用空格而非制表符。
(setopt editorconfig-mode t)
支持 .editorconfig 文件,跨项目统一缩进风格。
(setopt etags-regen-mode t)
保存文件时自动重新生成 TAGS 表。用 etags 做代码跳转的场景下比较有用。
版本控制
(setopt vc-auto-revert-mode t)
版本控制更新的文件自动从磁盘重新加载。
(setopt vc-dir-save-some-buffers-on-revert t)
目录有版本控制变更但你有未保存的修改时,Emacs 会询问是否先保存再回退。
(setopt vc-find-revision-no-save t)
vc-find-revision 查看历史版本时在临时 buffer 中显示,不替换当前文件。
(setopt vc-follow-symlinks t)
打开版本控制仓库中的符号链接时,自动跳转到真实文件。
(setopt vc-use-incoming-outgoing-prefixes t)
C-x v I 和 C-x v O 的子命令增加快捷键——如 C-x v I L 是 vc-root-log-incoming , C-x v O L 是 vc-root-log-outgoing 。用 C-x v I C-h 和 C-x v O C-h 查看全部子命令。
(setopt vc-deduce-backend-nonvc-modes t)
在所有 buffer 中自动检测版本控制系统。标准 Emacs 只在 Dired、shell、eshell、compilation-mode 中检测。
总结
这 30+ 项配置的完整代码可以到 etc/themes/newcomers-presets-theme.el 查看。如果你用的是 Emacs 30 或更早版本,可以把需要的配置项挑出来加到自己的配置里。
想一次性体验全部效果的话,上面列出的配置按顺序放到 init.el 里就能用。注意 newcomers-presets 是一个自定义 theme,和普通 theme 互不影响,你可以同时启用一个颜色 theme 和这个预设 theme。