Выберите vimenter autocmd для запуска на основе аргументов
Я пытаюсь уменьшить количество вещей, которые мне нужно сделать, когда я открываю VIM. У меня есть три следующих сценария, которые я хотел бы объяснить:
1. Откройте vim с указанным каталогом
vim .
Для этого случая я хотел бы открыть NERDTree, с этим в моем ~/.vimrc:
autocmd vimenter * NERDTree
2. Откройте vim с указанным каталогом на большом мониторе
vim . --large
Здесь я хотел бы открыть NERDTree, а также сделать несколько разделений экрана:
autocmd vimenter * NERDTree
autocmd vimenter * wincmd w
autocmd vimenter * wincmd v
autocmd vimenter * wincmd v
3. Откройте vim с определенным именем файла
vim ~/vimrc
В этом случае я бы не хотел запускать autocmdс, что я упоминал выше.
Редактировать - Окончательная реализация
Благодаря ответу Ф.Диноффа.
if argc() == 1 && arv(0) == '.' " `vim .` called
autocmd vimenter * NERDTree " Start up NERDTree
autocmd vimenter * wincmd w " Jump to split that file is open in
if !empty($L)
autocmd vimenter * wincmd v
autocmd vimenter * wincmd v
endif
endif
и запустить его с L=t vim ., vim ., или же vim specific_file
1 ответ
Ты можешь использовать argc() а также argv() чтобы найти аргументы vim в вашем vimrc и соответственно установить autocmds. Таким образом, для первого вы можете сделать что-то подобное, чтобы открыть NERDTree, только если первый аргумент .
if argc() == 1 && argv(0) == '.'
autocmd vimenter * NERDTree
endif
Для большого монитора я думаю, что использование переменной оболочки было бы правильным способом сделать это, потому что vim считает, что --large в vim --large является аргументом для vim, а не для вашего сценария. Я не знаю, есть ли способ обойти это.
Вы могли бы сделать что-то вроде vim -- . --large но тогда vim открывает буфер для файла --large что, вероятно, не то, что вы хотите.