在vimscript中,我找不到将execute
函数的返回值保存到变量中的方法。
我想执行以下操作:
let s = execute(":!echo dani")
echo s
这应该返回:dani
Vim不接受这一点。在我的设置中(使用vim-airline和其他UI插件),屏幕将空白所有内容,并在按键时恢复正常。
在vimscript中是否可以将函数调用的返回或相反地将execute
函数的返回保存到变量中?
非常感谢
答案 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