Seleziona vimenter autocmd da eseguire sulla base di args


1

Sto cercando di ridurre il numero di cose che devo fare quando apro VIM. Ho i seguenti tre scenari di cui vorrei tenere conto:

1. Apri vim con una directory specificata

vim .

Per questo caso, vorrei aprire NERDTree, con questo nel mio ~/.vimrc:

autocmd vimenter * NERDTree


2. Apri vim con una directory specificata, su un monitor di grandi dimensioni

vim . --large

Qui vorrei aprire NERDTree e fare alcune suddivisioni dello schermo:

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


3. Apri vim con un nome file specifico

vim ~/vimrc

Per questo caso, vorrei non eseguire nessuno dei messaggi di autocmdcui sopra.


Modifica: implementazione finale

Grazie alla risposta di 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

ed eseguirlo con L=t vim ., vim .ovim specific_file

Risposte:


2

Puoi usare argc()e argv()per trovare gli argomenti per vim nel tuo vimrc e impostare di conseguenza gli autocmds. Quindi per il primo potresti fare qualcosa del genere per aprire NERDTree solo se il primo argomento è.

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

Per il monitor di grandi dimensioni penso che usare la variabile shell sarebbe il modo corretto per farlo perché Vim pensa che --largein vim --largesia un argomento per vim non al tuo script. Non so se c'è un modo per aggirare questo.

Potresti fare qualcosa del genere vim -- . --largema poi vim apre un buffer per un file --largeche probabilmente non è quello che vuoi.


Grazie! Sto aggiornando la domanda con la mia implementazione finale.
RyanB,

@RyanB Puoi anche solo definire Lnel tuo bashrc in modo da non doverlo digitare ogni volta.
FDinoff,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.