20

Я хочу открыть четыре файла vim в командной строке:

vim file1 file2 file3

Но я бы хотел, чтобы каждый файл открывался в отдельном разделе:

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

(Выше разделить экран по горизонтали в 4 раза)

В идеале я хотел бы разделить экран на 4 квадрата, например:

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

Я знаю, как это сделать, когда vim открыт, но я не могу сделать это из командной строки (используя vs). Есть идеи? Все, что я пробую, в конечном итоге выглядит так (или другой вариант):

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

3 ответа3

21

Вы можете использовать команду 'wincmd' для перемещения в разные окна, как будто вы нажимаете CTRL+W.

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

Это упорядочит файлы как:

file1   file2
file3   file4

Как это работает: открывает файл4. Разбивается по горизонтали, поэтому file2 находится над ним. Разбивает по вертикали, так что file1 находится слева, переходит к следующему окну (file1) и снова по вертикали.

6

Я написал сценарий, используя эту информацию, которая автоматически разделяет экран по желанию:

vimsp.py file1 file2 / file3

Результаты в

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

Кроме того, если поместить / перед всеми файлами, вместо этого они будут разделены по вертикали:

vimsp.py / file1 file2 file3

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

https://gist.github.com/1376956

1

Строго из командной строки:

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

... откроет 9 файлов в сетке 3х3.

Вы также можете написать функцию и добавить ее в свой .vimrc , что-то вроде следующего может работать. Надеюсь, опытный vim-сценарист сможет взвесить, потому что я знаю, что это неправильно:

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

... затем используйте его из командной строки:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .