Korzystanie z polecenia vim split z wiersza poleceń, aby uzyskać 4 dzielenia na ćwiartki

20

Chcę otworzyć cztery pliki vim w wierszu poleceń:

vim file1 file2 file3

Chciałbym jednak, aby każdy plik był otwierany w osobnym podziale:

vim -c "split file1" -c "split file2" -c "split file3" file4

(Powyższe dzieli ekran w poziomie 4 razy)

Idealnie, co chciałbym zrobić, to podzielić ekran na 4 kwadraty, takie jak:

|-------|-------|
|       |       |
|       |       |
|-------|-------|
|       |       |
|       |       |
|-------|-------|

Wiem, jak to zrobić, gdy vim jest otwarty, ale nie mogę tego zrobić z wiersza poleceń (za pomocą vs). Jakieś pomysły? Wszystko, co próbuję, wygląda tak (lub inna odmiana):

|-------|-------|
|       |       |
|-------|       |
|       |       |
|-------|       |
|       |       |
|       |       |
|-------|-------|
sześćdziesiąt stóp
źródło

Odpowiedzi:

22

Możesz użyć polecenia „wincmd”, aby przejść do różnych okien, tak jakbyś naciskał CTRL + W.

vim file4 -c 'split file2' -c 'vsplit file1' -c 'wincmd j' -c 'vsplit file3'

Spowoduje to uporządkowanie plików jako:

file1   file2
file3   file4

Jak to działa: otwiera plik4. Dzieli się poziomo, tak aby plik 2 był nad nim. Dzieli się pionowo, tak że plik1 znajduje się po lewej stronie, przechodzi do następnego okna (plik1) i ponownie dzieli się pionowo.

rjh
źródło
7

Napisałem skrypt wykorzystujący te informacje, które automatycznie dzielą ekran zgodnie z życzeniem:

vimsp.py file1 file2 / file3

Prowadzi do

-----------
|f1  |f2  |
|    |    |
-----------
|file 3   |
|         |
-----------

Ponadto umieszczenie / przed wszystkimi plikami powoduje, że wszystkie są dzielone w pionie:

vimsp.py / file1 file2 file3

-------------
|file 1     |
-------------
|file 2     |
-------------
|file 3     |
-------------

https://gist.github.com/1376956

fahhem
źródło
1

Ściśle z wiersza poleceń:

vim -o3 <list of 9 files> -c:{vsp,vsp,wincmd\ j,vsp,vsp,wincmd\ j,vsp,vsp} \
  -c "windo execute 'argument ' . winnr()"

... otworzy 9 plików w siatce 3x3.

Możesz także napisać funkcję i dodać ją do swojego .vimrc, coś takiego może działać. Mam nadzieję, że doświadczony skrypter vim mógłby ważyć, ponieważ wiem, że to nie jest poprawne:

function! mysplit(...)
  execute sp #1
  execute sp #1
  execute vsp
  execute vsp
  execute wincmd j
  execute vsp
  execute vsp
  execute wincmd j
  execute vsp
  execute vsp
  % I'm not at all experienced with writing vim scripts, so
  % the syntax on the following line is almost certainly not
  % correct; this is conceptual only.
  execute windo execute 'argument ' . winnr()
endfunction

... następnie użyj go z wiersza poleceń:

vim <list of 9 files> -c ':execute mysplit()'
Brian Vandenberg
źródło