Dan*_*dez 1 variables vim shell
在vimscript中,我找不到将execute
函数的返回值保存到变量中的方法。
我想做以下事情:
let s = execute(":!echo dani")
echo s
Run Code Online (Sandbox Code Playgroud)
这应该返回: dani
Vim 不接受这一点。在我的设置中(使用 vim-airline 和其他 UI 插件),屏幕会显示所有内容,并在按下按键后恢复正常。
是否可以在 vimscript 中将函数调用的返回值保存到变量中,或者相反地将函数的返回值保存到变量中execute
?
谢谢 SO
execute()
是现代的替代品:redir
;它确实捕获了执行命令的所有输出。让我们仔细看看:
:let s = execute(":! echo dani") | echo strtrans(s)
^@:! echo dani^M^@dani^M^@
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,它抓住了整个命令和它的结果。如果您使用 plain :echo
,换行符并^@
掩盖完整输出(使用 会更好地看到它:echomsg
,它对特殊字符的解释较少)。
我认为您真正想要的只是执行的外部命令的输出(此处:)echo
。您可以使用system()
代替:!
:
:let s = system('echo dani') | echo strtrans(s)
dani^@
Run Code Online (Sandbox Code Playgroud)
尾随的换行符通常会像这样删除:
:let s = substitute(system('echo dani'), '\n\+$', '', '') | echo strtrans(s)
dani
Run Code Online (Sandbox Code Playgroud)