Vim - как запустить команду сразу при запуске vim?


104

У меня есть плагин (FindFile.vim), который должен запускаться :FindFileCache .всякий раз, когда я запускаю vim, чтобы собрать кеш файлов для быстрого открытия .. Я должен запускать его каждый раз, когда я запускаю vim.

Как я могу написать команду, которая запускается один раз при каждом запуске vim?

Ответы:


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

89

Также есть флаг -c для vim. Я делаю это в своей конфигурации tmuxp, чтобы vim начинался с вертикального разделения:

vim -c "vnew"

По крайней мере, с neovim вы также можете одновременно открывать файл:

nvim -c "colorscheme mustang" some_file

6
Спасибо, это то, что я искал. Иногда мне просто нужно запустить временную команду запуска, например, split, как вы показали, и не нужно хранить ее в моем файле vimrc
verboze

Не удается открыть файл:vim -c ':colo default' test.txt
van abel

1
Идеально подходит для меня тоже - я использую xolox/vim-notesи хочу функцию рыбы, которая открывает Vim с новой готовой заметкой.
wsams 05

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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.