vim - 无法使用 vim 中的 fzf 运行脚本

标签 vim fzf vim-fzf

我有一个 bash 脚本,它可以组装一些数据,然后通过 fzf 将其通过管道传输供用户选择,然后操纵选择,然后将其打印到标准输出。

这模拟了脚本:

#!/bin/sh
echo hello | fzf | sed 's/h/j/g'

这在命令行中效果很好,但是当从 vim 运行它以包含在当前缓冲区中时,fzf TUI 永远不会显示,结果中包含 ANSI 转义序列:

enter image description here

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

例如,我希望它能工作:

:read !echo hello | fzf | sed 's/h/j/g'

fzf 似乎混淆了 tty 的标准输出。

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

是否有 fzf 或 vim 选项来完成这项工作?

最佳答案

Vim 并没有那么容易地处理交互式命令。如您所见,fzf 输出大量代码来操作显示,read 期待原始结果。

您可以使用 execute 而不是直接使用 read 来执行此操作。 建立另一个答案 ( Capture the output of an interactive script in vim ) 但改变一些东西以与 fzf 一起工作,我修改了@joshtch 的解决方案以与任意脚本一起工作,并检查它是否与 fzf 一起工作:

我的-fzf-script.sh:

#!/bin/sh
ls | fzf

还有 vim 的一面:

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()

关于vim - 无法使用 vim 中的 fzf 运行脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58441086/

相关文章:

vim - 在 VIM 中更改 FZF 的触发器

vim - 类似FZF的方式快速切换目录?在 Vim FZF 中包含隐藏文件?

vim - 在拆分而不是 float 窗口中打开 fzf.vim

shell - 在 Golang 中需要交互式输入的测试执行程序

vim - 如何分割已经打开的gvim文件

vim - 在Vim中的Web浏览器中打开当前文件

regex - vim 语法匹配错误([A-Z] 匹配所有字母字符)

fuzzy-search - 如何将 fzf 查询复制到命令行?

neovim - 我的 neovim 望远镜配置做错了什么

vim - slimv.vim::无效的自动插入括号