首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VimL:捕获‘VimL’命令的输出,在变量中是可能的吗?

VimL:捕获‘VimL’命令的输出,在变量中是可能的吗?
EN

Stack Overflow用户
提问于 2015-05-18 11:14:05
回答 2查看 1.9K关注 0票数 5

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-18 11:26:54

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

代码语言:javascript
复制
:let hostname = system('hostname')

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

如果最终希望将输出插入当前缓冲区,则可以直接使用:read !{cmd}

代码语言:javascript
复制
:read !hostname
票数 11
EN

Stack Overflow用户

发布于 2018-02-09 23:15:33

作为另一种方法,请注意,let语句的默认签名是:

代码语言:javascript
复制
let {var} = {expr}

右手边必须是一个表情。这意味着let不能捕获execute命令的输出。换句话说,试图:

代码语言:javascript
复制
let {var} = {cmd}

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

代码语言:javascript
复制
redir => {var}
{cmd}
redir end

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

代码语言:javascript
复制
let somevar = echo "The current locale settings are: " . v:lang

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

代码语言:javascript
复制
redir => somevar
echo "The current locale settings are: " . v:lang
redir end 

错误消失,变量被成功分配,并通过打印其值进行验证:

代码语言:javascript
复制
echo somevar

产出:

代码语言:javascript
复制
The current locale settings are: en_US.UTF-8
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30301717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档