Как изменить ширину и высоту текущего сплита?

112

Я работаю над буферами разделения (используя ^ w + v, ^ w + s), но иногда я хотел бы расширить текущее разделение или изменить его высоту. Как я могу этого достичь?

Nebril
источник

Ответы:

159

Есть несколько оконных команд, которые позволяют вам сделать это:

  • Ctrl+W +/-: увеличение / уменьшение высоты (напр. 20<C-w>+)
  • Ctrl+W >/<: увеличить / уменьшить ширину (напр. 30<C-w><)
  • Ctrl+W _: установить высоту (напр. 50<C-w>_)
  • Ctrl+W |: установить ширину (напр. 50<C-w>|)
  • Ctrl+W =: выровнять ширину и высоту всех окон

Смотрите также: :help CTRL-W

Дверная ручка
источник
19
Также стоит отметить, что первые два параметра могут учитывать счетчик для изменения размера более чем на одну строку / столбец за раз.
Богатый
4
Также стоит отметить, что 3-й и 4-й варианты не учитываются при изменении размера до максимальной высоты / ширины.
Майкл
2
На моей системе это :help CTRL-Wи нет:help CTRL_W
Алексей Магура
в Windows Cygwin, vim: when you vimdiff -o bigfile1.bash bigfile2.bash:: ctrl-w =открывает 3-е окно MiniBufExplorer вверху (и 3 окна теперь равны по размеру), и закрывая его, окно первого файла .bash на 2 раза больше, чем второй файл .bash окно. Та же самая операция с 2 файлами .vim дает те же результаты. :( То же самое сvim -o
Оливье Дюлак
Запрашиваем ярлык для первых двух вариантов vi.stackexchange.com/questions/16786/…
KcFnMi
44

Вы также можете использовать resizeкоманды:

  • :resize [+-]N - изменить размер горизонтального разделения, увеличив или уменьшив высоту на N символов.
  • :vertical resize [+-]N - изменить размер вертикального разделения, увеличив или уменьшив высоту на N символов.
  • :resize N - изменить размер горизонтального разделения, установив высоту N символов.
  • :vertical resize N - изменить размер вертикального разделения, установив ширину в N символов.

Это эквивалентно Ctrlwкомандам. См :help window-resize.

Мур
источник
30

Это одна из немногих причин, по которой мне нравится использовать режим мыши vim.

Если вы используете версию с графическим интерфейсом или ваш терминал поддерживает отправку событий перетаскивания (таких как xterm или rxvt-unicode), вы можете щелкнуть по разделенной линии и перетащить, чтобы изменить размер окна именно там, где вы хотите, без большой работы с угадыванием с помощью ctrl. -W плюс, минус, меньше, большие комбинации.

В терминальных версиях вы должны правильно установить режим мыши, чтобы это работало

:set mouse=n

(Я использую 'n', но 'a' также работает)

и вы должны установить тип мыши tty

:set ttymouse=xterm2

Многие люди говорят, что с помощью мыши тратится много времени (в основном из-за времени, которое требуется, чтобы переместить руку с клавиатуры на мышь и обратно), но я считаю, что в этом случае время, сэкономленное немедленная обратная связь при настройке размера окна и быстрота изменения размера (продолжайте перемещать мышь вместо ввода другой последовательности клавиш) перевешивает задержку перемещения руки.

Джон О'М.
источник
4
Я не мог согласиться с этим, я обнаружил, что в Gnome-терминале :set mouse=nдостаточно, но для включения нужно использовать tmux :set ttymouse=xterm2.
the_velour_fog
1
Абсолютно верно, я люблю клавиатуру, но такие вещи лучше с мышью.
Кальбертс
Вау, спасибо, что обратили на это мое внимание!
Чарли Горичаназ
Полностью согласен с «но я считаю, что в этом случае время, сэкономленное за счет немедленной обратной связи при настройке размера окна и быстроты изменения размера (продолжайте перемещать мышь вместо ввода другой последовательности клавиш), перевешивает задержку мохнатой руки. " ,
Наваз
5

Кажется, никто не упомянул z{nr}<CR>.

Если вы :h ^w_, то увидите z{nr}<CR>чуть ниже, которые имеют тот же эффект, что и CTRL-W_.

Если вам не нужна z=проверка орфографии, и добавьте ниже .vimrc,

" vertical resize, z0<CR> minimize, z= equalize, z99<CR> maximize.
nnoremap z= <C-w>=

Тогда для изменения высоты окна:

  • z0<CR> минимизировать высоту текущего окна
  • z99<CR> максимизировать высоту текущего окна
  • z= сделать их всех равными
qeatzy
источник
2
это использование zнемного не интуитивно понятно. Я думаю, что мы должны придерживаться C-Wотображений. Приятно знать, что там, хотя.
Клаус
5

Изменение размера делится быстрее: http://vim.wikia.com/wiki/Resize_splits_more_quickly

Вы можете использовать :resizeкоманду или ее ярлык, :resчтобы изменить высоту окна. Чтобы изменить высоту до 60 строк, используйте: :resize 60

Вы также можете изменить высоту с шагом. Чтобы изменить высоту с шагом 5, используйте: :res +5 :res -5

Вы можете использовать: вертикальное изменение размера, чтобы изменить ширину текущего окна. Чтобы изменить ширину до 80 столбцов, используйте: :vertical resize 80

Вы также можете изменить ширину с шагом. Чтобы изменить ширину с шагом 5, используйте: :vertical resize +5 :vertical resize -5

galian
источник
Это очень маловероятно Resize splits more quickly, если только эти команды не связаны с сочетаниями клавиш, что было сделано из коробки
Клаус
Не полностью согласен с заявлением Энана. Мне нравится этот ответ imho
craft
0

По некоторым причинам (вероятно, плагин) стандарт C-w >(и т. Д.) Не работал в моем ~/.vimrc.

Эти .vimrcдополнения сработали ( Ctrl-Shift-Left... где Left | Right= левая и правая клавиши со стрелками, соответственно.

" noremap <silent> <C-S-Left> :vertical resize +5<CR>
" noremap <silent> <C-S-Right> :vertical resize -5<CR>
noremap <silent> <C-S-Left> :vertical resize +1<CR>
noremap <silent> <C-S-Right> :vertical resize -1<CR>
Виктория Стюарт
источник