¶Windows and Frames
- A “window” is a region within an Emacs frame that shows a particular buffer
- A “frame” is an Emacs program window at the level of your OS or desktop environment which can hold multiple windows
- Multiple windows can show the same buffer, but with different scroll, selection, etc
Check out the Emacs manual entry for Multiple Windows
¶Basic Window Operations
Each item lists the default Emacs binding followed by the evil-mode binding. Note that many of the evil-mode bindings also allow you to use Ctrl with the second key in the sequence!
Command | Key | Description |
---|---|---|
delete-window |
C-x 0 |
Close the current window |
delete-other-windows |
C-x 1 |
Close all other windows |
split-window-below |
C-x 2 |
Split the current window horizonally |
split-window-right |
C-x 3 |
Split the current window vertically |
shrink-window-horizontally |
C-x { |
Make the window smaller horizontally |
enlarge-window-horizontally |
C-x } |
Make the window bigger horizontally |
shrink-window |
None! | Shrink the window vertically |
shrink-window-if-larger-than-buffer |
C-x - |
Shrink the window vertically to buffer |
balance-windows |
C-x + |
Balance the sizes of all windows |
TIP: You can use C-u
(universal-argument
) and a numeric prefix before running the shrink
and enlarge
commands to dictate the mount by which the window is resized.
¶evil-mode alternatives
Command | Key | Description |
---|---|---|
evil-window-delete |
C-w C-c |
Close the current window |
delete-other-windows |
C-w C-o |
Close all other windows |
evil-window-split |
C-w C-s |
Split the current window horizontally |
evil-window-vsplit |
C-w C-v |
Split the current window vertically |
evil-window-set-width |
C-w (pipe) |
Use numeric prefix to set window width |
evil-window-set-height |
C-w _ |
Use numeric prefix to set window height |
balance-windows |
C-w = |
Balance the sizes of all windows |
TIP: You can use a numeric argument before running evil-window-set-width
and evil-window-set-height
to specify the desired size of the window.
¶“Other window” operations
Command | Keys | Description |
---|---|---|
other-window |
C-x o |
Select the next visible window |
find-file-other-window |
C-x 4 f |
Open a file in another window |
dired-other-window |
C-x 4 d |
Open Dired in another window |
dired-jump-other-window |
C-x 4 j |
Open Dired in another window at location of file |
scroll-other-window |
M-pgdn |
Scroll the other window down without focusing it |
scroll-other-window-down |
M-pgup |
Scroll the other window up without focusing it |
¶evil-mode alternatives
Command | Keys | Description |
---|---|---|
evil-window-next |
C-w C-w |
Select the next visible window |
evil-window-prev |
C-w W |
Select the previous visible window |
ffap-other-window |
C-w C-f |
Open a file in another window |
¶More other-window
commands
Learn about more other-window
commands:
- Check out the
C-x 4
prefix withwhich-key
! - Also, use
counsel-M-x
and search for any commands withother-window
in the name!
¶Defaulting to vertical splits
You can default to vertical splits for “other windows” with the following config:
(setq split-height-threshold nil) (setq split-width-threshold 0)
More information about controlling how buffers are displayed in the Emacs manual.
¶Windmove for moving between windows
Windmove comes with Emacs, but is missing some features in Emacs 26.
windmove-up/down/left/right
- Focus the window next to the current in the specified directionwindmove-swap-states-up/down/left/right
- “Move” the current buffer to the window in the specified direction
¶evil-mode equivalents
evil-mode provides its own functions for moving between windows:
evil-window-left
-C-w h
evil-window-right
-C-w l
evil-window-up
-C-w k
evil-window-down
-C-w j
¶buffer-move or moving buffers between windows
Use buffer-move
for a more general solution:
buf-move
: Turn on a mode where you can move the current buffer around with arrow keys, any other key finishes itbuf-move-left
buf-move-right
buf-move-up
buf-move-down
(use-package buffer-move)
¶winner-mode
winner-mode
provides useful functions for undoing and redoing window configurations:
winner-undo
(C-c left
orC-w u
bound below)winner-redo
(C-c right
orC-w U
bound below)
(use-package winner-mode :ensure nil :bind (:map evil-window-map ("u" . winner-undo) ("U" . winner-redo)) :config (winner-mode))
¶Packages for moving between windows
¶ace-window
ace-window makes it easy to jump between visible windows in your Emacs frame, just run the ace-window
command and press the number displayed in the upper left corner of the window you want to switch to. It also enables you to swap, delete, and move windows using similar functionality.
(use-package ace-window)
Tip from Cedrif Daf: Set aw-keys
to home-row keys for more convenience:
(setq aw-keys '(?a ?s ?d ?f ?g ?h ?j ?k ?l))
¶winum-mode
This mode shows numbers in your windows’ mode lines to tell you what keys you can press after using the key binding C-x w
. Check out the winum-mode page for more useful tips!
(use-package winum :config (winum-mode))