VimL:捕获`exec`命令的输出,在变量里面是可能的吗?

时间:2015-05-18 11:14:06

标签: vim

我有一些bash脚本,我需要从Vim脚本中检索它们的输出。可能吗?如果是,怎么样?

2 个答案:

答案 0 :(得分:7)

要执行外部命令并在Vim变量中捕获其输出,请使用system()

:let hostname = system('hostname')

通过配置的'shell'调用该命令;只要你的Bash脚本有一个正确的 shebang 行(#!/bin/bash),一切都应该没问题。

如果您最终想要将输出插入当前缓冲区,您也可以直接使用:read !{cmd}

:read !hostname

答案 1 :(得分:1)

作为替代方法,请注意let语句的默认签名是:

let {var} = {expr}

其中右侧必须是表达式。这意味着let无法捕获execute 命令的输出。换句话说,尝试:

let {var} = {cmd}

会产生错误。解决方法是使用redir命令,该命令具有以下语法:

redir => {var}
{cmd}
redir end

让我们看看它在实践中是如何运作的。首先尝试:

let somevar = echo "The current locale settings are: " . v:lang

返回错误 E15:表达式无效。现在:

redir => somevar
echo "The current locale settings are: " . v:lang
redir end 

错误消失,变量已成功分配,通过打印其值来验证:

echo somevar

带输出:

The current locale settings are: en_US.UTF-8