如何在VIM中关闭FZF而不选择任何结果

6

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

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

目前,我按<Esc>进入正常模式然后输入:q来完成这个操作,但理想情况下,将它映射到一个键组合,例如<C-x>会更快。

如何映射仅针对FZF窗口的键绑定?或者是否有任何一个键组合可以关闭弹出窗口而无需任何其他操作?

谢谢。

3个回答

8

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将简单地返回,就好像什么也没有发生。

0

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

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

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

!echo只会在命令行中打印选项内容。由于该命令被静默执行,结果就是只关闭窗口。

虽然我不确定这个解决方案是否会产生一些副作用,但目前为止一切都还好。

以下是我的按键映射:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接