让人相见恨晚的 vim 插件:模糊查找神器 LeaderF - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Yggdroot
V2EX    Vim

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

  •  
  •   Yggdroot 2017-09-07 15:42:18 +08:00 16409 次点击
    这是一个创建于 2956 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    LeaderF是什么?

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

    查找文件

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

    • 异步检索

      异步检索

    • 模糊查找

      模糊查找

    • 正则表达式查找

      正则

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

      中文

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

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

    tags

    查找历史命令

    History

    切换 Colorscheme

    Colorscheme


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

    你不知道的细节

    • 智能大小写( smartcase ) 如果输入的搜索字符都是小写字母,则匹配是大小写不敏感的;如果输入大写字母,则只匹配大写字母,小写字母仍然是大小写不敏感的。例如,输入abcDef,可以匹配如下字符串:
    abcDef AbcDef abcDEf aBcDeF 

    但不能匹配:

    abcdef Abcdef 

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

    • 同时打开多个文件

      同时打开多个文件

    • 细化搜索结果

      细化搜索结果

    开箱即用

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

    最后

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

    友情链接:LeaderF,也是 Vim 最好的模糊查插件

    32 条回复    2018-03-16 12:54:27 +08:00
    tracyone
        1
    tracyone  
       2017-09-07 18:00:43 +08:00 via iPhone
    相见恨晚的,vim 多进程异步执行插件

    https://github.com/tracyone/neomake-multiprocess
    aheadlead
        2
    aheadlead  
       2017-09-07 18:04:34 +08:00
    Star 已送上 试一试
    bigzhu
        3
    bigzhu  
       2017-09-07 18:13:07 +08:00 via Android
    正好在找,用了看看
    TangMonk
        4
    TangMonk  
       2017-09-07 18:21:36 +08:00
    让 ctrlp 使用 ag 啊
    let g:ctrlp_user_command = 'ag %s -l --nocolor -g ""'
    we000
        5
    we000  
       2017-09-07 18:34:03 +08:00
    fzf.vim 路过
    fityme
        6
    fityme  
       2017-09-07 18:38:34 +08:00
    同楼上(虽然已经用 jetbrains 全家桶了
    4faramita
        7
    4faramita  
       2017-09-07 23:13:09 +08:00
    竟然通篇没提 fzf
    mzlogin
        8
    mzlogin  
       2017-09-07 23:39:10 +08:00
    一起在用,还提过两个 Issue,支持一下。
    firenine
        9
    firenine  
       2017-09-08 00:44:03 +08:00
    JB 家的 IDE 双击 shift
    jkmmmm
        10
    jkmmmm  
       2017-09-08 06:21:22 +08:00 via iPhone
    比起 fzf 有什么优势没?
    Shura
        11
    Shura  
       2017-09-08 07:30:38 +08:00 via Android
    Yggdroot
        12
    Yggdroot  
    OP
       2017-09-08 07:51:42 +08:00
    @jkmmmm 大约一年前,fzf 的模糊匹配算法很垃圾,只会根据匹配长度做排序。前几天我又用了下,它的匹配算法好像比以前好了。有空我好好用一下 fzf 做一下对比。
    不过现在已知的比 fzf 最明显的优点是:在 windows 下,fzf 可以说没法用。
    yedashuai
        13
    yedashuai  
       2017-09-08 09:39:20 +08:00
    star 已经献上,虽然是 jetbrains 全家桶爱好者
    Numbcoder
        14
    Numbcoder  
       2017-09-08 09:56:54 +08:00
    我来说一下 fzf 的缺点吧,只能在终端下用,不能在 GVim 和 MacVim 下用
    xomix
        15
    xomix  
       2017-09-08 11:13:21 +08:00
    又见 vim,想起来怎么生成随机字符串的梗………………
    pony279
        16
    pony279  
       2017-09-08 11:42:03 +08:00
    个人喜欢 fzf 的原因是有几十万个文件或更多的时候 ui 几乎没有明显卡顿,LeaderF 在这方面好像还不够,刚刚试了下有点小卡,当然已经比 ctrlp 好很多了。

    fzf 的接口定义的也挺清晰,所以做了一堆拓展,https://github.com/junegunn/fzf.vim 。现在用的比较多的是 FZFAg,FZFHistory,FZFFiles。其中 FZFAg 在 LeaderF 里面找不到对应项。相信这个在 LeaderF 里面也不是什么难事。

    持续关注。
    pony279
        17
    pony279  
       2017-09-08 11:44:04 +08:00
    用 FZF 还有一个弊端,插件需要下载 github 上发布的二进制文件,在新的机器部署的时候经常速度很慢(天朝网络原因)
    tracyone
        18
    tracyone  
       2017-09-08 11:54:27 +08:00 via iPhone
    @pony279 leaderf 有调用外部程序的接口,而且是自动选择那个最快的
    NoAnyLove
        19
    NoAnyLove  
       2017-09-08 11:55:49 +08:00
    看到作者的用户名有点眼熟,然后才发现原来是因为我在用 indentLine
    NoAnyLove
        20
    NoAnyLove  
       2017-09-08 12:02:05 +08:00
    大致看了一下 README,好像没有 CtrlP.vim 那种 CtrlPMixed 混合搜索模式
    simple26
        21
    simple26  
       2017-09-08 12:22:49 +08:00
    @Numbcoder fzf 已经支持在最新的 GVim 中使用了 使用了 Vim 的 terminal 特性

    https://github.com/junegunn/fzf/pull/1019,https://github.com/junegunn/fzf/commit/a8deca2dd92742b7e37783fd5629bef701d236ed

    虽然我已经很少用 Windows 但是应该不是无计可施的 至少 https://github.com/mattn/vim-fz README 的 gif 就是在 Windows 下面使用的 所以相信 fzf 应该也是可用的

    fzf 也不是没有缺点 见 https://github.com/mattn/vim-fz/pull/3

    LeaderF 还是挺好的 比 CtrlP 快
    Chingim
        22
    Chingim  
       2017-09-08 12:37:45 +08:00
    名字有点熟, 原来是 indentLine 的作者, 记得还提交过 PR.

    支持新插件, 待会试试
    tamlok
        23
    tamlok  
       2017-09-08 12:59:54 +08:00 via Android
    之前一直用,但后来因为机器不一定有 python 环境,所以还是用回 ctrlp 了。leaderf 能否提供一个 fallback 呢?统一用 leaderf 的命令,但当没有 python 支持时调用 ctrlp 的命令。谢谢!
    Yggdroot
        24
    Yggdroot  
    OP
       2017-09-08 13:02:21 +08:00
    @tamlok 这项工作不应该是 LeaderF 做的,你可以直接在 vimrc 里做。
    tamlok
        25
    tamlok  
       2017-09-08 13:07:15 +08:00 via Android
    @Yggdroot 所以能不能在项目主页给出一个解决方案?很多人并不一定懂得 vimscript。这样也可以作为解决 python 依赖的一种方法?谢谢
    tracyone
        26
    tracyone  
       2017-09-08 13:08:54 +08:00 via iPhone
    @tamlok 你可以判断 if has("puthon") 加载 leaderf 否则加载 ctrlp ……
    bookit
        27
    bookit  
       2017-09-08 13:23:45 +08:00
    楼主,安装 C 插件之后失败,

    我用的 nvim,是不是没考虑到 nvim 各种配置和 vim 不一样了。。
    Yggdroot
        28
    Yggdroot  
    OP
       2017-09-08 13:28:31 +08:00
    @bookit 没有不一样,兼容 nvim,装 c 跟用的是 vim 还是 nvim 没关系,你可以在 github 上开个 issue,把错误贴出来,这里不适合讨论这个。
    ashfinal
        29
    ashfinal  
       2017-09-08 19:51:54 +08:00
    想知道“快速定位 tag ”是需要额外安装或者设置什么吗?支持哪些文件类型?

    我现在缺一个 outliner 的东东。
    Yggdroot
        30
    Yggdroot  
    OP
       2017-09-08 20:29:33 +08:00
    @ashfinal 需要电脑上装有 ctags,ctags 支持的文件类型都支持。如果需要支持更多的文件类型,使用 https://github.com/universal-ctags/ctags,是 ctags 的维护版本,支持几乎所有语言。
    可以用`ctags --list-languages`查看,你使用的语言肯定在里面。
    acgtyrant
        31
    acgtyrant  
       2018-03-13 15:25:52 +08:00
    一句节约你的时间:这插件不支持 Mixed.
    Yggdroot
        32
    Yggdroot  
    OP
       2018-03-16 12:54:27 +08:00
    @acgtyrant 感觉没必要支持 mixed.
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     976 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 23:12 PVG 07:12 LAX 16:12 JFK 19:12
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86