Snails 6.0发布,现在支持像VSCode那样按照前缀进行搜索了

今天早上新加了一个补丁, 发布了 Snails 最新版本 6.0

按前缀来搜索不同的内容

Snails 6.0 的主要更新是支持像VSCode那样根据前缀来搜索不同的后端内容。

  • Snails启动后,默认在标签分组、缓存列表、最近访问文件、书签这些最高频的后端中进行搜索,以快速切换正在使用的文件
  • 当输入中包含前缀 > 时,Snails搜索所有可以执行的命令
  • 当输入中包含前缀 @ 时,Snails只在函数或变量定义中进行搜索,方便快速进行定义跳转
  • 当输入中包含前缀 # 时,Snails使用 ripgrep 搜索当前文件的内容
  • 当输入中包含前缀 ! 时,Snails使用 ripgrep 搜索当前项目里所有文件的内容
  • 当输入中包含前缀 ? 时,Snails使用 fd、projectile、mdfind、everything 等后端进行全局文件名搜索,以快速找到并打开磁盘中的文件

这样设计的作用是,Snails默认只搜索打开的文件,符合99%的默认使用习惯,当用户需要特殊搜索,比如函数定义的时候,可以在输入的内容加上前缀 ,使得Snails只在用户指定的后端中进行定向搜索。

通过这样的设计,可以同时满足绝大多数用户的使用习惯,又不会因为默认加入太多的后端导致搜索信息过多的问题,最终提升用户的搜索效率。

自定义搜索后端

当然,如果你不喜欢前缀的方案,可以通过自定义后端列表的方式进行自定义搜索:

