shell - 将“执行”函数的返回值保存到变量 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^@
如您所见,它捕获了整个命令及其结果。如果你使用 plain :echo
,换行符和^@
模糊完整的输出(你会更好地看到它:echomsg
,它对特殊字符的解释更少)。
我认为你真正想要的只是执行的外部命令的输出(这里:)echo
。您可以使用system()
而不是:!
:
:let s = system('echo dani') | echo strtrans(s)
dani^@
尾随换行符通常像这样被删除:
:let s = substitute(system('echo dani'), '\n\+$', '', '') | echo strtrans(s)
dani
推荐阅读
- react-native - 如何防止 react-native-webview 中的默认选择工具提示
- angular - 您提供了“未定义”,其中 http get 中预期的流在 Angular 7 中
- react-native - 当我滚动时,react-native SectionList 无法滚动到位置
- slack - 是否有任何关于 slack 应用程序重新安装的事件以及在更改时更改机器人用户令牌的可能性?
- java - 无法解析 org.telegram:telegrambots:4.4.0
- linux-kernel - ebpf 加载器之间的主要区别
- python - 如何根据条件移动数据框中的行
- sql - 如何从两个表中选择两列并将它们插入到具有两列的单个表中
- php - 需要帮助让 elasticsearch 过滤器与 laravel 一起使用
- python-3.x - 如何从 Python3 列表中的不同行获取输入?