Blog

Tmux is a terminal multiplexer

Written by Staff | Jan 21, 2014 8:00:00 AM

When I started in web development, Gnome terminal and its tab interface were the tools I used for my terminal needs. We can say that web development and the terminal go hand in hand. As I progressed with web development I started using Guake, a top-down terminal that gives me a quick access to a terminal while pressing just one key. Sadly though, tab interfaces on terminal windows pale in comparison to its modern browser counterparts. Ugly! Also, although I have naturally grasped the keyboard shortcuts for adding, removing and switching tabs, it still felt like it has held me back since most of the time I would just need to view the debug output of some process (i.e. Django development server). The time consumed switching between the open tabs is not acceptable.

So as I scoured the web for a solution and I encountered the term “terminal multiplexer”, which can be thought of as a graphical window manager for terminal sessions. So yeah, the next thing that came up was screen, which I was kind of familiar with, as I have used it maintain my session on remote servers. But it was the first time that I really found out you can maintain multiple windows (or tabs) within a screen session and you can also split a window into multiple panes. But there was one specific feature lacking on screen at the time: vertical splitting. Enter tmux. Other than the vertical splitting (which is now available in screen btw), tmux is easier to use for multi-user and multi-sessions, which makes it an even better fit for remote pair programming.

My ~/.tmux.conf.

# remap prefix to Control + a
unbind C-b
set-option -g prefix C-a

#Automatically set window title
set-window-option -g automatic-rename on
set-option -g set-titles on

# Assign new shortcut keys for spliting window vertically and horizontally
bind-key v split-window -h
bind-key s split-window -v

# Navigate CTRL-arrow keys to switch panes
bind -n C-Left select-pane -L
bind -n C-Right select-pane -R
bind -n C-Up select-pane -U
bind -n C-Down select-pane -D

#Shift+arow keys to switch windows
bind -n S-Left previous-window
bind -n S-Right next-window
# force a reload of the config file
unbind r
bind r source-file ~/.tmux.conf

# quick pane cycling
unbind ^A
bind ^A select-pane -t :.+

Session Management

  • tmux new -s session_name creates a new tmux session named session_name tmux
  • attach -t session_name attaches to an existing tmux session named session_name
  • tmux switch -t session_name switches to an existing session named session_name
  • tmux list-sessions lists existing tmux sessions
  • tmux detach (prefix + d) detach the currently attached session

Windows

  • tmux new-window (prefix + c) create a new window
  • tmux select-window -t :0-9 (prefix + 0-9) move to the window based on index
  • tmux rename-window (prefix + ,) rename the current window
  • Shift+left, Shift+right switching when using my settings

Panes

  • tmux split-window (prefix + ", prefix + v) split the window into two vertical panes
  • tmux split-window -h (prefix + %, prefix + h) split the window into two horizontal panes
  • tmux swap-pane -[UDLR] (prefix + { or }) swap pane with another in the specified direction
  • tmux select-pane -[UDLR] (CTRL + arrow keys when using my settings) select the next pane in the specified direction