(snails '(snails-backend-buffer snails-backend-current-buffer))

比如按照上面的示例,Snails只会在缓存列表和当前文件内容这两个后端中进行搜索,并且忽略用户输入的任何前缀,这种自定义后端的搜索体验和Helm的体验保持一致。

如果你只自定义一种后端,搜索体验将和Ivy保持一致。

That’s all, enjoy!

17 个赞

至从加了前缀,现在更新到最新版本 Add command backend. · manateelazycat/snails@f7ad968 · GitHub

可以直接用前缀 > 搜索命令了。

这个补丁可以在命令后面显示快捷键,你搜索快捷键的时候,往往是你忘记快捷键的时候,多搜索几次命令,就记住按键了。

1 个赞

如果能把org融合进来就好了

再把yasnippet也放进去

PR,请 紫薯布丁

今天加了一个补丁 Make rg backend support customize search directory. · manateelazycat/snails@b99a6d2 · GitHub

现在 Snails的 snails-backend-rg 后端可以支持自定义目录了。

举个例子:

  1. 大部分时候我们只用搜索当前项目的文件内容,所以直接前缀 ! 加上你要搜索的内容就可以了
  2. 但是有时候偶尔想搜索一下 org 文件的笔记,可以输入 !keyword@/Users/andy/org 就可以在 /Users/andy/org 目录中搜索 keyword 了。

imenu 的搜索没有详细的上下文的? 只有一些 Functions, Section 这样的提示。

有文件样本吗?

样本就是 snails-backend-imenu.el

前缀搜索的改动引入了一个问题,导致第一次启动会报错。 We need init `snails-candiate-list' with `snails-backends', otherwise… · manateelazycat/snails@235b22d · GitHub 已经修复

emacs -Q对比测试一下,看看是不是你自己的配置有问题。

如果 emacs -Q 都有问题,请写下详细的重现步骤,我这边没法重现你说的问题。

m杠x imenu杠list 显示的是什么 你改过imenu的配置吗 还是别人替你改了 你不知道

1 个赞

emacs -Q 没问题,看来又是 doom 的问题。我仔细查了下,找到问题了, doom 偷偷给 emacs-lisp mode 加了一个 hook, 里面设置了 imenu-generic-expression 。去掉就好了。。。

系统:linux mint19

emacs:26.3

readme是不是少了点什么啊,我这样配置后一个选项都出不来:

(add-to-list 'load-path "~/src/emacs-packages/snails")
(require 'snails)
;;执行这个,弹出了snails窗口,但是一个选项都木有!  M-x snails也是一样
(snails '(snails-backend-buffer snails-backend-recentf) t)

readme看了n遍都没看到有什么区别,翻了代码随便加了句

(require 'snails-backend-buffer)

然后snails才有了buffer列表,哦,原来还要require一下,不require也没给报错什么的。。。

然后我又加一句

(require 'snails-backend-recentf)

snails还是只显示buffer列表,而没有最近文件,recentf我确定是require了的,counsel-recentf都有列表。

然后,emacs -q启动,执行以下

(add-to-list 'load-path "~/src/emacs-packages/snails")
(require 'snails-backend-buffer)
(require 'snails-backend-directory-files)
(require 'snails)
(snails) ;; 已经打开了几个文件,snails又变成空了

是哪里姿势不对吗,还是说必须要安装rust和fuz.el才可以出列表??(正在安装中。。。)

上回在windows下,也是这样,snails是空的,就没用了,不知道是哪里不对。

以前还试过一个one-key的插件,也是不知道怎么个用法。。。

按键绑定这个命令 (snails '(snails-backend-buffer snails-backend-recentf) t)

不要在配置文件启动这个命令

安装了clang,编译了fuz的so,按文档复制并重命名so到fuz的el同目录下,

使用按键绑定snails,执行后,

f4报错:Symbol’s function definition is void: fuz-calc-score-skim

f5报错:Error running timer: (void-function fuz-calc-score-skim)

(add-to-list 'load-path "/home/owen/src/emacs-packages/snails")
(add-to-list 'load-path "/home/owen/src/emacs-packages/fuz")  ;;fuz-core.so
(require 'snails)
(require 'fuz)
(global-set-key (kbd "<f4>") 'snails)
(global-set-key (kbd "<f5>") '(lambda ()
				(interactive)
				(snails '(snails-backend-buffer snails-backend-recentf) t)))

fuz要安装动态库,readme有写怎么装fuz得动态库

之前就是手动cargo build --release,得到的so,现在用(fuz-build-and-load-dymod)编译了,又安装了llvm,还是不行。

Debugger entered--Lisp error: (void-function fuz-calc-score-skim)
  fuz-calc-score-skim("" "*Messages*")
  #f(compiled-function (it) #<bytecode 0x232c365>)((#(" *Messages*" 0 1 (face (:family "FontAwesome" :height 1.2) font-lock-face (:family "FontAwesome" :height 1.2) display (raise -0.12) rear-nonsticky t)) "*Messages*"))
  mapcar(#f(compiled-function (it) #<bytecode 0x232c365>) ((#(" *Messages*" 0 1 (face (:family "FontAwesome" :height 1.2) font-lock-face (:family "FontAwesome" :height 1.2) display (raise -0.12) rear-nonsticky t)) "*Messages*") (#(" *scratch*" 0 1 (face (:family "file-icons" :height 1.2 :inherit all-the-icons-orange) font-lock-face (:family "file-icons" :height 1.2 :inherit all-the-icons-orange) display (raise -0.12) rear-nonsticky t)) "*scratch*") (#(" test.el" 0 1 (face (:family "file-icons" :height 1.2 :inherit all-the-icons-dgreen) font-lock-face (:family "file-icons" :height 1.2 :inherit all-the-icons-dgreen) display (raise 0.0) rear-nonsticky t)) "test.el")))
  snails-sort-candidates("" ((#(" test.el" 0 1 (face (:family "file-icons" :height 1.2 :inherit all-the-icons-dgreen) font-lock-face (:family "file-icons" :height 1.2 :inherit all-the-icons-dgreen) display (raise 0.0) rear-nonsticky t)) "test.el") (#(" *scratch*" 0 1 (face (:family "file-icons" :height 1.2 :inherit all-the-icons-orange) font-lock-face (:family "file-icons" :height 1.2 :inherit all-the-icons-orange) display (raise -0.12) rear-nonsticky t)) "*scratch*") (#(" *Messages*" 0 1 (face (:family "FontAwesome" :height 1.2) font-lock-face (:family "FontAwesome" :height 1.2) display (raise -0.12) rear-nonsticky t)) "*Messages*")) 1 1)
  snails-backend-buffer-search("" 1 snails-update-callback)
  snails-input-search("")
  snails-search("")
  snails()
  funcall-interactively(snails)
  call-interactively(snails nil nil)
  command-execute(snails)

执行

(unless (require 'fuz-core nil t)
  (fuz-build-and-load-dymod))

显示了

warning: custom registry support via the `registry.index` configuration is being removed, this functionality will not work in the future
    Updating `https://mirrors.ustc.edu.cn/crates.io-index/` index
   Compiling fuz v0.1.0 (/mnt/windows/space/home/msys/src/emacs-packages/fuz)
    Finished release [optimized] target(s) in 14.71s

(fboundp 'module-load)返回t吗