Yggdroot
V2EX  ›  Vim

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

  •  
  •   Yggdroot · Sep 7, 2017 · 17652 views
  •   You need to sign in to view this topic
    This topic created in 3346 days ago, the information mentioned may be changed or developed.

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

    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
    

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

    • 同时打开多个文件

      同时打开多个文件

    • 细化搜索结果

      细化搜索结果

    开箱即用

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

    最后

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

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

    32 replies  •  2018-03-16 12:54:27 +08:00
    tracyone
    tracyone
    Sep 7, 2017 via iPhone
    1
    相见恨晚的,vim 多进程异步执行插件

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

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

    持续关注。
    pony279
    pony279
    Sep 8, 2017
    17
    用 FZF 还有一个弊端,插件需要下载 github 上发布的二进制文件,在新的机器部署的时候经常速度很慢(天朝网络原因)
    tracyone
    tracyone
    Sep 8, 2017 via iPhone
    18
    @pony279 leaderf 有调用外部程序的接口,而且是自动选择那个最快的
    NoAnyLove
    NoAnyLove
    Sep 8, 2017
    19
    看到作者的用户名有点眼熟,然后才发现原来是因为我在用 indentLine
    NoAnyLove
    NoAnyLove
    Sep 8, 2017
    20
    大致看了一下 README,好像没有 CtrlP.vim 那种 CtrlPMixed 混合搜索模式
    simple26
    simple26
    Sep 8, 2017
    21
    @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
    Chingim
    Sep 8, 2017
    22
    名字有点熟, 原来是 indentLine 的作者, 记得还提交过 PR.

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

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

    我现在缺一个 outliner 的东东。
    Yggdroot
    Yggdroot
    OP
    Sep 8, 2017
    30
    @ashfinal 需要电脑上装有 ctags,ctags 支持的文件类型都支持。如果需要支持更多的文件类型,使用 https://github.com/universal-ctags/ctags,是 ctags 的维护版本,支持几乎所有语言。
    可以用`ctags --list-languages`查看,你使用的语言肯定在里面。
    acgtyrant
    acgtyrant
    Mar 13, 2018
    31
    一句节约你的时间:这插件不支持 Mixed.
    Yggdroot
    Yggdroot
    OP
    Mar 16, 2018
    32
    @acgtyrant 感觉没必要支持 mixed.
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2640 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 54ms · UTC 14:38 · PVG 22:38 · LAX 06:38 · JFK 09:38
    ♥ Do have faith in what you're doing.