Emacs 28中如何正确设置isearch-wrap-pause为no或no-ding值
Emacs 28.1 isearch 相关变量配置说明
isearch-wrap-pause 正确配置方式
isearch-wrap-pause 是符号类型的自定义变量,合法取值共4个:
t:默认值,搜索绕回缓冲区首尾时暂停,同时发出提示音nil:绕回时直接跳转不暂停,保留提示音no:绕回时暂停,不发出提示音no-ding:绕回时直接跳转不暂停,也不发出提示音
之前尝试的三种写法里,只有第一种加单引号引用符号的写法语法正确:
- 第二种传字符串
"no"属于类型错误,该变量不接收字符串值 - 第三种直接写
no不加引号会触发void-variable错误,Emacs会把未加引号的no当作待求值的变量,而这个变量本身不存在。
如果写了(setq isearch-wrap-pause 'no)还是不生效,基本是配置执行时机不对:如果setq执行在isearch.el加载之前,部分配置框架或者Emacs自身加载逻辑会用defcustom的默认值覆盖提前设置的变量值。稳妥的写法是把配置放到isearch加载完成后执行:
(with-eval-after-load 'isearch (setq isearch-wrap-pause 'no-ding isearch-repeat-on-direction-change t))
关于增量搜索自动绕回的效果说明
注意isearch-wrap-pause的作用范围仅限重复触发搜索动作的场景:也就是在isearch模式下重复按C-s/C-r查找下一个/上一个匹配时的绕回行为。
输入搜索关键词的实时增量匹配过程中,本身就不会触发自动绕回逻辑——这是isearch的设计设定,不是配置错误。输入时如果匹配到缓冲区末尾没有更多结果,isearch会直接停在最后一个匹配项,不会自动跳转到缓冲区另一端继续匹配,这部分逻辑没有开放可配置的变量。如果一定要实现输入时自动绕回,只能自行修改isearch的匹配函数逻辑,官方不推荐这类改动,容易破坏原有交互一致性。
内容的提问来源于stack exchange,提问作者Mas
相关产品推荐
相关产品推荐

