【问题标题】:How to close FZF without select any result in VIM如何在 VIM 中不选择任何结果而关闭 FZF
【发布时间】:2021-02-28 23:29:38
【问题描述】:

我使用 fzf.vim 在 neovim 的项目中快速查找文件。

有时因为我找不到我要找的东西,或者因为我在打开新文件之前忘记做某事,我需要取消并关闭弹出窗口而不选择任何结果。

目前,我按<Esc> 进入正常模式,然后按:q,但理想情况下,将其映射到诸如<C-x> 之类的组合键会更快

如何映射仅针对 FZF 窗口的键绑定?或者是否有任何组合键已经关闭弹出窗口而没有任何进一步的操作?

提前致谢

【问题讨论】:

    标签: vim neovim fzf vim-fzf


    【解决方案1】:

    这个解决方案似乎默认工作:https://www.reddit.com/r/neovim/comments/4fxsdq/fzfvim_terminal_integration_questions/

    简介:

    ESC , CTRL-C , CTRL-G 和 CTRL-Q 默认关闭 fzf,没有 需要进入正常模式并删除缓冲区。你甚至可以 使用 fzf 的 --bind 选项自定义键绑定;例如, :FZF --bind ctrl-p:abort 或者你可以把它放在你的 $FZF_DEFAULT_OPTS 中。

    【讨论】:

      【解决方案2】:

      对于 vim 我仍然对这种解决方案感到好奇,但在我的 zsh 中我有这个功能:

      # source:https://stackoverflow.com/a/65375231/2571881
      function vif() {
          local fname
          fname=$(fzf) || return
          vim "$fname"
      }
      

      如果$fname从fzf接收到一个文件名,zsh运行下一行,即vim调用$fname,否则zsh就像什么都没做一样简单地返回。

      【讨论】:

        【解决方案3】:

        我没有找到合适的方法来解决这个问题,但是我找到了一种可能适用于遇到相同问题的其他人的解决方法。

        使用变量g:fzf_action,我们可以将键映射到 fzf 中的操作。这样,我们就可以编写一个命令,fzf 会将选择的路径附加到命令中。 在这种情况下,最重要的是它会作为副作用关闭窗口。

        对我有用的解决方案是将密钥映射到命令 silent exec "!echo"

        !echo 只会在命令行中打印选择。由于命令是静默执行的,结果是只关闭了窗口。

        虽然不确定此解决方案是否会产生一些副作用,但目前看来一切正常。

        这是我的键映射:

        let g:fzf_action = {
          \ 'ctrl-x': 'silent exec "!echo"',
          \ 'ctrl-h': 'split',
          \ 'ctrl-v': 'vsplit' }
        

        【讨论】:

          猜你喜欢
          • 2015-02-25
          • 2018-08-09
          • 1970-01-01
          • 2022-10-12
          • 2010-12-19
          • 1970-01-01
          • 1970-01-01
          • 2022-06-17
          • 2014-03-27
          相关资源
          最近更新 更多