在Vim中捕获shell命令的输出
我正在尝试编写一个函数,该函数将接受一个gem名称,并根据Bundler显示的内容在该gem的目录中运行Ctrl-p。现在我被困在如何捕获shell命令的输出上 到目前为止,我已经:在Vim中捕获shell命令的输出,vim,Vim,我正在尝试编写一个函数,该函数将接受一个gem名称,并根据Bundler显示的内容在该gem的目录中运行Ctrl-p。现在我被困在如何捕获shell命令的输出上 到目前为止,我已经: function! GemCtrlP(gem_name) execute '!bundle list ' . a:gem_name endfunction 我想保存bundle调用的输出,然后通过管道将其传输到CtrlP。我可以做CtrlP部分,但我不确定如何捕获shell输出 有什么想法吗?可以使用:re
function! GemCtrlP(gem_name)
execute '!bundle list ' . a:gem_name
endfunction
我想保存bundle
调用的输出,然后通过管道将其传输到CtrlP。我可以做CtrlP部分,但我不确定如何捕获shell输出
有什么想法吗?可以使用
:redir
命令捕获任意vim命令。
对于shell命令,通常更容易使用system()
函数
请在上查看帮助
:h :redir
:h system
帮助中应该有足够的示例(或查看一些插件)。使用
:redir
命令可以捕获任意vim命令。
对于shell命令,通常更容易使用system()
函数
请在上查看帮助
:h :redir
:h system
帮助中应该有足够的示例(或查看一些插件)。Christian发布的内容的更全面版本:
function! GemCtrlP(gem_name)
let path = system('bundle list ' . a:gem_name . ' | tr -d "\n"')
execute 'CtrlP ' . path
endfunction
Christian发布的内容的更全面版本:
function! GemCtrlP(gem_name)
let path = system('bundle list ' . a:gem_name . ' | tr -d "\n"')
execute 'CtrlP ' . path
endfunction
看起来系统实际上显示了一个空字符或什么:
async_job-7ba2b1e64340^@
。有没有办法把多余的^@
去掉?我以ag.vim为例,但我似乎无法理解这些可能是二进制空值。最近的VIM被SOH(0x01)取代。您应该能够使用substitute()函数剥离那些只需将其导入tr@576i确实如此,但您并不总是希望将输出放入实际文档中。系统似乎实际显示了空字符或其他内容:async_job-7ba2b1e64340^@
。有没有办法把多余的^@
去掉?我以ag.vim为例,但我似乎无法理解这些可能是二进制空值。最近的VIM被SOH(0x01)取代。您应该能够使用substitute()函数剥离那些只需将其导入tr@576i确实如此,但您并不总是希望将输出放入实际文档中。