不能 运行 来自 vim 的带有 fzf 的脚本
Can't run a script with fzf from vim
我有一个 bash 脚本,可以组装一些数据,然后通过 fzf 将其通过管道传输供用户选择,然后操纵选择,然后将其打印到标准输出。
这模拟脚本:
#!/bin/sh
echo hello | fzf | sed 's/h/j/g'
这在命令行中工作得很好,但是当 运行从 vim 将它包含在当前缓冲区中时,fzf TUI 永远不会显示,我得到 ANSI 转义序列包含在结果:
我如何 运行 来自 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()
我有一个 bash 脚本,可以组装一些数据,然后通过 fzf 将其通过管道传输供用户选择,然后操纵选择,然后将其打印到标准输出。
这模拟脚本:
#!/bin/sh
echo hello | fzf | sed 's/h/j/g'
这在命令行中工作得很好,但是当 运行从 vim 将它包含在当前缓冲区中时,fzf TUI 永远不会显示,我得到 ANSI 转义序列包含在结果:
我如何 运行 来自 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()