将函数"execute"返回值保存到变量 vimscript 中



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

我想做以下几点:

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

这应该返回:dani

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

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

谢谢所以

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

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

如您所见,它捕获了整个命令及其结果。如果你使用普通:echo,换行符和^@会掩盖完整的输出(你会在:echomsg中看到它,它对特殊字符的解释较少(。

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

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

该尾随换行符通常按如下方式删除:

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

最新更新