vim-clap:高颜值高性能的通用型模糊查找vim/neovim插件(代码片段)

liuchengxu_ liuchengxu_     2022-10-21     320

关键词:

https://github.com/liuchengxu/vim-clap 是一个基于 Vim/NeoVim 最新特性 popup/floating_win 的高颜值高性能模糊查找插件:

  1. 所谓高颜值,是指基于 popup/floating_win 弹出一个类似 Alfred 的窗口,不再分割(split)窗口,不会扰动当前的窗口布局。自从有了 popup/floating_win 以后,其实只要不是常驻窗口,都应该使用 popup/floating_win 进行展示。由于

  2. 所谓高性能,是指即将所有耗时操作交给外部的 Rust 扩展,Vim/NeoVim 只是负责展示结果与分派任务,这样即使面对上百万文件,也不会卡住 Vim/NeoVim.


其实类似的插件已经有很多了,从最早期的 ctrlp.vim, unite.vim, 到后期的 command-t, denite.nvim, fzf.vim, leaderf 等等。ctrlp.vim, unite.vim 的优点是纯 vimscript, 但是随之而来的一个无法避免的缺点就是很慢,性能差,一旦出现数据量很大的情况,Vim 可能就卡死了。它们后面的插件在性能上都做了改进,比如 denite.nvim, leaderf 用了 Python,command-t 和 fzf.vim 用了外部扩展,要编译外部模块或者说依赖于外部的二进制程序。

在所有同类插件中, fzf.vim 应该是最成功的的一个,在写 vim-clap 之前,我一直用的都是 fzf.vim, 无论是性能还是 UI, 都是上乘,而且基本是开箱即用,无须复杂的配置。但是自从发现 fzf.vim 无法使用 popup 以后,详情可以继续关注这个 issue. 当时还没有其他任何插件同时支持 neovim 的 floating_win 和 vim 的 popup,同时也没有符合我的“美学”观念的插件 😦,我就开始写了 vim-clap。如果对 fzf.vim 与 vim-clap 的区别与联系有兴趣,可以看这个 reddit post.

早期的 vim-clap 的主要优势在于同时支持 floating_win 和 popup,但是性能并不好。直到有了 Rust 扩展以后,vim-clap 才真正成为一个优秀的高可用 fuzzy finder 插件。

安装

  • Vim: :echo has('patch-8.1.2114').
  • NeoVim: :echo has('nvim-0.4').

只要保证 Vim/NeoVim 的版本不太低,就可以安装 vim-clap , 比如使用插件管理器 vim-plug:

Plug 'liuchengxu/vim-clap', 'do': ':Clap install-binary!' 

Rust

本质上,vim-clap 可以在不安装 Rust 的情况下工作,但是由于 VimScript 是一个性能比 Python 还差得多的脚本语言,无法应对复杂或者繁重的处理逻辑。对于一些可能出现数据量非常大的 provider,必然会有一些性能问题,造成插件不可用的情况。比如 :Clap files ~ 在用户目录下查找所有文件,在我的机器上用户目录下有近一百万文件,不使用 Rust 扩展,可能会耗时几十秒,这显然是不能接受的。有兴趣的可以看这个 issue 140, 里面我进行了详细的分析,并提出了一些可能的解决方案。

在所有可能的方案中,我最终采用了 Rust 扩展,Vim/NeoVim 通过异步作业
job 方式分派任务,用 JSON 进行信息交互。因为最近一直都在使用 Rust, 也算是刚好派上了用场,“学以致用”。

如果你还没有安装过 Rust, 请先安装 Rust 环境。因为现在还没有提供 Rust 二进制下载,需要在本地自行编译。即使从来没有接触过 Rust 也不用担心,整个编译步骤很简单,只要确认 Rust 已经安装好以后,打开 Vim/NeoVim 执行下面这条命令就会自动进行编译安装:

:call clap#helper#build_all()

如果你想要手动编译:

# 编译成功后生成一个可执行文件 target/release/maple ,这个就是我们要的 Rust 扩展程序
$ cargo build --release

不过建议使用 :call clap#helper#build_all() 进行安装 ,因为如果你的 Vim/NeoVim 有 python3 支持的话,这个帮助函数还是尝试编译一个 Python 动态模块,这个动态模块对于性能提升非必要,但是可以让你避免在一些不太大的数据集时使用异步作业。

结束语

GitHub: https://github.com/liuchengxu/vim-clap, 欢迎试用。space-vim 的用户启用 fzf layer 并在 .spacevim 中添加 let g:spacevim_enable_clap = 1 即可。

vim-clap:高性能的现代化模糊查找插件--v0.6更新(代码片段)

今天分享一下我至今为止写的最满意的一个Vim插件:https://github.com/liuchengxu/vim-clap,它是一个用于模糊查找和搜索的Vim插件,在同类插件中最早同时支持neovim的floating_win和vim的popup,这也是我造这个轮子的初衷之一。在早期&#... 查看详情

vim-clap:高性能的现代化模糊查找插件--v0.6更新(代码片段)

今天分享一下我至今为止写的最满意的一个Vim插件:https://github.com/liuchengxu/vim-clap,它是一个用于模糊查找和搜索的Vim插件,在同类插件中最早同时支持neovim的floating_win和vim的popup,这也是我造这个轮子的初衷之一。在早期&#... 查看详情

