我使用fzf.vim在neovim中快速查找项目中的文件。
有时候要么因为找不到想要的文件,要么因为在打开新文件前忘记做某些事情,我需要取消并关闭弹出窗口而不选择任何结果。
目前,我按<Esc>
进入正常模式然后输入:q
来完成这个操作,但理想情况下,将它映射到一个键组合,例如<C-x>
会更快。
如何映射仅针对FZF窗口的键绑定?或者是否有任何一个键组合可以关闭弹出窗口而无需任何其他操作?
谢谢。
对于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' }