Getting started with tmux
tmux is an amazing tool for terminal multiplexing. It was tricky to switch from screen, but this write-up guides you to a clean transition into the world of tmux.
As a long-time user of GNU screen, I knew it would be difficult to switch, but I’ve made the move and am so far pretty happy. tmux does all the same things that screen does and was a lot easier to customize. I figured I would share my tmux configuration file and some of the things that made the switch relatively painless.
Keyboard bindings
I changed the default keyboard bindings to be more like screen:
Ctrl-bis the default for tmux; I preferCtrl-a.Ctrl-(left/right) arrowto move between windows. No screen equivalent (that I know of).Ctrl-atwice to go “back”.- Setting
Ctrl-a, rto reload the config file made it very easy to debug. - Status bar at the bottom
I set my status bar to use the session name and my machine name on the far left, open tab names centered in the middle, and the system time and date on the far right.
Project-specific configurations (and attach tool)
There's a cool project called tat that does some neat things to make project-specific configurations really easy to set up, and attach to them later on. It also includes tab-completion for existing sessions and your project directory names.
With tat you can create a .tmux file in your project directory, which will be run with the session name as first argument. You can use this to configure your project work space easily and consistently. Here’s one of my example .tmux project files:
# The session name should have been passed in, but if not
# default to 'default-session-name'
session=${1-"default-session-name"}
# Create and name some windows.
tmux rename-window -t $session:1 bash
tmux new-window -t $session:2 -n webserver
tmux new-window -t $session:3 -n python
tmux new-window -t $session:4 -n templates
tmux new-window -t $session:5 -n js
tmux new-window -t $session:6 -n less
# Configure the various windows.
tmux send-keys -t $session:2 "make serve" C-m
tmux send-keys -t $session:4 "cd templates && clear" C-m
tmux send-keys -t $session:5 "cd media/ && clear" C-m
tmux send-keys -t $session:6 "cd media/less/ && clear" C-m
# Attach to the first window.
tmux select-window -t $session:1
Tab-completion
Enabling tab-completion for tmux was easy. On Ubuntu I did the following:
$ sudo curl https://raw.github.com/mithro/rcfiles/master/bash/completion/tmux > /usr/share/bash-completion/completions/tmux
Comments ()