我有一些bash脚本,我需要从Vim脚本中检索它们的输出。可能吗?如果是,怎么样?
答案 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