在 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