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

使用 neovim 的浮动窗口让你再次爱上 fzf

  •  1
     
  •   simple26 · 2019-04-13 11:56:59 +08:00 · 4621 次点击
    这是一个创建于 2079 天前的主题,其中的信息可能已经有所发展或是发生改变。

    fzf 是一个非常高效实用且美观的命令行工具,并且配置有对应的 vim 插件 fzf.vim, 相信很多人都用过。这里就不在赘述,如果你还没有用过,很推荐一试。

    自从 neovim 的浮动窗口 PR https://github.com/neovim/neovim/pull/6619 被合到 master 以后,很多插件都利用了这个特性实现了很多很酷的功能,比如 coc.nvim,另外 vim-which-keyvista.vim 也利用了这一特性 。

    浮动窗口的一个很大的特点就是不会像之前 split 的方式扰动你的窗口布局,晃动你的视线,而 fzf 也可以利用这一特性进一步提升体验!

    比如下面这个效果图,我们可以让 fzf 在中间进行显示,有点类似于 IDEA 的搜索窗口:

    fzf

    要实现上面的效果,需要配置 3 个地方。首先是 2 个配置项:

        " 让输入上方,搜索列表在下方
        let $FZF_DEFAULT_OPTS = '--layout=reverse'
    
        " 打开 fzf 的方式选择 floating window
        let g:fzf_layout = { 'window': 'call OpenFloatingWin()' }
    

    还有 1 个函数指定如何打开浮动窗口:

    function! OpenFloatingWin()
      let height = &lines - 3
      let width = float2nr(&columns - (&columns * 2 / 10))
      let col = float2nr((&columns - width) / 2)
    
      " 设置浮动窗口打开的位置,大小等。
      " 这里的大小配置可能不是那么的 flexible 有继续改进的空间
      let opts = {
            \ 'relative': 'editor',
            \ 'row': height * 0.3,
            \ 'col': col + 30,
            \ 'width': width * 2 / 3,
            \ 'height': height / 2
            \ }
    
      let buf = nvim_create_buf(v:false, v:true)
      let win = nvim_open_win(buf, v:true, opts)
    
      " 设置浮动窗口高亮
      call setwinvar(win, '&winhl', 'Normal:Pmenu')
    
      setlocal
            \ buftype=nofile
            \ nobuflisted
            \ bufhidden=hide
            \ nonumber
            \ norelativenumber
            \ signcolumn=no
    endfunction
    

    关于浮动窗口的更多信息,可以 :help api-floatwin.

    另外,如果你的浮动窗口设置高亮无效,看看是否有设置 g:fzf_colors,这可能会重置浮动窗口的高亮,有浮动窗口的话就不用设置了。

    因为还没有 release, 目前要体验这个特性的话需要自己从 neovim master 编译,macOS 用户直接 安装 HEAD 版本的 neovim 就行了。安装好 neovim,然后进行如上配置应该就可以了,对于 https://github.com/liuchengxu/space-vim 用户直接升级 space-vim 即可。

    13 条回复    2019-04-27 09:47:25 +08:00
    yuuko
        1
    yuuko  
       2019-04-13 13:38:26 +08:00
    不错
    bookit
        2
    bookit  
       2019-04-13 15:02:06 +08:00
    这样可以模拟多数现代编辑器的功能了,期待 ing
    BBCCBB
        3
    BBCCBB  
       2019-04-13 17:33:17 +08:00
    这个浮动窗口真是 nice
    FrankFang128
        4
    FrankFang128  
       2019-04-13 17:36:47 +08:00
    直接用 IDE 的路过,不想配这些东西了。
    genesislive
        5
    genesislive  
       2019-04-13 17:42:15 +08:00
    图片加载不出来
    glues
        6
    glues  
       2019-04-13 18:02:14 +08:00
    🐂🍺
    simple26
        7
    simple26  
    OP
       2019-04-13 18:37:38 +08:00
    @FrankFang128 我也用 IDE 各有所长
    yujincheng08
        8
    yujincheng08  
       2019-04-13 22:11:40 +08:00 via Android
    😉LanguageClient 也用上了,很爽
    omph
        9
    omph  
       2019-04-13 22:17:33 +08:00
    neovim 显示中文的时候,光标是错位的,很难编辑,vim 就没有问题,可惜了
    yujincheng08
        10
    yujincheng08  
       2019-04-13 22:24:13 +08:00 via Android
    @omph 我没这问题呀。是不是版本太低?👀
    omph
        11
    omph  
       2019-04-13 22:32:27 +08:00
    @yujincheng08 用的源里的,neovim 0.3.4-2,应该挺新的吧
    yujincheng08
        12
    yujincheng08  
       2019-04-13 22:33:32 +08:00 via Android
    @omph 我也是这个版本,但是没有问题。可能是字体原因?
    x1314aq
        13
    x1314aq  
       2019-04-27 09:47:25 +08:00
    要是能在编辑的同时支持动态收缩 floating windows 就更好了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2699 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 05:49 · PVG 13:49 · LAX 21:49 · JFK 00:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.