如何在 VIM 中不选择任何结果的情况下关闭 FZF

问题描述

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

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

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

)会快得多>

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

提前致谢

解决方法

此解决方案似乎默认有效:https://www.reddit.com/r/neovim/comments/4fxsdq/fzfvim_terminal_integration_questions/

简而言之:

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

,

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

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

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

,

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

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

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

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

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

这是我的键映射:

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...