2

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

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

目前要做到这一点,我按下<Esc>以进入正常模式,然后:q但理想情况下将其映射到组合键会更快,例如<C-x>

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

提前致谢

4

3 回答 3

3

默认情况下,此解决方案似乎有效: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 中。

于 2021-05-25T19:44:36.923 回答
0

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

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

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

于 2021-03-01T16:44:43.550 回答
0

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

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

对我有用的解决方案是将 key 映射到 command silent exec "!echo"

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

不确定这个解决方案是否会产生一些副作用,但是,到目前为止一切似乎都还可以。

这是我的键映射:

let g:fzf_action = {
  \ 'ctrl-x': 'silent exec "!echo"',
  \ 'ctrl-h': 'split',
  \ 'ctrl-v': 'vsplit' }
于 2021-03-07T00:46:20.590 回答