ivy-file-search 搜索容易卡住

我在用doom emacs,配置是搭配ivy使用的。最近发现WSL2里rg搜索项目内容很容易卡住,项目文件越多越明显,想输入一个单词来搜索的,只来得及输入第一个字符它就开始搜索了,过了10多秒出现第一轮结果列表之后才继续显示我输入的后续字符,这卡住的10多秒期间一直按C-g也是没用的。 道友们指点一下我该如何debug呢?或者有没有办法设置至少两个字符才开始搜索呢? 下面的图是随便找个项目演示一下,按了t之后狂按i,卡了两秒才出来i,实际项目的话比演示的严重很多。

ivy

下面是 doom的profiler:

可以试一下blink-search,永远不卡

大佬,其实我试过了,确实不卡,但是我的日常操作比较依赖ivy-resume:先发起搜索得到初步结果,选择结果列表第5项打开,发现不是想要的目标,ivy-resume,弹出刚才的搜索结果,并且列表的选中项还是第5,我往下选择第6项打开,做些修改,再ivy-resume,列表依然保持选中第6项,我接着往下选择…… 还有doom按 SPC-* 会用当前光标下的单词来在项目中搜索,按SPC s S 会用光标下的单词来在当前buffer搜索……暂时没有能力将blink-search定制到符合使用习惯

不知道你具体用的哪个命令,可以试试 counsel-rg,至少三个字符才会开始搜索。

我看我截图里的profiler分析就是调用的counsel-rg, 我试了M-x手动调用,也是一个字符就开始搜索,同样的卡住 :joy:

Try (setq ivy-dynamic-exhibit-delay-ms 300)

1 个赞

感谢大佬,这个设置对我这种情况有部分缓解!

默认counsel-rg 至少需要三个字符才开始搜索的。

但是这样做的缺点是,ivy连选择下一项搜索结果都会过300ms才触发,暂时改为100用着先

delay不够好用是吧?你这情况最简单且有效的办法肯定是把最少字符改回3个。我怀疑是doom改成了一个,代码不熟悉至少可以翻下doom的文档试试。

如果有新的搜索框架比如blink search觉得好用,然后需要加上搜索当前symbol/region之类的功能,这是很简单的呀,只要创建一个command,在里面调用search,参数为(thing-at-pt 'symbol)之类的,然后绑定个按键就完了。

对的,我就是按你说的试过一遍了,把当前符号传给blink-search的函数,然后还根据不同按键拼接好叹号或者井号再传进去,但是发现它没有按我传的字符串前缀来搜索,暂时就没折腾了

晚上再搜索一下doom的代码看看哪里改为1了

找到了, 从这里翻到的:

(after! ivy
  (setq ivy-more-chars-alist '((counsel-rg . 2)
                               (counsel-search . 2)
                               (t . 3))))
1 个赞