neovim floating window 中如何实现 fzf 的这种输入并展示搜索结果的 UI 呢?

2021-06-02 23:28:23 +08:00
 BBCCBB
  1. 第一行蓝色部分不可编辑, 后面可以输入, 修改, 删除. 2.第 2+行还能显示选项(这个貌似就是一行行的文本, 只是设置了不可编辑, 然后映射了快捷键只能上下滚动选择)

这样的一套 ui 实现下来还是非常麻烦...

看 leaderf 的 cli.py 的代码, 看懵了 😂

1940 次点击
所在节点    程序员
9 条回复
IgniteWhite
2021-06-03 05:38:39 +08:00
不会写……介绍一下 Neovim 的浮窗现状吧。

LeaderF 除了用 vimscript,大部分用 Python 写,性能比 fzf 要好。

后面 Neovim 0.5+会着力发展 LuaJIT,参见
https://github.com/neovim/neovim/wiki/FAQ#why-embed-lua-instead-of-x
根据官方说法:Lua 会和 Neovim 深度融合,作为 C 的后备语言。LuaJIT 是最快的运行环境之一,达 Python 速度的十倍以上。可想而知,以后用 Lua 开法 Neovim 插件是原生而且快速的。

一个(几乎完全)使用 Lua 开法的 Neovim 插件 telescope:
https://github.com/nvim-telescope/telescope.nvim
可以说是目前最酷炫的浮窗插件,在 Neovim core 的基础上扩展出了文件浏览,Git,LSP,集成了 Treesitter (下一代的 parser )。作者经常在油管上直播解说写代码,厉害的同志们可以去理解一下。
BBCCBB
2021-06-03 08:45:40 +08:00
@IgniteWhite leaderf 用 python 写了大部分, 但核心的查找算法还是 C 写的? 可能这才是快的理由.

fzf 用 go 写的. 不会比 python 慢..
BBCCBB
2021-06-03 14:16:02 +08:00
等 Big old
IgniteWhite
2021-06-03 15:35:23 +08:00
@BBCCBB 你说的是对的,LeaderF 核心部分是用 C 写的。和 fzf 的比较好像是算法优势,作者和其他人在这个帖子有说一点:
/t/522570

就不多歪楼了,同等大佬
BBCCBB
2021-06-03 20:40:25 +08:00
@Yggdroot Big old. 请赐教😅
BBCCBB
2021-06-05 13:56:32 +08:00
从 fzf 仓库的 fzf.vim 来看, 这种效果是通过 terminal 库实现的, fzf 用 golang 写的 terminal ui. 在 vim 里只是通过调用 termopen("fzf --prompt 'Line>'") 这种方式来用. 就是一个 terminal 的包装.

但还有很多库有这种效果, 怎样实现还要继续看.
BBCCBB
2021-06-06 13:27:37 +08:00
1. 没有 terminal 特性之前, 应该是通过 quickfix 来实现的, 前缀占位符可以通过 input('>') 函数设置.

2. 有了 terminal 特性后, 就直接通过 terminal 实现.
BBCCBB
2021-06-06 23:15:12 +08:00
第一个关于使用 quickfix 的说法是错误的 .. 擦
BBCCBB
2021-06-07 23:52:55 +08:00
按照 ctrlp 的实现方式, 应该就是 new 一个 buf, 然后给这个 buf 绑定各种快捷键和事件. 用完 close 掉.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/780993

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX