近观阿明·班达利与普罗忒西劳斯(以下简称Prot)之Emacs教练会录。二人论及多端:窗之管理、索之寻觅、日程之调适。看似风马牛,然其根皆系于一事:Emacs之内置功能,自有深广之定制之域,惟其接口隐于文牍,鲜有人涉猎耳。
于会中撷三例,各附实用之码。
案例一:display-buffer-alist — 掌控窗口之布
Prot于会中言:=display-buffer-alist=者,乃使 Emacs 有所依之"至要之变量"。此变量制 Emacs 于何等之际,以何等之位,显新 buffer。
默认之行有弊。
Emacs 之默认窗口管理较粗放:按 C-h f 查函数文,help buffer 直夺汝当前之窗;运行 =M-x compile=,编译之出亦夺当前之窗。若汝同时开代码与 shell,查文归来,窗口之布即乱。
配置之例:使 help buffer 侧出,不夺当前之窗。
(add-to-list 'display-buffer-alist
'("\\*Help\\*"
(display-buffer-reuse-window display-buffer-pop-to-window)
(window-width . 0.4)
(side . right)
(slot . 0)
(window-parameters . ((no-delete-other-windows . t)))))
者,若buffer之名合于\*Help\*,则Emacs当优先复用既有之help窗(即=display-buffer-reuse-window=);若无既有之窗,则于右方启新窗,其宽为屏幕之四十(即=display-buffer-pop-to-window= + side . right + =window-width . 0.4=)。
之配置示例如下:令编译之输出显于底,不夺其焦。
(add-to-list 'display-buffer-alist
'("\\*compilation\\*"
(display-buffer-reuse-window display-buffer-at-bottom)
(window-height . 0.25)
(body-function . (lambda (window) (select-window window nil)))))
display-buffer-at-bottom置buffer于底,其高占屏幕之四分之一。=body-function=使光标跃至编译之窗,以便直览其出。
display-buffer-alist 其本质乃匹配规则之列:每条规则由 buffer 名之正则式与一组 action 函数成。对不同类型 buffer 可设不同显示策略,无需为每况别立 Elisp 函数。Emacs 内置 action 函数十余种(=display-buffer-same-window=、=display-buffer-pop-up-frame= 等),日常窗格布局之需基本能覆。
案例二:isearch — 被低估之内置搜索
会中 Prot 展若干 isearch 之定制技巧。isearch 乃 Emacs 内置之增量搜索(按 C-s 触发),较 consult-line 或 swiper 名气稍逊,然配妥则足用。
空格为通配符。
常情之下,isearch中输入空格即匹配空格。然若将空格配置为匹配"任意字符",则搜索hello world可匹配hello, something world=、=helloxyzworld等含中段之行:
(setq search-whitespace-regexp ".*?") (setq isearch-lax-whitespace t) (setq isearch-regexp-lax-whitespace nil)
此三行配置之意:
search-whitespace-regexp设空格匹配之正则,".*?"乃非贪任意字符之匹配isearch-lax-whitespace设为t,令普通搜索(非正则式)中空格为通配符isearch-regexp-lax-whitespace设为nil,正则式下不替空格,存正则之精控
显匹配计数。
isearch常不显"第几匹配/共几匹配"。启之isearch-lazy-count既成,minibuffer中显若"五分之十二"之数:
(setq isearch-lazy-count t) (setq lazy-count-prefix-format "(%s/%s) ") (setq lazy-count-suffix-format nil)
何时而用isearch,何时而用consult-line?
Prot言:isearch于录键盘宏时殊为得用,盖其索之过程渐增可回,故也。consult-line(佐以vertico与orderless)之长,在于候选之列可视,且支多键之词以序匹配。简言之:
- 需逐个跃转,尤以录键盘宏,isearch为宜
- 需一眼尽见匹配行,以多键之词过滤,consult-line为便
- 不欲装额外之包,则配置后之isearch已足
案例三:Diary vs Org Agenda — 轻量与重量之间
会中两人论日程之管理,一曰 Emacs 内置之 Diary,一曰 Org Agenda。
Diary 何物耶? Diary 乃 Emacs 所自具之日程管理器,不假外物。其数据惟一纯文本之文件 =~/diary=,格式简明。
May 23, 2026 团队周会 Monday 每周一的固定检查 %%(diary-float t 1 3) 每月第三个周二的性能报告
Diary 文件可佐 Emacs 之历(=M-x calendar=),于历上标日程。亦能直用 M-x diary 观今日之日程。
Org Agenda 之定位。《日程表》乃《组织模式》之属,其用远胜《日记》:有任务流转之态、有优先之序、有时刻之记、有周期之务、有多文聚合之观。然其弊在必以《组织》之文理任务,其文结构有求(至少须有TODO之钥与时刻之记)。
二者各适其境。
| 《日记》 | 《日程表》 | |
|---|---|---|
| 启动之费 | 无需配置,开即书 | 须《组织》之文理 |
| 数据之式 | 纯文,一行一务 | 《组织》之题 + 属性 + 时刻 |
| 功能之域 | 日程标记并历显 | 待办管理暨日程追时并报表 |
| 宜人 | 只需简略日程之警 | 需 GTD 或项目管理之工作流 |
Prot於會議中所持之見,曰:Diary與Org Agenda可並用也。以Diary記簡易時點之事(如節假日、固定會議),以Org Agenda管理需跟蹤進度之任務。二者皆可於Emacs日曆中顯示。
简述之
是会复论他事:阿明示其自为个人之站所制之定制Org HTML导出后端(承自内置之=ox-html=),有已立静态站之同窗可参其思。
返乎其本:Emacs 之可延展,非惟在"汝可撰 Elisp"也。其内置之能,自显配置之途,自窗口之理(=display-buffer-alist=)至搜索之术(isearch 变量)及日程之式(Diary 格式),不假外物亦能深定。此等接口,素载于文牍,今之教练会,不过揭而示之耳。























