Usando o comando vim split na linha de comando para obter divisões de 4 quartos

20

Quero abrir quatro arquivos vim na linha de comando:

vim file1 file2 file3

Mas eu gostaria que cada arquivo fosse aberto em uma divisão separada:

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

(O exemplo acima divide a tela horizontalmente 4 vezes)

Idealmente, o que eu gostaria de fazer é dividir a tela em 4 quadrados, como:

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

Eu sei como fazer isso quando o vim estiver aberto, mas não consigo fazer isso na linha de comando (usando vs). Alguma ideia? Tudo o que eu tento acaba ficando assim (ou uma variação diferente):

|-------|-------|
|       |       |
|-------|       |
|       |       |
|-------|       |
|       |       |
|       |       |
|-------|-------|
sixtyfootersdude
fonte

Respostas:

22

Você pode usar o comando 'wincmd' para mover para janelas diferentes, como se estivesse pressionando CTRL + W.

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

Isso organizará os arquivos como:

file1   file2
file3   file4

Como funciona: abre o arquivo Divide horizontalmente para que o arquivo2 esteja acima dele. Divide verticalmente para que o arquivo1 fique à esquerda, move para a próxima janela (arquivo1) e divide-se verticalmente novamente.

rjh
fonte
7

Eu escrevi um script usando essas informações que dividem automaticamente a tela conforme desejo:

vimsp.py file1 file2 / file3

Resulta em

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

Além disso, colocar / na frente de todos os arquivos os fará dividir verticalmente:

vimsp.py / file1 file2 file3

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

https://gist.github.com/1376956

fahhem
fonte
1

Estritamente a partir da linha de comando:

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

... abrirá 9 arquivos em uma grade 3x3.

Você também pode escrever uma função e adicioná-la à sua .vimrc, algo como o seguinte pode funcionar. Espero que um scripter experiente do vim possa pesar porque sei que isso não está correto:

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

... use-o na linha de comando:

vim <list of 9 files> -c ':execute mysplit()'
Brian Vandenberg
fonte