Usando el comando vim split desde la línea de comando para obtener divisiones de 4 cuartos

20

Quiero abrir cuatro archivos vim en la línea de comando:

vim file1 file2 file3

Pero me gustaría que cada archivo se abra en una división separada:

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

(Lo anterior divide la pantalla horizontalmente 4 veces)

Idealmente, lo que me gustaría hacer es dividir la pantalla en 4 cuadrados como:

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

Sé cómo hacer esto una vez que vim está abierto, pero no puedo hacerlo desde la línea de comandos (usando vs). ¿Algunas ideas? Todo lo que intento termina luciendo así (o una variación diferente):

|-------|-------|
|       |       |
|-------|       |
|       |       |
|-------|       |
|       |       |
|       |       |
|-------|-------|
Sixtyfootersdude
fuente

Respuestas:

22

Puede usar el comando 'wincmd' para moverse a diferentes ventanas como si estuviera presionando CTRL + W.

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

Esto organizará los archivos como:

file1   file2
file3   file4

Cómo funciona: abre el archivo 4. Se divide horizontalmente para que file2 esté por encima de él. Se divide verticalmente, de modo que el archivo1 está a la izquierda, se mueve a la siguiente ventana (archivo1) y se divide verticalmente de nuevo.

rjh
fuente
7

Escribí un script usando esta información que divide automáticamente la pantalla como deseo:

vimsp.py file1 file2 / file3

Resultados en

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

Además, poner / delante de todos los archivos hace que todos se dividan verticalmente:

vimsp.py / file1 file2 file3

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

https://gist.github.com/1376956

fahhem
fuente
1

Estrictamente desde la línea de comandos:

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

... abrirá 9 archivos en una cuadrícula de 3x3.

También podría escribir una función y agregarla a su .vimrc, algo como lo siguiente podría funcionar. Esperemos que un scripter vim experimentado pueda pesar porque sé que esto no es correcto:

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

... luego úsalo desde la línea de comandos:

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