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
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.
- 24,838
- 8
- 82
- 143
-
-
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 – nitinr708 Mar 10 '20 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.
- 103
- 3
- 8,552
- 2
- 42
- 58
-
12I couldn't agree more, I found in Gnome-terminal
:set mouse=nis enough, but to enable when inside tmux:set ttymouse=xterm2is needed. – the_velour_fog Nov 26 '15 at 03:17 -
1Absolutely true, I love keyboard, but this kind of things are better with mouse. – calbertts Jun 26 '17 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.". – Sarfaraz Nawaz Apr 09 '19 at 02:46
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
- 960
- 9
- 18
-
5this use of
zis a little unintuitive. I think we should stick toC-Wmappings. It's nice to know what's out there though. – 3N4N May 21 '18 at 03:32
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
- 103
- 4
- 191
- 1
- 2
-
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 – 3N4N May 21 '18 at 03:34 -
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>
- 151
- 5
-
I just tried this and got an error message when trying C-S-Left: "E16: Invalid range". – Magnus Jun 15 '20 at 14:11
-
@Magnus : just looked at my
~/.vimrc: as above. Tested on:vsin Vim 8.2 (Linux system): works. Perhaps you have an error in your lines (or some other issue)? https://imgur.com/gallery/h7lGYhK – Victoria Stuart Jun 15 '20 at 15:14
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– Olivier Dulac Oct 25 '17 at 17:03200before them to maximize the window. – NeoZoom.lua Apr 03 '21 at 04:30execute "norm! \<c-W>_"– Michael come lately Apr 03 '21 at 19:42