Vim - как запустить команду сразу при запуске vim? - PullRequest
88 голосов
/ 25 июля 2011

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

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

Ответы [ 5 ]

127 голосов
/ 26 июля 2011

Лучшее место для хранения ваших настроек - это файл .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 .
76 голосов
/ 07 января 2015

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

vim -c "vnew"
13 голосов
/ 25 июля 2011

Создайте файл с именем ~/.vim/after/plugin/whatever_name_you_like.vim и заполните его

FindFileCache .

Порядок, в котором сценарии читаются и выполняются в каталогах vim, описан в :help 'runtimepath'

2 голосов
/ 15 мая 2018

Чтобы получить даже позже, чем другие ответы, но сразу после запуска, используйте таймер в .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 голос
/ 25 июля 2011

Поместите FindFileCache в свой .vimrc.

Команды автозагрузки отличаются и не будут работать для вашего сценария.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...