暗无天日

=============>DarkSun的个人博客

读: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-filesC-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 中, xpackage-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 IC-x v O 的子命令增加快捷键——如 C-x v I Lvc-root-log-incomingC-x v O Lvc-root-log-outgoing 。用 C-x v I C-hC-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。

emacs : newcomers-presets