如何从shell运行Vim命令?


12

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

我正在自动化一些我在设置新工作环境时所做的常规工作,并且想自动化Vim命令:BundleInstall(用于安装我的所有Vim插件)。

是否可以从Shell运行此程序?

另外,是否可以让脚本运行Vim,execute :BundleInstall,等到完成并退出?

谢谢。

Answers:


14

vim(1)手册页:

+ {command}

-c {命令}

在读取第一个文件之后,将执行{command}。{command}被解释为一个Ex命令。如果{command}包含空格,则必须用双引号将其引起来(这取决于所使用的shell)。示例:Vim“ + set si” main.c

注意:最多可以使用10个“ +”或“ -c”命令。


3
谢谢!我知道我会觉得很蠢...:-/为我提供了正确的机会,因为他没有仔细阅读手册。我最终使用vim +BundleInstall +qall!
2012年

4

您可以像这样执行命令:

vim -E -c BundleInstall -c q

这样可以避免在终端中打开Vim窗口。

注意:我的第一个答案包括了-s我需要用于另一个应用程序的选项,但是在这里是不正确的,因为它阻止了Vim的许多初始化,包括寻找定义BundleInstall命令的插件。


1
谢谢,但是由于某种原因,它对我不起作用。
2012年

1
现在我明白了。我忘记了-s它不仅抑制了某些消息-还抑制了初始化-因此并没有提供BundleInstall的定义。解决该问题的一种方法是在第一个选项之前添加这样的选项-c--cmd 'runtime plugin/bundle.vim'。编辑该文件名以适合。请参阅:help -s-ex
garyjohn


0

对于需要像手动启动一样完全加载vim的情况,可以这样做:

vim -c "autocmd! CursorHold * <commands to run>"

例如,我想将:mapshell 的输出重定向到一个文件,但是我想捕获vim-airline仅在显示其标签线(顶部的行显示所有缓冲区名称已打开)之后创建的映射。因为它似乎可以这种异步方式,仅运行-c重定向到文件并没有给它时间进行映射。可能有更好的方法,但这对我有用,尤其是因为我已经updatetime设置为100(0.1秒),这会影响CursorHold事件触发的时间。默认情况下,vim将其设置为4秒。

vim -c "autocmd! CursorHold * set nomore | redir! > mapNew | map | redir END | q"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.