
tmux workflow: Quản lý terminal đa phiên nâng cao cho lập trình viên
tmux (terminal multiplexer) cho phép chạy nhiều shell trong một cửa sổ terminal duy nhất, tách thành nhiều pane, và quản lý chúng qua các session. Đặc biệt hữu ích khi làm việc với server từ xa — nếu kết nối mất, session vẫn tiếp tục chạy và có thể kết nối lại. Bài viết này hướng dẫn cấu hình tmux thành workflow hiệu quả.

Cài đặt và cấu hình cơ bản
cài đặt tmux:
# Ubuntu/Debian
sudo apt install tmux
# macOS
brew install tmux
tmux dùng prefix key Ctrl+b (gõ Ctrl+b rồi gõ phím khác). Để thay đổi prefix sang Ctrl+a (giống screen), thêm vào ~/.tmux.conf:
set -g prefix C-a
unbind C-b
bind C-a send-prefix
Sesison vs window vs pane: Session là nhóm các window; mỗi session là một môi trường riêng. Window tương đương tab. Pane là cách chia màn hình trong một window.
Những lệnh tmux cơ bản
| Lệnh | Chức năng |
|---|---|
tmux |
Bắt đầu session mới |
tmux new -s work |
Tạo session có tên |
tmux ls |
Liệt kê session |
| Ctrl+b c | Tạo window mới |
| Ctrl+b d | Rời khỏi session (detach) |
| Ctrl+b “ | Chia pane theo chiều ngang (split) |
| Ctrl+b % | Chia pane theo chiều dọc |
| Ctrl+b mũi tên | Chuyển giữa pane |
| Ctrl+b z | Toggle zoom pane |
Kết nối lại session: tmux attach -t work. Nếu mất kết nối SSH, chạy lại lệnh này để quay lại nguyên trạng thái.

