M-x 如何不键入空格也能模糊搜索到相应的内容?

总结

2 楼给出了fuzzy 的答案. 但是似乎在 Emacs 里面倾向于不用模糊选项, 空格会额外增加乱序搜索的好处.


引申问题

进一步的问题是 : emacs 是否支持不打空格的 fuzzy 的同时, 还支持乱序, 甚至还能继续打空格?

社区成员提供的一些相关线索, 目前有两个插件可能提供了相应的功能, 欢迎试用过的同学可以留言发表下测评:


原始问题

我发现在 doom 下 M-x 搜索的时候 org-insert-link 需要键入 or 空格 inse . 当我试图 orinse 的时候是搜索不到 org-insert-link的.

如何支持模糊查找的情况下, 不需要空格? 直接键入连在一起的字母就可以了. 这个空格是多余的

提出这个问题的灵感是 VSCode Ctrl+Shift+P 给了我这种体验.

因为 ivy 默认采用的不是 fuzzy 模糊搜索,你可以自己设置为 fuzzy 模糊搜索:

(setq ivy-re-builders-alist '((t . ivy--regex-fuzzy)))

还可以指定不同的地方采用不同的补全风格

(setq ivy-re-builders-alist
      '((counsel-rg . ivy--regex-plus) ;; 这个 ivy--regex-plus 就是默认加空格分割的
        (t . ivy--regex-fuzzy)))

https://oremacs.com/swiper/#completion-styles

2 个赞

社区真是卧虎藏龙, 发贴没几分钟就有人回答了.

不过我觉得 fuzzy 体验不好,匹配到的结果太多了

这样体验并不好,因为 emacs 里的命令数比 vscode 大一个量级。

给 ivy 模块加 +fuzzy 标记即可。 (ivy +fuzzy)

但是我自己是特意没启用的,原因有二:

  1. 模糊搜索匹配的结果太多,过多的无效备选很影响定位到需要的那一项。
  2. 不使用 fuzzy 的话,虽然我要用空格隔开,但是有一个好处是各关键词可以乱序。比如搜你图中的 org-insert-link ,我可以输入 or in li ,也可以输入 in li or ,可以避免我记错顺序而找不到想要的东西。而 fuzzy 就必须是所有字母的顺序与要找的结果完全一致。
4 个赞