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

WireGuard VPN: Thiết lập mạng riêng ảo an toàn trên Ubuntu VPS

Bạn muốn tạo mạng riêng ảo (VPN) nhanh, đơn giản và hiệu năng cao mà không cần cấu hình phức tạp như OpenVPN? WireGuard là protocol VPN hiện đại với…

Xem thêm
Giao diện FancyZones với các vùng chia màn hình được tùy chỉnh trong Windows

PowerToys trên Windows: 6 công cụ tối ưu hóa workflow developer 2025

PowerToys là gì? PowerToys là bộ công cụ mã nguồn mở do Microsoft phát triển, cung cấp hàng loạt tính năng nâng cao giúp tối ưu hóa workflow trên Windows….

Xem thêm

8 tính năng ẩn trên iPhone: Back Tap, Khóa ứng dụng, SOS khẩn cấp không cần app

iOS 18 mang đến hàng loạt tính năng mới: Apple Intelligence, màn hình khóa tùy biến, RCS, Game Mode. Nhưng bên cạnh những thay đổi lớn, nhiều “mẹo ẩn” (hidden…

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