将“执行”函数的返回值保存到变量vimscript中

时间:2018-10-25 00:48:18

标签: shell variables vim

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

我想执行以下操作:

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

这应该返回:dani

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

在vimscript中是否可以将函数调用的返回或相反地将execute函数的返回保存到变量中?

非常感谢

1 个答案:

答案 0 :(得分:4)

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

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

如您所见,它捕获 entire 命令 及其结果。如果您使用普通的:echo,则换行符和^@会使完整输出模糊(使用:echomsg会更好,因为它对特殊字符的解释较少)。

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

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

该尾随换行符通常是这样删除的:

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