Selecione vimenter autocmd's para executar com base em args

1

Estou tentando reduzir o número de coisas que preciso fazer quando abro o VIM. Eu tenho os três cenários a seguir que eu gostaria de explicar:

1. Abra o vim com um diretório especificado

vim .

Para este caso, eu gostaria de abrir o NERDTree, com isso no meu ~/.vimrc :

autocmd vimenter * NERDTree


2. Abra o vim com um diretório especificado, em um monitor grande

vim . --large

Aqui eu gostaria de abrir o NERDTree e fazer algumas divisões de tela:

autocmd vimenter * NERDTree
autocmd vimenter * wincmd w
autocmd vimenter * wincmd v
autocmd vimenter * wincmd v


3. Abra o vim com um nome de arquivo específico

vim ~/vimrc

Para este caso, gostaria de não executar nenhum dos autocmd s que mencionei acima.


Editar - Implementação final

Graças à resposta de FDinoff.

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

e execute-o com L=t vim . , vim . ou vim specific_file

    
por RyanB 16.06.2013 / 16:29

1 resposta

2

Você pode usar argc() e argv() para encontrar os argumentos para o vim no seu vimrc e definir os autocmds de acordo. Então, para o primeiro, você poderia fazer algo assim para abrir o NERDTree somente se o primeiro argumento for .

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

Para o monitor grande, eu acho que usar a variável shell seria a maneira correta de fazer isso, porque o vim acha que --large in vim --large é um argumento para vim não para o seu script. Eu não sei se há uma maneira de contornar isso.

Você pode fazer algo como vim -- . --large , mas o vim abre um buffer para um arquivo --large , que provavelmente não é o que você deseja.

    
por 16.06.2013 / 19:57

Tags