Tmux for Streamlining Dev Workflow
Lets see if we can write a detailed guide on using tmux, the terminal multiplexer that enables a number of terminals to be created, accessed, and controlled from a single screen. This guide will help you get started with tmux, explaining how to use its various commands and features to enhance your productivity.
Getting Started with tmux
Installation
Before diving into the commands, ensure tmux is installed on your system. For Ubuntu users, you can install it via:
sudo apt-get install tmux
Starting tmux
To start a new tmux session, simply type:
tmux
Start with a Session Name
To create a new session with a specific name:
tmux new -s myname
This is particularly useful for distinguishing between different sessions.
Attaching to Sessions
To attach to the last session you were in:
tmux attach # or tmux a
Attach to a Named Session
If you named your session, you can attach to it specifically:
tmux a -t myname
Managing Sessions
To list all your tmux sessions:
tmux ls
Killing Sessions
To kill a specific session:
tmux kill-session -t myname
Kill All Sessions
This powerful chain of commands kills all tmux sessions:
tmux ls | grep : | cut -d. -f1 | awk '{print substr($1, 0, length($1)-1)}' | xargs kill
Using tmux: Commands and Shortcuts
Basic Commands
- Create New Session:
tmux new -s session_name
- Detach from Session:
CTRL+b d
- List Sessions:
tmux ls
- Attach to a Session:
tmux attach -t session_name
- Kill a Session:
tmux kill-session -t session_name
Managing Windows and Panes
tmux not only handles sessions but also multiple windows and panes within those sessions.
Windows (Tabs)
- Create Window:
CTRL+b c
- List Windows:
CTRL+b w
- Next Window:
CTRL+b n
- Previous Window:
CTRL+b p
- Find Window:
CTRL+b f
- Name Window:
CTRL+b ,
- Kill Window:
CTRL+b &
Panes (Splits)
- Vertical Split:
CTRL+b %
- Horizontal Split:
CTRL+b "
- Swap Panes:
CTRL+b o
- Show Pane Numbers:
CTRL+b q
- Kill Pane:
CTRL+b x
- Break Pane into Window:
CTRL+b +
- Restore Pane from Window:
ctrl+b -
- Toggle Layout:
CTRL+b space
Advanced Usage
Sync Panes
To synchronize input across all panes in a window: Copy Code
:setw synchronize-panes on
Toggle it off by: Copy Code
:setw synchronize-panes off
Resizing Panes
To resize panes:
# Resize down by 1 cell
CTRL+b :resize-pane -D
# Resize down by 20 cells
CTRL+b :resize-pane -D 20
# Resize specific pane
CTRL+b :resize-pane -t 2 -L 20
tmux is a powerful tool that can significantly enhance your terminal usage by allowing you to run multiple sessions, windows, and panes from one screen. Whether you are a developer, a system administrator, or just a Linux enthusiast, mastering tmux can elevate your productivity and control over your terminal environments. Experiment with the commands and tailor your tmux setup to fit your workflow!
Advanced Session Management
Switching Between Sessions
If you’re handling multiple sessions, you can switch between them seamlessly:
tmux switch -t session_name
This command allows you to directly switch to another session without detaching from the current one.
Renaming Sessions
To rename an existing session which can help in organizing your sessions better:
tmux rename-session -t old_name new_name
Linking and Grouping Windows
tmux allows you to link windows between sessions, which is useful when you need the same window across multiple sessions:
tmux link-window -s source_session:window_index -t target_session:target_index
You can also group windows so that any change in one mirrored in others—ideal when monitoring multiple logs that require similar attention:
tmux new-window -a -t parent_session:window_index
Scripting with tmux
You can automate tmux operations using scripting; for instance, setting up a development environment with pre-defined windows and panes can be scripted:
#!/bin/bash
session="dev"
# create a new tmux session
tmux new-session -d -s $session
# create three windows
tmux new-window -t $session:1 -n 'Editor'
tmux new-window -t $session:2 -n 'CLI'
tmux new-window -t $session:3 -n 'Logs'
# split the second window horizontally
tmux split-window -h -t $session:2
# run commands in specific panes
tmux send-keys -t $session:1 'vim' C-m
tmux send-keys -t $session:2.1 'htop' C-m
# attach to the new session
tmux attach -t $session
Advanced Pane Management
Rotating Panes
Rotating panes can be useful when you need to rearrange your layout quickly without re-splitting your windows:
CTRL+b CTRL+o # rotates the pane left
Converting a Pane into a New Window
Sometimes, you might start a process in a pane but then realize it needs more space or a dedicated window:
CTRL+b !
This turns the current pane into a window.
Capture Pane Content to a File
Capturing the content of a pane to a file can be incredibly useful especially when you need to log output or share it:
tmux capture-pane -pt session:window.pane -S -100
This captures the last 100 lines of the specified pane.
Conditional Pane Synchronization
Rather than syncing input on all panes, sometimes you might want to sync only specific ones:
tmux set-window-option synchronize-panes on
# Do your synchronized work across panes
tmux set-window-option synchronize-panes off
You can turn this on and off as needed for tasks like simultaneous configuration editing across servers.
Using Hooks
tmux supports hooks which let you trigger scripts or commands after certain events, enhancing automation capabilities:
tmux set-hook -g after-new-window 'send-keys "echo New Window Created!" C-m'
This hook will automatically run the echo
command every time a new window is created.
Conclusion
With these advanced configurations and examples, you are well on your way to leveraging tmux’s powerful features for a more productive and organized command-line environment. Experiment with these settings and adapt them to suit your needs to take full advantage of what tmux has to offer.