tmux workflow: Quản lý terminal đa phiên nâng cao cho lập trình viên

Terminal code editor tmux development environment

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ả.

tmux terminal multiplexer with multiple panes

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.

tmux session window pane management workflow

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.txt lưu toàn bộ nội dung pane ra file.
  • Tăng scrollback: set -g history-limit 50000 trong config.
  • Reload config: tmux source-file ~/.tmux.conf hoặc prefix + :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)

Tôi là một lập trình viên IOS. Code chính là IOS nhưng thỉnnh thoảng vẫn đá sang Android hoặc web. Mặc dù không quá thông thạo nhưng tôi sẽ chia sẻ những kiến thức mà mình đã tìm hiểu, áp dụng qua.

Bài viết liên quan

Minh họa luồng git stash: working directory lưu vào refs/stash

Git Stash: Quản lý công việc đang làm mà không cần commit

git stash là lệnh thiết yếu trong Git — cho phép lưu tạm trạng thái working directory và index khi cần chuyển sang branch khác mà không cần commit dở…

Xem thêm

Alacritty vs Kitty vs WezTerm: Terminal hiện đại so sánh chi tiết

Terminal là nơi dành nhiều thời gian nhất của developer. Một terminal emulator nhanh, nhẹ, và có khả năng tùy biến cao sẽ nâng cao năng suất đáng kể. Ba…

Xem thêm

Git Hooks: Tự động hóa kiểm tra code trước khi commit

Git Hooks: Tự động hóa kiểm tra code trước khi commit VS Code IDE with pre-commit hooks configuration on split screen Git hooks là script tự chạy ở các sự…

Xem thêm
0 0 đánh giá
Article Rating
Theo dõi
Thông báo của
guest
0 Comments
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất