Snails超级快的模糊搜索框架

你是用的emacs-plus吧?换成emacs-mac就好了

1 个赞

谢谢!已解决,还是 emacs-mac 和 Mac 结合的更好一点 :kissing_heart:

(setq snails-path (expand-file-name ".local/straight/repos/snails" doom-emacs-dir))
(use-package! snails
  :load-path snails-path
  :init (add-hook 'snails-mode-hook (lambda () (evil-emacs-state)))
  :commands snails)

这个应该能用。

1 个赞

网友 方圆 指出另外一种配置方式:

(use-package! snails
  :config (evil-set-initial-state 'snails-mode 'emacs))
1 个赞

snails 的 ripgrep 后端不工作:

  1. snails-backend-rg 不在默认 snails-default-backends 里,但是 snails 界面显示有 “! RG”
  2. snails-backend-rg-filter-number 默认是 20,超过 20 就把整个结果丢弃了。。。
  3. snails-backend-rg.el 里 string-truncate-left 函数在 Emacs 27.1 里不存在,由于 snails-core.el 里 snails-create-async-process() 函数里面 ignore-error 掉了,所以不报告任何错误。。。

这个地方需要改下。

  1. 目前要自己加rg后端到启动列表,没有加所有后端。
  2. 只是一次显示20个最佳匹配,不是丢弃结果,主要为了提高实时性能。
  3. 这个github提一下issue吧

发了个补丁供参考。 最好还能再改进下,在按 ! 时自动加载 backend-rg。

但这个 backend 的可用性还是不如 +default/search-project-for-symbol-at-point,这个也是用 rg,但似乎没有限制最大条目数(也可能是默认限制比较大)。

另外那个 ignore errors 是不是往 Messages 里输出点东西比较好?

要用rg,可以用color-rg.el

感谢补丁已经合并

如果专业用 rg, 建议用 color-rg.el 没有任何限制, snails之所以用限制的原因是两个:

  1. 实时搜索,同时启动进程太多,不限制会影响性能
  2. 多个后端,不限制会影响性能

所以建议深度用rg,可以用我写的 color-rg.el

ignore-errors 本质是抑制中间搜索进程报错的问题,还没想到怎么抑制错误同时输出错误的方法,有时间研究下。

按!的时候自动加载 background 的想法感觉不错,我回头看看

Snails最新版增加了 candidate-insert 自定义函数。

当搜索后端提供 candidate-insert 函数,snails-candiate-insert 会调用后端的插入函数插入内容,如果后端没有提供 candidate-insert 函数,Snails会直接插入搜索出来的文本内容。

使用场景举例,JavaScript项目中经常会有一些重复的小片段需要到处粘贴复用,原来的Snails版本需要4个步骤:

  1. 启动Snails,输入 ! 搜索前缀,Snails会自动调用 rg 命令在文件所属的项目目录下进行全局搜索
  2. 搜索到内容后直接按快捷键 Ctrl + m 跳转到对应文件的位置
  3. 执行行拷贝操作
  4. 切换到当前文件,执行粘贴操作

最新版本Snails可以用下面的步骤来快速搜索插入:

  1. 启动Snails,输入 ! 搜索前缀,Snails会自动调用 rg 命令在文件所属的项目目录下进行全局搜索
  2. 搜索到内容后直接按快捷键 Ctrl + h 插入搜索的内容到当前文件中

新版的Snails避免了文件定位 -> 代码拷贝 -> 代码粘贴的重复步骤,大大减少了编程时的心智负担。

请问有人在DWM用过snails吗?在DWM下使用snails时,启动之后会弹出新窗口,请问该问题有知道如何解决的吗?

可以设置为不弹窗的模式,看一下readme

感谢懒猫大大解答,确实是自己粗心了,没有好好读readme,抱歉打扰大家时间了。

懒猫大大,请问使用前缀!进行搜索项目文件内容时,没有回显,但是使用#搜索当前buffer是有回显的,您能指点一下吗?我鼓捣了一下午,还是没头绪。(配置就是上图的,没有变)

多敲几个字符试试呢?

试过了,还是出不来。。。很奇怪,从trace-function中看得到,敲四个字符之后就已经调用rg执行搜索了(上面的截图),但是就是没有回显 :joy: 我鼓捣快一天了 :rofl:

可以发一个目录压缩包和重新步骤到github issue

今天配置了doom emacs + snails,不能用,有点问题?

  • package.el
    (package! snails :recipe (:host github :repo “manateelazycat/snails”))
  • config.el
    (use-package! snails)

M-x snails
提示如下错误 snails-search: Symbol’s function definition is void: string-replacesnails-search: Symbol’s function definition is void: string-replace


是不是还需要其他配置?

(with-eval-after-load "snails"                                                                                                                                                                                                          
  (fset 'string-replace 'replace-regexp-in-string))

先这样hack一下吧,我也遇到了。你可以到github提个issue?