1

Я пытаюсь уменьшить количество вещей, которые мне нужно сделать, когда я открываю 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 ответ1

2

Вы можете использовать argc() и argv() чтобы найти аргументы vim в вашем vimrc и соответственно установить autocmds. Итак, для первого вы можете сделать что-то подобное, чтобы открыть NERDTree только в том случае, если первый аргумент есть .

if argc() == 1 && argv(0) == '.'
    autocmd vimenter * NERDTree
endif

Для большого монитора я думаю, что использование переменной оболочки было бы правильным способом сделать это, потому что vim считает, что --large в vim --large является аргументом для vim, а не для вашего скрипта. Я не знаю, есть ли способ обойти это.

Вы могли бы сделать что-то вроде vim -- . --large но затем vim открывает буфер для файла --large что, вероятно, не то, что вы хотите.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .