Can';t从vim使用fzf运行脚本

Can';t从vim使用fzf运行脚本,vim,fzf,vim-fzf,Vim,Fzf,Vim Fzf,我有一个bash脚本,它组装一些数据,然后通过fzf进行管道传输,供用户选择,然后操纵选择,然后将其打印到stdout 这将模拟脚本: #!/bin/sh echo hello | fzf | sed 's/h/j/g' 这在命令行中非常有效,但是当从vim运行它以包含在当前缓冲区中时,fzf TUI从不显示,并且我得到了结果中包含的ANSI转义序列: 我如何从vim运行命令并不重要。我试过:读!{cmd},:。!{cmd},甚至:让a=system({cmd}') 例如,我希望这能奏效:

我有一个bash脚本,它组装一些数据,然后通过fzf进行管道传输,供用户选择,然后操纵选择,然后将其打印到stdout

这将模拟脚本:

#!/bin/sh
echo hello | fzf | sed 's/h/j/g'
这在命令行中非常有效,但是当从vim运行它以包含在当前缓冲区中时,fzf TUI从不显示,并且我得到了结果中包含的ANSI转义序列:

我如何从vim运行命令并不重要。我试过
:读!{cmd}
:。!{cmd}
,甚至
:让a=system({cmd}')

例如,我希望这能奏效:

:read !echo hello | fzf | sed 's/h/j/g'
fzf似乎混淆了tty的标准输出

我知道这不是vim的限制,因为如果我用tty替换fzf来替代另一个交互式选择器,它就可以工作了


是否有fzf或vim选项可以实现此功能?

vim无法轻松处理交互式命令。如您所见,fzf输出大量代码来操作显示,而
read
期望得到原始结果

您可以使用
execute
来执行此操作,而不是直接使用
read
。 基于另一个答案()但为了使用fzf,我修改了@Joshch的解决方案以使用任意脚本,并检查它是否与fzf一起工作:

my-fzf-script.sh:

#/垃圾箱/垃圾箱
ls | fzf
还有事情的活力方面:

function! <SID>InteractiveFZFCommand()
    let tempfile=tempname()
    execute '!./my-fzf-script.sh >' . shellescape(tempfile)
    try
        silent execute 'read' tempfile
    finally
        call delete(tempfile)
    endtry
endfunction

command! -nargs=0 InteractiveFZFCommand call <SID>InteractiveFZFCommand()
函数!interactiveefzfcommand()
让tempfile=tempname()
执行'/my-fzf-script.sh>“。shellescape(临时文件)
尝试
静默执行“读取”临时文件
最后
调用删除(临时文件)
末日
端功能
命令-nargs=0 interactiveefzfcommand调用interactiveefzfcommand()

您可能想试试fzf vimplugin@d-ben knoble,这是一个我在vim之外运行的脚本,所以我希望避免使用vim版本和命令行版本。很抱歉,这没有理由不起作用。