Cấu hình nâng cao: vim-style navigation & plugins
Thêm vào ~/.tmux.conf để điều hướng pane bằng vim keys:
# Vim-style pane navigation
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
# Resize pane với prefix + H/L/J/K (giữ phím để resize lớn)
bind -r H resize-pane -L 5
bind -r J resize-pane -D 5
bind -r K resize-pane -U 5
bind -r L resize-pane -R 5
Resize pane: prefix + Alt+h/j/k/l để thay đổi kích thước. Để enable copy-mode với vim binding:
bind v copy-mode
unbind -T copy-mode-vi on
set -g mode-keys vi
bind -T copy-mode-vi 'v' send -X begin-selection
bind -T copy-mode-vi 'y' send -X copy-pipe-and-cancel 'pbcopy'
bind -T copy-mode-vi 'Enter' send -X copy-pipe-and-cancel 'pbcopy'
Tự động lưu session khi rời và khôi phục khi mở (cần TPM):
# Plugin Manager
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @plugin 'tmux-plugins/tmux-continuum'
set -g @continuum-restore 'on'
run '~/.tmux/plugins/tpm/tpm'
tmux-resurrect: Lưu và khôi phục làm việc
Plugin tmux-resurrect lưu trạng thái session, window, pane, working directory. Dùng prefix + Ctrl+s để lưu thủ công, prefix + Ctrl+r để khôi phục. Kết hợp tmux-continuum tự động lưu mỗi 15 phút và tự động restore khi khởi động tmux.
tmux workflow thực tế cho developer
Một cấu trúc session tiêu chuẩn cho project:
tmux new-session -d -s myproject -n editor
tmux send-keys -t myproject:1 'cd ~/code/myproject && vim' C-m
tmux split-window -t myproject:1 -h 'cd ~/code/myproject'
tmux split-window -t myproject:1 -v 'cd ~/code/myproject && python app.py'
tmux new-window -t myproject:2 -n git 'cd ~/code/myproject'
tmux new-window -t myproject:3 -n deploy 'cd ~/code/myproject'
tmux attach -t myproject
Ví dụ ứng dụng: một pane chạy Vim editor, một pane phục vụ dev server, một pane chạy git log. Khi mất mạng, tmux attach kết nối lại ngay — mọi process vẫn chạy.
Lưu ý và mẹo nhỏ
- Copy text: Trong copy-mode, dùng
vđể bắt đầu chọn,yđể copy,qđể thoát. - Log output:
tmux capture-pane -pS - > log.txtlưu toàn bộ nội dung pane ra file. - Tăng scrollback:
set -g history-limit 50000trong config. - Reload config:
tmux source-file ~/.tmux.confhoặcprefix + :source-file ~/.tmux.conf. - Nested SSH: Khi SSH vào server thứ hai, dùng
prefix + ađể gửi prefix cho server lồng nhau.
Tự động hóa với tmux scripting
tmux có thể được điều khiển hoàn toàn bằng script, hữu ích cho việc setup môi trường dev tự động hóa:
#!/bin/bash
# dev-session.sh - Setup session dev hoàn chỉnh
SESSION="dev"
PROJECT_DIR="$HOME/code/myproject"
tmux new-session -d -s $SESSION -n editor
tmux send-keys -t $SESSION:1 "cd $PROJECT_DIR && vim" C-m
tmux split-window -t $SESSION:1 -h
tmux send-keys -t $SESSION:1.2 "cd $PROJECT_DIR && npm run dev" C-m
tmux split-window -t $SESSION:1.1 -v
tmux send-keys -t $SESSION:1.3 "cd $PROJECT_DIR && git status" C-m
tmux new-window -t $SESSION:2 -n git
tmux send-keys -t $SESSION:2 "cd $PROJECT_DIR && git log --oneline -20" C-m
tmux new-window -t $SESSION:3 -n db
tmux send-keys -t $SESSION:3 "cd $PROJECT_DIR && docker compose up -d" C-m
tmux attach -t $SESSION
Chạy script này một lần để có ngay môi trường dev hoàn chỉnh với editor, dev server, git status, và database - tất cả trong một terminal duy nhất.
Remote pairing: Làm việc nhóm qua tmux
Một tính năng mạnh của tmux là cho phép nhiều người dùng attach cùng một session - lý tưởng cho pair programming từ xa:
# User A tạo session
tmux new-session -s pair
# User B attach cùng session (cần cùng user hoặc dùng socket chung)
tmux -S /tmp/pair attach -t pair
Cả hai người sẽ thấy cùng một terminal, có thể cùng edit code, cùng debug. Kết hợp với VS Code Live Share hoặc tmate để chia sẻ session an toàn qua mạng.
Performance tips cho tmux mượt mà
- Giảm escape-time:
set -sg escape-time 10- giảm độ trễ khi gõ phím escape (mặc định 500ms). - Tắt activity monitoring:
set -g monitor-activity off- tiết kiệm CPU khi có nhiều pane. - Dùng focus-events:
set -g focus-events on- giúp vim nhận biết focus pane đúng. - Limit history:
set -g history-limit 50000- đủ lớn mà không tốn RAM quá mức.
tmux vs screen: Chọn công cụ nào?
| Đặc điểm | tmux | screen |
|---|---|---|
| Khách quan | Hiện đại, active development | Cũ, ít cập nhật |
| Prefix key | Ctrl+b (tùy chỉnh được) | Ctrl+a |
| Pane/Window model | Session > Window > Pane | Session > Window (không có pane chuẩn) |
| Scripting | Mạnh, command line interface đầy đủ | Hạn chế |
| Client-server | Có, multiple clients attach 1 session | Có, nhưng ít linh hoạt hơn |
| Config | ~/.tmux.conf (dễ đọc, mạnh) | ~/.screenrc (phức tạp hơn) |
Với developer hiện đại, tmux là lựa chọn mặc định nhờ mô hình pane linh hoạt, scripting mạnh, và cộng đồng lớn hơn.
Nguồn: tmux Wiki (GitHub)
