Snails超级快的模糊搜索框架

:demand也不行?

最简单的这样就可以了

(use-package snails
  :load-path "[dir]"
  :commands snails)

commands 这个可以。我觉得主要可能是 load-path, 直接 quelpa 那种方式就不行。

问题解决了,谢谢

已经合并了你的补丁, Windows 的用户可以使用 everything 这个工具进行整个磁盘文件搜索了。

C-n ,C-p 不能上下移动,这是什么问题?@ manateelazycat

花了一个小时加了个 projectile backend…

  • 5 分钟在抄其它 backend 代码
  • 半个小时在查 candiate-do 这个 typo 问题
  • 半个小时在查自己的 condidates typo

:thinking:


08-06 20:23 更新:再花两个小时修 bug …

5 个赞

backend 多了在一个窗口里感觉东西越来越多,越来越乱呀

可以自定义 backend 来搜索

目测是 evil mode insert state 的锅,我切成 Emacs state 就好了

是的,我自己小改了下snails了代码。刚提交了个PR,不知道猫大会接受不

已经合并了,我完全不使用 evil 的, 已经有三个人给我提交 evil 相关的补丁了,而且大家的使用习惯还不一样。

如果还是众口难调的局面,我会考虑移除 evil 的代码,evil 的用户应该用 snails-mode-hook 的方法去配置 evil 相关的设置。

看到 snails 的第一眼,就想起 vscode 的 cmd+shift+p,而它在 vscode 中,经常被人称为神器!(我也是道听途说的,但感觉很靠谱… :see_no_evil:

回到问题,「越来越乱」的问题其实可以非常容易得到解决。按照目前设计,只需要自定义 backend 集合,可以较好地解决 backend 过多的问题,懒人可参考:.emacs.d/init-snails.el at master · cosven/.emacs.d · GitHub

长远来看,可以有另外一个发展思路:参考 vscode 的功能设计。解析 input 来自动过滤 backend。像 vscode 一样,加个 > 前缀就只搜索 command,不加前缀就只搜索 buffer。我觉得 snails 也完全可以采用这种思路,实现也非常简单,判断一下字符串前缀就可以。用户体验上还可以向后兼容,简直 perfect。

想搞复杂点的话,可以自己对 input 进行词法分析,到时干啥都行…(不过我感觉这种思路可能性应该很小,毕竟没必要搞这么复杂)

非常看好 snails!毕竟同为操作系统的 macOS 上有 alfred/spotlight;Linux 上也有 albert 等。KDE 有 alt-f2;GNOME 也有全局搜索。嗯,我们 Emacs 操作系统以后也有 snails 啦 :see_no_evil:

你的插件代码已经合并了。

关于你说的前缀问题,我觉得非常好,这样可以默认不用那么多后端,用户可以自定义的进行搜索。

比如:

  • at: snails-backend-awesome-tab-group.el
  • bm: snails-backend-bookmark.el
  • bf: snails-backend-buffer.el
  • cb: snails-backend-current-buffer.el
  • et: snails-backend-everything.el
  • fd: snails-backend-fd.el
  • im: snails-backend-imenu.el
  • mf: snails-backend-mdfind.el
  • pt: snails-backend-projectile.el
  • rf: snails-backend-recentf.el
  • rg: snails-backend-rg.el
  • !: all backends

不同的前缀搜索不同的后端,如果前缀是!: 就搜索所有后端

3 个赞

我觉得前缀越简洁越好,尽量用符号

从可用性(UX)的角度,同意越简洁越好的想法;也同意尽量用符号,并且是那种表意明显,有一定使用历史的符号。比如 vscode 的 >,我觉得就挺好的。

另外,我觉得这样的工具,它的用户体验其实非常重要,比如性能就非常关键。

我又去体验了一下 vscode 的功能设计:

  1. 使用者按 cmd+shift+p 弹出来的窗口自动带 > 前缀,按 cmd+p 不带前缀
  2. > 前缀搜 Command,类似 Emacs 的 Alt-x,不带前缀搜文件(包括项目文件和 recentf)
  3. 不带前缀时:它的 placeholder 是 “Type ‘?’ to get help”
  4. 按 ? 后可以发现几个前缀:
  5. @ → symbol
  6. : → goto line

根据自己个人过去的使用经验,我有以下几个看法(ps:根据个人能力和时间,我预计自己贡献的代码会比较少,所以这里提的看法仅仅是一个看法。我尽量给自己的看法都加上自己的理由):

  1. 我觉得如果 snails 前期可以不预设,或者只设一两个最基本的前缀(毕竟如果前缀加上去,就不好撤回来了),以后让用户自己来配置 {前缀: backend group} 这个对应关系,snails 只管最基本的前缀
  2. 前缀尽量是一个字,甚至更好地交互方式(懒猫提到的三个字母的前缀,我觉得还是有点繁琐 :see_no_evil:
  3. 按照功能来分前缀,而不是按 backend 来分。 我感觉有很多 backend 是同质的,只不过他们在不同平台可能对应不同的 backend,以后发展强大了,生态好了,这种情况应该会尤其明显:功能基本相同的 backend,可能有好几个实现版本,比如有些性能强大,有些简洁好用(就类似 ivy 和 helm 这样的同类竞品)。

小结一下 :see_no_evil:

说这么多废话的原因是我自己对这样一个工具抱有很美好的幻想,(alfred 应该是这类工具中比较成功的一个了)(当然这不是要求开发者为我写功能啥的),而我认为这类工具尤其重要的几点有:

  1. 响应速度!!!!!!!
  2. 简洁,一定要简洁(功能简洁、少打字…)
  3. 具有相对优雅的默认行为(用户体验)(我觉得 snails 目前这个默认行为还不错)
  4. 强大的可扩展能力(不仅是扩展搜索类 backend,既然是个全局 bar,它可能还要承担执行命令等使命)

嗯,我的废话(个人想法往往很局限,并且可能被之前经验所束缚…)告一段落…

vscode用的符号,但字母按起来更快,类似于alfred

是比较像,但是设计理念和目标差别很大。snails 只着重在搜索功能上,vscode 的更像 minibuffer,什么都可以从这个入口进入,搜索只是其中一小部分功能。你所说的长远思路,怕是没那么简单啊,得包罗万象,不如用 ivy-posframe 或者 minibuffer 了。我估计这不是懒猫的初衷。

我倒是觉得,应该考虑后缀,先搜出所有的,觉得看不到需要的,再加个后缀限制

1 个赞

也可以像magit那样加搜索条件

1 个赞

我当时看代码,上一个版本是会检查 evil 的默认 state 的,但是不知道为什么又删了。

本来也想研究一下怎么改一下代码,可以通过配置设置,奈何最近很忙。。。

看了一下加的判断,感觉这两个判断好生硬啊 :rofl:

    (if (fboundp 'evil-insert)
      (evil-insert 1))
    (if (fboundp 'evil-emacs-state)
        (evil-emacs-state))

就像 PR 说的,我也感觉通过配置,或者 hook 处理可能更好一些