Can';t从vim使用fzf运行脚本
我有一个bash脚本,它组装一些数据,然后通过fzf进行管道传输,供用户选择,然后操纵选择,然后将其打印到stdout 这将模拟脚本: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}') 例如,我希望这能奏效:
#!/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版本和命令行版本。很抱歉,这没有理由不起作用。