开发工具 让人相见恨晚的 vim 插件:模糊查找神器 LeaderF

Yggdroot · 2017年09月07日 · 最后由 sadwen 回复于 2022年09月02日 · 9413 次阅读

提到 vim 的模糊查找插件,很多人第一反应是 ctrlp.vim,ctrlp 知名度很高,但跟其它的同类插件相比,它的唯一优点是用 vimL 编写(这让它的性能是所有同类插件中最差的)。本文向大家推荐一款模糊查找插件——[LeaderF][1],无论是从性能还是匹配精度上,都远远超越 ctrlp。

[LeaderF][1] 是什么?

LeaderF 是一个用 Python 写的 vim 插件,可以在成千上万数十万个文件中,通过模糊查找的方式,快速找到目标文件。它还有很多衍生功能:快速打开或定位某个 buffer、最近使用的文件(mru)、tags(包括函数、类、变量等)、命令历史、文件中的某一行、vim 的 help、marks 等等。

查找文件

文件查找是 vimer 的常用操作,海量文件中快速定位目标文件是很多 vimer 迫切需要的功能,所以就有了 ctrlp 这样的插件。但 ctrlp 性能不佳,而且有时候把目标文件名都输入进搜索栏还是找不到目标文件,最大的问题是它的模糊匹配算法不佳,经常排在前面的跟所要找的相去甚远。LeaderF 采用异步检索和精心设计的模糊匹配算法完美地解决了这些问题,当你在根目录 (/) 按下搜索命令,再也没有想剁手的冲动了; 查找文件时,用更少的键击次数就可以找到目标文件,延长你的键盘使用寿命 :)

  • 异步检索

  • 模糊查找

  • 正则表达式查找

  • 多字节字符查找(中文查找)

快速定位 tags(包括函数、类、变量等)

有了它,tagbar 可以淘汰掉了:

查找历史命令

切换 Colorscheme


当然还有其他功能就不一一展示了,感兴趣的小伙伴可以查看 [这里][2]。

你不知道的细节

  • 智能大小写(smartcase)

如果输入的搜索字符都是小写字母,则匹配是大小写不敏感的;如果输入大写字母,则只匹配大写字母,小写字母仍然是大小写不敏感的。例如,输入abcDef,可以匹配如下字符串:

abcDef
AbcDef
abcDEf
aBcDeF

但不能匹配:

abcdef
Abcdef

注意abcef仍然是大小写不敏感的 这样可以通过大写字母,在搜索过程中快速缩小搜索范围。

  • 同时打开多个文件

  • 细化搜索结果

开箱即用

上面所有的功能都不需要额外的配置,只要装好 LeaderF 插件就可以使用了,不像有的插件,配置就像一门新的脚本语言。

最后

LeaderF 还支持写扩展程序,[这里][3] 是一个样例。

友情链接:[LeaderF,也許是 Vim 最好的模糊查詢插件][4]

[1]: https://github.com/Yggdroot/LeaderF [2]: https://github.com/Yggdroot/LeaderF/blob/master/README.md [3]: https://github.com/Yggdroot/LeaderF-marks [4]: https://0x3f.org/post/leaderf-currently-the-best-fuzzy-finder-of-vim/

这类插件并不少,我装了 ctrlp,但是一直没用过,因为有 nerdtree,怎么说呢?大概就是我更希望得到一个精确值而不是模糊值。

pynix 回复

模糊搜索并不是得到模糊的值,是用模糊的方式得到精确的值。比如说你想找 RubyChina.rb, 你只需要输入 rc 就能找到。 你如果用不到,说明你工作的项目文件也就在几十个以内。

那么,和 fzf.vim 方案相比,优势在哪里呢。

模糊查找这个功能我最初用的是 Command-T,后来过了许久才开始寻找替代方案(因为 Command-T 一直够用,没什么大毛病)。最终选用 fzf 方案是因为它可以独立使用,比如说取代 zsh 的 Ctrl+R 去查找历史命令。而且性能与响应性也很棒。再就是项目也足够成熟&流行,能一直维护 / 发展下去。

Yggdroot 回复

百来个文件吧,不过很好的用 folder 组织了,层次也不深。。。

5long 回复

fzf 是个不错的终端工具,我终端也在用,但没用 fzf.vim。fzf.vim 毕竟是借助第三方工具(fzf),与 vim 有割裂感,最明显的是在 windows 下使用 fzf.vim。优势嘛,可以说不比 fzf.vim 差,windows 下 fzf.vim 可以说没法用。

Yggdroot 回复

明白了。Windows 支持这个问题对我来说等于没有,所以就没体验到。

至于说“割裂感”这种事,我也完全不在乎。

不错,先试试看

之前一直在用 ctrlp,一般项目文件不会太多,所以目前也没感觉慢,匹配算法算法插件换了好几个,最好还是用回自带的,因为感觉差别不大

lz 不如来个性能测试对比吧,看看你的插件优势到底在哪

CtrlP 目前性能够用了,懒得换,折腾

不过还是支持一下楼主,Star 已送上

ruchee 回复

要有 geek 精神,我用文本搜索工具 ag 好长一段时间,后来听说 rg 比 ag 快,果断使用了 rg,虽然我实测只快了一点。

确实比 CtrlP 性能要好一些,准备试用一段时间,Star+1

Yggdroot 回复

不敢苟同,快慢只是其中的一个考察点,其他的还有使用的便利性、熟练程度等,既然够用,干嘛换

总不能今天听说 b 比 a 快就换 b,明天听说 c 比 b 快就换 c 吧,工具是拿来用的,不是无穷无尽折腾的

我觉得在自己工具遇到问题时再去折腾,才是最好的处理方式

觉得 CtrlP 已经够用了,代码片段一边用 ack-grep

Yggdroot vim 的模糊查找插件 LeaderF 新功能介绍 提及了此话题。 12月30日 17:26

leaderf 确实非常好,我在 win、linux 和 mac 下都在使用,体验一致,配置方便,已经离不开了。有时候连上生产环境的裸 vim,没有这个感觉处处不顺手了都😀

需要 登录 后方可回复, 如果你还没有账号请 注册新账号