V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
BBCCBB
V2EX  ›  程序员

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

  •  
  •   BBCCBB · 2021-06-02 23:28:23 +08:00 · 1944 次点击
    这是一个创建于 1273 天前的主题,其中的信息可能已经有所发展或是发生改变。
    1. 第一行蓝色部分不可编辑, 后面可以输入, 修改, 删除. 2.第 2+行还能显示选项(这个貌似就是一行行的文本, 只是设置了不可编辑, 然后映射了快捷键只能上下滚动选择)

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

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

    IgniteWhite
        1
    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
        2
    BBCCBB  
    OP
       2021-06-03 08:45:40 +08:00
    @IgniteWhite leaderf 用 python 写了大部分, 但核心的查找算法还是 C 写的? 可能这才是快的理由.

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

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

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

    2. 有了 terminal 特性后, 就直接通过 terminal 实现.
    BBCCBB
        8
    BBCCBB  
    OP
       2021-06-06 23:15:12 +08:00
    第一个关于使用 quickfix 的说法是错误的 .. 擦
    BBCCBB
        9
    BBCCBB  
    OP
       2021-06-07 23:52:55 +08:00
    按照 ctrlp 的实现方式, 应该就是 new 一个 buf, 然后给这个 buf 绑定各种快捷键和事件. 用完 close 掉.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5613 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 06:43 · PVG 14:43 · LAX 22:43 · JFK 01:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.