这可能是一个愚蠢的问题,但请忍耐一下。
我正在自动执行设置新工作环境时的一些常规工作,并希望自动执行 Vim 命令:BundleInstall
(用于安装我所有的 Vim 插件)。
可以从 shell 运行它吗?
或者,是否可以让脚本运行 Vim,执行:BundleInstall
,等待它完成然后退出?
谢谢。
答案1
从vim(1)
手册页中:
+{命令}
-c {命令}
第一个文件读取后将执行 {command}。{command} 被解释为 Ex 命令。如果 {command} 包含空格,则必须用双引号括起来(这取决于所使用的 shell)。示例:Vim "+set si" main.c
注意:您最多可以使用 10 个“+”或“-c”命令。
答案2
您可以像这样执行命令:
vim -E -c BundleInstall -c q
这将避免在你的终端中打开 Vim 窗口。
笔记:我的第一个答案包含了-s
另一个应用程序所需的选项,但在这里是不正确的,因为它阻止了 Vim 的大部分初始化,包括获取定义命令的插件BundleInstall
。
答案3
虽然上面的 vim 特定方法是正确的方法,但你始终可以使用更通用的方法,例如自动预期。
答案4
对于需要 vim 完全加载(就像您手动启动它一样)的情况,这样做有效:
vim -c "autocmd! CursorHold * <commands to run>"
例如,我想将的输出:map
从 shell 重定向到一个文件,但我想捕获vim 航空公司仅在显示其标签行(顶部的行显示所有打开的缓冲区名称)后才创建。因为它似乎是异步执行此操作的,所以简单地运行-c
重定向到文件并没有给它时间进行映射。可能有更好的方法,但这对我来说很有效,特别是因为我已经updatetime
设置为100
(0.1 秒),这会影响事件触发的时间CursorHold
。默认情况下,vim 将其设置为 4 秒。
vim -c "autocmd! CursorHold * set nomore | redir! > mapNew | map | redir END | q"