Chapter 6 : Workflows¶
Working Effectively with Panes and Windows¶
Turning a Pane into a Window¶
- For popping a pane into a window :
PREFIX !
Turning a Window into a Pane¶
- We can use
PREFIX :join-pane -s panes:1
to join first window in a session named panes to current window.
Maximizing and Restoring Panes¶
- We can temporarily make a pane go full screen :
PREFIX z
. It works kinda like toggle switch
Launching Commands in Panes¶
- To access two server in one window with two panes use this script.
tmux new-session -s servers -d "ssh deploy@burns"
tmux split-window -v "ssh dba@smithers"
tmux atttach -t servers
Note there is a handy side that when pipe breaks and server disconnects, panes will autoclose.
Opening a Pane in Current Directory¶
We can use #{pane_current_path}
provided by tmux for this use.
# split pane and retain the current directory of existing pane
bind _ split-window -v -c "#{pane_current_path}"
bind \ split-window -h -c "#{pane_current_path}"
Issuing Commands in Many Panes Simultaneously¶
Using the command set-window-option synchronize-panes on
, anything you type in one pane will be immediately broadcast to the other panes in the current session.
Then we will need to disabled the broadcast. set-window-option synchronize-panes off
Rather than that we can make a toggle binding : PREFIX CTRL-s
# shortcut for synchronize-panes toggle
bind C-s set-window-option synchronize-panes
Managing Sessions¶
Moving Between Sessions¶
Start two session as
tmux new -s editor -d vim
tmux new -s processes -d top
Then connect to editor session : tmux a -t editor
To switch session use : PREFIX (
and PREFIX )
To see list of active sessions : PREFIX s
bind ( switch-client -p
bind ) switch-client -n
Moving Windows Between Sessions¶
- You can use
PREFIX :move-window
orPREFIX .
, so you can bring up window you want to move, press the key combination and write the name of target session.
Creating or Attaching to Existing Session¶
if ! tmux has-session -t development; then
exec tmux new-session -s development -d
# other setup commands before attaching...
fi
exec tmux attach -t development
Tmux and Your OS¶
Using a Different Shell¶
set -g default-shell /bin/zsh
Launching tmux by Default¶
Add following script block to load tmux by default
if [[ -z "$TMUX" ]]; then
tmux new-session -A -s "$USER"
fi
Keeping Specific Configuration Separate¶
Move your OS-specific configuration into a separate file and tell tmux to load it up using tmux’s if-shell
commands and the source
command.
touch ~/.tmux.mac.conf
Add your mac specific stuff in the file above then in main .tmux.conf
write
# load mac-specific settings
if-shell "uname | grep -q Darwin" "source-file ~/.tmux.mac.conf"
Similarly for loading your secret tmux sauce :)
# load private settings if they exists
if-shell "[ -f ~/.tmux.private ]" "source ~/.tmux.private"
Recording Program Output to a Log¶
With pipe-pane, you can toggle it on and off at will and you can start it after a program is already running.
To activate this : PREFIX :pipe-pane -o "cat >>mylog.txt"
fix the tmux conf
# log output to a text file on demand
bind P pipe-pane -o "cat >> ~/#W.log" \; display "Toggled logging to ~/#w.log"
Now you can use PREFIX P
to toggle logging in file.
Adding Battery Life to Status Line¶
wget --no-check-certificate https://raw.github.com/richo/battery/bin/battery
chmod +x ~/batter
# check if its working
~/batter Discharging
Adding it to tmux config
# Status line right side - 50% | 31 Oct 13:37
set -g status-right "#(~/battery Discharging) | #[fg=cyan]%d %b %R"
Integrating Seamlessly with Vim¶
Install vim-tmux-navigator
plugin in vim using Plug or Vundle.
Then to easily navigate add this config to your .tmux.conf
is_vim="ps -o state= -o comm= -t '#{pane_tty}' \
| grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?)(diff)?$'"
bind-key -n C-h if-shell "$is_vim" "send-keys C-h" "select-pane -L"
bind-key -n C-j if-shell "$is_vim" "send-keys C-j" "select-pane -D"
bind-key -n C-k if-shell "$is_vim" "send-keys C-k" "select-pane -U"
bind-key -n C-l if-shell "$is_vim" "send-keys C-l" "select-pane -R"
bind-key -n C-\ if-shell "$is_vim" "send-keys C-\\" "select-pane -l"
# Clears screen
bind C-l send-keys 'C-l'
Extending tmux with Plugins¶
Bruno Sutic developed a solution TPM (tmux plugin manager to deal with the config file problems).
Let’s install tmux-resurrect
to restore tmux session even after a reboot!!!
git clone https://github.com/tmux-plugin/tpm ~/.tmux/plugins/tpm
Add following Lines to .tmux.conf
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-resurrect'
run '~/.tmux/plugins/tpm/tpm'
To install plugin PREFIX I
To save current tmux window/pane state : PREFIX CTRL-s
To restore last state : PREFIX CTRL-r