在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
关于shell - 将 "execute"函数的返回值保存到变量 vimscript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52979801/