Snails超级快的模糊搜索框架

+1 感觉后缀比前缀好 , 先搜再想要什么

后缀处理起来麻烦吧,C-a 输入前缀就好

请问如何想要 helm 那种 follow mode 在搜索结果里面根据聚焦自动切换 buffer 显示的内容用你现在这个 UI 是否会有点冲突?这个弹出的窗口可以像 helm 显示在底部吗?

是啊,我也觉得这样不好。可我试着加hook的时候,不知道怎么回事,重新启动emacs后第一次调用snails的时候是有效的,关掉snails窗口再重新调用就无效了,也不知道怎么回事。

请用helm,那不是snails的设计初衷

最新版已经可以了,请重新试一下

主要是我根本不用 evil, 我也不知道什么是最好的,而且我感觉evil用户也有不同的习惯。

最新版我直接删除了 evil 的代码,大家可以通过 snails-mode-hook 来自定义 evil 配置

1 个赞

其实,我写 Snails 的时候就思考了这些问题,我对Snails的考虑是有几个出发点:

  1. 整体架构一定要快,不管搜索后端是用什么方式实现的,都不能卡,目前已经通过架构来实现了
  2. 随着后端越来越多,大家对默认后端列表的习惯一定不一样, 大家可以通过自定义 backend 列表来快速包装自己喜欢的搜索后端列表

Snails 最开始的目标已经实现:快、实现简单、不影响窗口布局

至于类似 VSCode 这种前缀的方式,从我内心来看,肯定是比没有任何前缀复杂的,因为不够直觉,有一定的学习门槛和记忆成本,但是好处是,可以动态按需加载后端,而不是像 Helm 那样一股脑全部都在搜索,虽然Snails的性能不会受到后端的影响,但是一股脑数据全部过来了,用户筛选后端也是成本。

如果要做前缀后者后缀,可以从以下几个方面去考虑:

  1. 默认只做 buffer 搜索,这是最通用的
  2. 通过不同的修饰符来定义不同的分组,比如 f: 只是搜索文件名(fd, mdfind, everything, projectile 等等), F: 搜索文件内容 (ripgrep)
  3. 至于是前缀还是后缀,我觉得需要再思考一下,也想看看大家的讨论

我认为Emacs在代码导航方面,有几个组件需要共存:

  1. minibuffer,就是用来输入命令的,有按序补全和记忆功能就很好,其实 smex 就够了
  2. 代码或者英文语法补全,company/auto-complete 就是最佳选择
  3. 专注于搜索的操作,应该聚焦于模糊搜索后马上回车执行默认命令,这也是 Snails 对自己的定位

所以,Snails的定位是专注于搜索相关的功能,而不是用来替换 Minibuffer 或者 Company,大家可以看看,像Helm这样,很多人因为喜欢Helm,把所有的补全功能都用Helm来操作,其实很多时候,并没有 Smex 和 Company 做的好。

就像很多人喜欢一门编程语言后,总想用这门编程语言把所有的功能重写一遍,殊不知,编程语言总会有更新的出来,今天的Rust就像当年的Haskell一样,以后还会有新的编程语言出来,但是重写一直都不是正确的定位和发展方向。

最后,我认为Snails能够把搜索补全这个领域做好,和Smex、Company形成良好的互补关系就是最好的发展方向。

3 个赞

@manateelazycat

懒猫,我发现 buffer-filename 这个变量只在 snails-backend-current-buffer.el 出现在了这一行

snails.el snails-core.el 都没有出现,这是不是个 typo ?

那是准备下面用的变量,当时写的太快没有用上,哈哈哈哈

已经修正了,谢谢指出。

今天想了一下Snails的前缀搜索的设计,和大家分享一下:

  • 没有前缀的时候,搜索buffer, recentf, bookmark, awesome-tab group
  • 前缀是 @ 的时候用 imenu 搜索变量和函数
  • 前缀是 # 的时候用 ripgrep 搜索当前 buffer 的内容
  • 前缀是 ! 的时候用 ripgrep 搜索当前项目的文件内容
  • 前缀是 ? 的时候用 fd/projectile, everything/mdfind搜索当前项目的文件或者磁盘的文件

这样就可以实现类似VSCode Ctrl + Shift + P的效果,用户既不用定制后端,又可以根据不同场景的需要定向搜索。

这个月都在外面旅游,希望旅游的时候听一下大家的意见,旅游完毕如果有统一意见,我可以实现前缀搜索的功能,

这样设计的好处是:比Helm这种一下搜一堆后端结果更有效率和针对性,相比Ivy的设计,Snails使用前缀来替换多个快捷键,减少脑负担。

3 个赞

这个天气旅游,肯定是去哪座山避暑吧 :smile:

自驾青海大环线

我有个想法,每一个后端定义的时候可以确定一下前缀字符(可以规定有效前缀字符的选择范围,每个后端的前缀字符有默认值,也可以通过配置修改),在没有前缀的情况下,搜索所有后端,在有前缀的情况下,搜索前缀字符对应的后端,有前缀字符的情况下,搜索该前缀字符对应的后端。这样既可以进行默认分类,也可以进行自定义配置。

前期先默认定好前缀,先做到开箱即用,后期再考虑定制前缀

2 个赞

我反而觉得前缀不应该自定义。设计好一套好用的,就这么用了。这不应该是 snails 的初衷吗?没见 vscode 可以定义这些玩意儿

这条线路不错,高原上凉快,就是有点累啊

emacs的精髓难道不是灵活的自定义吗?跟vscode有什么可比性,vscode哪些地方可以自定义了?

这个就不要比较了, 高的灵活性是有代价的。。。。。 鱼和熊掌往往是不能兼得的

1 个赞

是滴,该灵活的地方就灵活,该舍弃的就舍弃,否则又会臃肿不堪。

2 个赞