shell - 将 "execute"函数的返回值保存到变量 vimscript

标签 shell variables vim

在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/

相关文章:

bash - 如何在 bash shell 脚本中添加整数和 float

linux - 什么是./lks.sh : Permission denied in Linux when running a shell script?

ios - Swift - 在 for 循环中创建具有不同名称的变量

objective-c - 从另一个类实现中获取 CGFloat 实例变量

python - Omnicomplete 包含文档中的函数定义

python - ImportError ropevim 在 vi​​m 中使用 ropevim 插件

python-3.x - 如何在 Python 中的终端密码提示中输入密码

shell - 逐行读取并写入另一个文件shell脚本

c - 如何在 if 语句中初始化一个变量并在 if 语句之外使用它

macos - 如何将所选内容复制到 OS X 剪贴板