Vim - як запустити команду відразу при запуску vim?


103

У мене є плагін (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, оскільки після цього у мене було пробіл.
Caroline

спробував використати цей підхід для виклику: AnsiEsc, однак, він насправді не мав бажаного ефекту - будь-який шанс ви знаєте, як виявити, чи була запущена команда типу: AnsiEsc раніше?
серуп

89

Також є -c прапор vim. Я роблю це в моєму конфігурації tmuxp, щоб vim починався з вертикального розбиття:

vim -c "vnew"

Принаймні за допомогою neovim ви також можете одночасно відкрити файл:

nvim -c "colorscheme mustang" some_file

6
Спасибі, це те, що я шукав. Іноді мені просто потрібно запустити тимчасову команду запуску на зразок розділення, як ви показали, і не потрібно зберігати це у моєму файлі
vimrc

Файл не вдається відкрити:vim -c ':colo default' test.txt
van abel

1
Ідеально підходить і для мене - я використовую, xolox/vim-notesі я хочу функцію риби, яка відкриє Vim новою нотою, готовою до роботи.
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.
Бенуа
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.