Vim-如何在启动Vim时立即运行命令?


103

我有一个插件(FindFile.vim),:FindFileCache .每当我启动vim时都需要运行该插件来收集文件缓存以便快速打开。

每当vim启动时,我如何编写运行一次的命令?

Answers:


145

保留配置内容的最佳位置是.vimrc 文件。但是,它的来源为时过早,请检查:h startup

At startup, Vim checks environment variables and files and sets values
accordingly.  Vim proceeds in this order:

1. Set the 'shell' and 'term' option                *SHELL* *COMSPEC* *TERM*
2. Process the arguments
3. Execute Ex commands, from environment variables and/or files *vimrc* *exrc*
4. Load the plugin scripts.                                 *load-plugins*
5. Set 'shellpipe' and 'shellredir'
6. Set 'updatecount' to zero, if "-n" command argument used
7. Set binary options
8. Perform GUI initializations
9. Read the viminfo file
10. Read the quickfix file
11. Open all windows
12. Execute startup commands

如您所见,您的.vimrc将在插件之前加载。如果放入:FindFileCache .该命令,将发生错误,因为该命令尚不存在。(一旦在步骤4中加载了插件,该文件就会存在。)

为了解决这个问题,而不是直接执行命令,而是创建一个自动命令。发生事件时,自动命令会执行某些命令。在这种情况下,VimEnter事件看起来合适(来自:h VimEnter):

                                                    *VimEnter*
VimEnter                    After doing all the startup stuff, including
                            loading .vimrc files, executing the "-c cmd"
                            arguments, creating all windows and loading
                            the buffers in them.

然后,将这一行放在您的.vimrc中

autocmd VimEnter * FindFileCache .

2
+1,这应该是公认的答案,它比为一个命令创建单独的文件干净得多。

还要补充一点,我在E172上遇到了这个问题,因为之后有一个空格。
卡罗琳

尝试使用这种方法来调用:AnsiEsc,但是它实际上并没有达到预期的效果-您是否有机会知道如何检测诸如:AnsiEsc之类的命令之前是否曾运行过?
serup '16

89

还有vim的-c标志。我在tmuxp配置中执行此操作,以使vim以垂直分割开始:

vim -c "vnew"

至少使用neovim,您还可以同时打开一个文件:

nvim -c "colorscheme mustang" some_file

6
谢谢,这就是我想要的。有时,我只需要运行如split这样的临时启动命令即可,而无需将其存储在我的vimrc文件中
verboze 2015年

无法打开文件:vim -c ':colo default' test.txt
van abel

1
对我来说也很完美-我正在使用xolox/vim-notes,我想要一个带Vif功能的鱼功能,可以打开新的音符。
wsams,

13

创建一个名为的文件~/.vim/after/plugin/whatever_name_you_like.vim并填充为

FindFileCache .

在vim目录中读取和执行脚本的顺序在下面描述。 :help 'runtimepath'


2

要获得比其他答案还要晚但仍在启动后才使用的功能,请在.vimrc中使用计时器。例如,.vimrc中的此代码在启动后等待半秒钟,然后再设置变量。

function DelayedSetVariables(timer)
    let g:ycm_filetype_blacklist['ignored'] = 1
endfunction
let timer=timer_start(500,'DelayedSetVariables')

(示例中的变量是YouCompleteMe插件的黑名单。我认为,该插件会异步启动其他进程,然后创建变量,但在vim启动时还没有准备好。当我尝试执行以下操作时,该变量不存在在.vimrc,之后文件或VimEnter事件中设置它。这某种程度上是针对我的Windows系统的,YCM文档说.vimrc应该可以用于设置选项。)


1

放入FindFileCache您的.vimrc

自动加载命令是不同的,不适用于您的方案。


感谢您指出,实际上plugin不是autoload
Benoit
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.