vim-clap:高性能的现代化模糊查找插件--v0.6更新(代码片段)

今天分享一下我至今为止写的最满意的一个Vim插件:https://github.com/liuchengxu/vim-clap,它是一个用于模糊查找和搜索的Vim插件,在同类插件中最早同时支持neovim的floating_win和vim的popup,这也是我造这个轮子的初衷之一。在早期&#... 查看详情

这才叫高颜值的markdown编辑神器!

...者和码农们那里非常受欢迎,今天和大家推荐另一款高颜值的、功能强大的开源 查看详情

一款高颜值的mysql管理工具,超好用。。

作者:转身丶即天涯来源:jianshu.com/p/ad2143d84483服务器和本地都是Mysql数据库使用的工具:SequelPro(专门管理Mysql的工具)操作系统MacOS10.12SequelPro简介SequelPro是一款管理Mysql的工具,界面简洁易用。 查看详情

高颜值:redis官方可视化工具,功能强大!(代码片段)

一、RedisInsight简介RedisInsight是一个高颜值,直观高效的RedisGUI管理工具,它可以对Redis的内存、连接数、命中率以及正常运行时间进行监控,并且可以在界面上使用CLI和连接的Redis进行交互(RedisInsight内置对Redis模... 查看详情

prettyzoo-高颜值的zookeeper可视化工具

https://blog.csdn.net/qq_41489540/article/details/118439134 查看详情

prettyzoo-高颜值的zookeeper可视化工具

https://blog.csdn.net/qq_41489540/article/details/118439134 查看详情

高颜值的“佳佳”和阿尔法狗为何我们更喜欢后者?

...轮人工智能热潮。而就在近日,中国科学技术大学推出的高颜值机器人——“佳佳”与美国著名科技观察家凯文·凯利、人工智能专家巴特·塞尔曼的一次人机对话, 查看详情

redis官方可视化工具,高颜值,功能真心强大!

来源:https://blog.csdn.net/weixin_46902396/article/details/120807629/RedisInsight是一个直观高效的RedisGUI管理工具,它可以对Redis的内存、连接数、命中率以及正常运行时间进行监控,并且可以在界面上使用CLI和连接的Redis进行交互&#... 查看详情

高颜值的开源终端工具,太漂亮了

【公众号回复“1024”,免费领取程序员赚钱实操经验】大家好,我是章鱼猫。今天给大家推荐一个开源的终端工具,非常漂亮,非常炫酷,当我们程序员在终端上敲命令行时,会有一种黑客的既视感,... 查看详情

知乎高颜值图片爬取(代码片段)

.katexdisplay:block;text-align:center;white-space:nowrap;.katex-display>.katex>.katex-htmldisplay:block;.katex-display>.katex>.katex-html>.tagposition:absolute;right:0px;.katexfont-style:normal 查看详情

一款高颜值的springboot快速开发框架,你用过没有

前言简介SpringBoot+Security+MyBatis+Thymeleaf+Activiti快速开发平台基于Layui的后台管理系统模板,扩展Layui原生UI样式,整合第三方开源组件,提供便捷快速的开发方式,延续LayuiAdmin的设计风格,持续完善... 查看详情

redis官方可视化工具,功能真心强大!高颜值(代码片段)

来源:blog.csdn.net/weixin_46902396/article/details/120807629/一、RedisInsight简介二、RedisInsight安装与使用1.物理安装2.Kubernetes安装3.RedisInsight基本使用一、RedisInsight简介RedisInsight是一个直观高效的RedisGUI管理工具,它可以对R 查看详情

“p图元祖”美图秀秀,如何撬动“高颜值”年轻人口袋?

人之爱美,是人之通性。而女人爱美,则是女人天性。从古至今,关于女人如何变美是永恒不变的话题。在这个风口下,催生了一门又一门或长久或短暂的颜值生意。而在互联网时代,现代女性对于美的追求... 查看详情

青春片总得差评,高颜值粉丝经济齐刷刷被打脸

靠偶像、颜值或回忆来兜售情怀,本身就是影视行业最大的误区,它只是消费自己的热爱者的热情,而不是粉丝经济真正要做到的路人转粉。650)this.width=650;"src="http://s4.51cto.com/wyfs02/M01/88/47/wKioL1ftzqfyL8lTAAInjKUfqew827.jpg"title="92a5659b03... 查看详情

beekeeperstudio:一款高颜值且免费的sql开发工具(代码片段)

文章目录BeekeeperStudio简介BeekeeperStudio安装BeekeeperStudio使用教程连接数据库文件关联SQL编辑器表格浏览器快捷键SQLTools工具大家好,我是只谈技术不剪发的Tony老师。今天给大家介绍一款简单易用而且美观的免费SQL客户端:Be... 查看详情

dcatadminv1.0.0发布-使用很少的代码快速构建一个功能完善的高颜值后台系统(代码片段)

...建工具,只需很少的代码即可快速构建出一个功能完善的高颜值后台系统。内置丰富的后台常用组件,开箱即用,让开发者告别冗杂的HTML代码,对后端开发者非常友好。在线演示站点|官方文档|Github主页(如果喜欢这个项目不妨... 查看详情