I am working on split (using ^w+v, ^w+s) buffers, but sometimes I would like to widen a current split or change its height. How can I achieve that?
6 Answers
There are several window commands that allow you to do this:
- Ctrl+W +/-: increase/decrease height (ex.
20<C-w>+
) - Ctrl+W >/<: increase/decrease width (ex.
30<C-w><
) - Ctrl+W _: set height (ex.
50<C-w>_
) - Ctrl+W |: set width (ex.
50<C-w>|
) - Ctrl+W =: equalize width and height of all windows
See also: :help CTRL-W
-
12Might also be worth noting that the 3rd and 4th options can take no count to resize to the maximum height/width.– MichaelDec 2, 2016 at 15:27
-
on windows, Cygwin, vim : when you
vimdiff -o bigfile1.bash bigfile2.bash
:ctrl-w =
: opens a MiniBufExplorer 3rd window on top (and the 3 windows are now equal in size), and closing that one makes the first .bash file's window 2 timse bigger than the 2nd .bash file window. Same operation with 2 .vim files gives same results. :( Same withvim -o
Oct 25, 2017 at 17:03 -
Asking for shortcut for the first two options vi.stackexchange.com/questions/16786/…– KcFnMiJul 18, 2018 at 11:43
-
@Michael: It doesn't work, I have to put a large constant like
200
before them to maximize the window. Apr 3, 2021 at 4:30 -
You can also use the resize
commands:
:resize [+-]N
- resize a horizontal split, increasing or decreasing height by N characters.:vertical resize [+-]N
- resize a vertical split, increasing or decreasing height by N characters.:resize N
- resize a horizontal split, setting height to N characters.:vertical resize N
- resize a vertical split, setting width to N characters.
These are equivalent to the Ctrlw commands. See :help window-resize
.
-
-
1I am so happy I finally found the easiest way to do this is resize command. Control commands are a menace, I keep playing ping pong without resizing any frame with it.. thank you @muru Mar 10, 2020 at 14:55
This is one of the few reasons I like to use vim's mouse mode.
If you use the GUI version, or your terminal supports sending drag events (such as xterm or rxvt-unicode) you can click on the split line and drag to resize the window exactly where you want, without a lot of guess work using the ctrl-w plus,minus,less,greater combinations.
In terminal versions, you have to set mouse mode properly for this to work
:set mouse=n
(I use 'n', but 'a' also works)
and you have to set the tty mouse type
:set ttymouse=xterm2
A lot of people say that a lot of time is wasted using the mouse (mostly due to the time it takes to move your hand from the keyboard to the mouse and back), but I find that, in this case, the time saved by having immediate feedback while adjusting the window sizes and the quickness of re-resizing (keep moving the mouse instead of typing another key sequence) outweighs the delay of moving my hand.
-
12I couldn't agree more, I found in Gnome-terminal
:set mouse=n
is enough, but to enable when inside tmux:set ttymouse=xterm2
is needed. Nov 26, 2015 at 3:17 -
1Absolutely true, I love keyboard, but this kind of things are better with mouse. Jun 26, 2017 at 15:28
-
2Totally agree with "but I find that, in this case, the time saved by having immediate feedback while adjusting window sized and the quickness of re-resizing (keep movving the mouse instead of typing another key sequence) outweighs the delay of moingmy hand.".– NawazApr 9, 2019 at 2:46
Resize splits more quickly
You can use the :resize
command or its shortcut :res
to change the height of the window. To change the height to 60 rows, use:
:resize 60
You can also change the height in increments. To change the height by increments of 5, use:
:res +5
:res -5
You can use :vertical resize
to change the width of the current window. To change the width to 80 columns, use:
:vertical resize 80
You can also change the width in increments. To change the width by increments of 5, use:
:vertical resize +5
:vertical resize -5
-
1This is very unlikely to be
Resize splits more quickly
, unless these commands are bound to keybindings, which has been done out of the box– 3N4NMay 21, 2018 at 3:34 -
Seems no one mentioned z{nr}<CR>
.
If you :h ^w_
, then will see z{nr}<CR>
just below it, which have same effect as CTRL-W_.
If you do not need z= for spell check, and added below to .vimrc
,
" vertical resize, z0<CR> minimize, z= equalize, z99<CR> maximize.
nnoremap z= <C-w>=
Then for change window height:
- z0<CR> to minimize height of current window
- z99<CR> to maxmize height of current window
- z= to make them all equal
-
5this use of
z
is a little unintuitive. I think we should stick toC-W
mappings. It's nice to know what's out there though.– 3N4NMay 21, 2018 at 3:32
For some reason (likely a plugin) the standard C-w >
(etc.) did not work in my ~/.vimrc
.
These .vimrc
additions worked (Ctrl-Shift-Left
... where Left | Right
= left and right arrow keys, respectively.
" 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>
-
I just tried this and got an error message when trying C-S-Left: "E16: Invalid range".– MagnusJun 15, 2020 at 14:11
-
@Magnus : just looked at my
~/.vimrc
: as above. Tested on:vs
in Vim 8.2 (Linux system): works. Perhaps you have an error in your lines (or some other issue)? imgur.com/gallery/h7lGYhK Jun 15, 2020 at 15:14