如何从 shell 运行 Vim 命令?

如何从 shell 运行 Vim 命令?

这可能是一个愚蠢的问题,但请忍耐一下。

我正在自动执行设置新工作环境时的一些常规工作,并希望自动执行 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"

相关内容