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

Другие вопросы по тегам