Выберите 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
что, вероятно, не то, что вы хотите.