首页 > 解决方案 > 将“执行”函数的返回值保存到变量 vimscript

问题描述

在 vimscript 中,我找不到将execute函数的返回值保存到变量中的方法。

我想做以下事情:

let s = execute(":!echo dani")
echo s

这应该返回:dani

Vim 不接受这一点。在我的设置中(使用 vim-airline 和其他 UI 插件),屏幕将所有内容变为空白,并在按键后恢复正常。

vimscript 中是否可以将函数调用的返回值或函数的返回值保存到变量中execute

谢谢所以

标签: shellvariablesvim

解决方案


execute():redir;的现代替代品 它确实捕获了已执行命令的所有输出。让我们更仔细地看一下:

:let s = execute(":! echo dani") | echo strtrans(s)
^@:! echo dani^M^@dani^M^@

如您所见,它捕获了整个命令及其结果。如果你使用 plain :echo,换行符和^@模糊完整的输出(你会更好地看到它:echomsg,它对特殊字符的解释更少)。

我认为你真正想要的只是执行的外部命令的输出(这里:)echo。您可以使用system()而不是:!

:let s = system('echo dani') | echo strtrans(s)
dani^@

尾随换行符通常像这样被删除:

:let s = substitute(system('echo dani'), '\n\+$', '', '') | echo strtrans(s)
dani

推荐阅读