要执行外部命令并在Vim变量中捕获其输出,请使用system():
:let hostname = system('hostname')
Run Code Online (Sandbox Code Playgroud)
通过配置调用该命令'shell'; 只要你的Bash脚本有一个合适的shebang行(#!/bin/bash),一切都应该没问题.
如果您最终想要将输出插入当前缓冲区,您也可以:read !{cmd}直接使用:
:read !hostname
Run Code Online (Sandbox Code Playgroud)
作为替代方法,请注意该let语句的默认签名是:
let {var} = {expr}
Run Code Online (Sandbox Code Playgroud)
其中右侧必须是一个表达式。这意味着 无法捕获命令let的输出。换句话说,尝试:execute
let {var} = {cmd}
Run Code Online (Sandbox Code Playgroud)
会产生错误。解决方法是使用该redir命令,其语法如下:
redir => {var}
{cmd}
redir end
Run Code Online (Sandbox Code Playgroud)
让我们看看它在实践中是如何运作的。第一次尝试:
let somevar = echo "The current locale settings are: " . v:lang
Run Code Online (Sandbox Code Playgroud)
返回错误E15:无效表达式。现在有:
redir => somevar
echo "The current locale settings are: " . v:lang
redir end
Run Code Online (Sandbox Code Playgroud)
错误消失并且变量已成功分配,这可以通过打印其值来验证:
echo somevar
Run Code Online (Sandbox Code Playgroud)
与输出:
The current locale settings are: en_US.UTF-8
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
778 次 |
| 最近记录: |