21 điểm bởi GN⁺ 7 ngày trước | 1 bình luận | Chia sẻ qua WhatsApp
  • Có thể tự do tùy chỉnh phím tắt, màu sắc, thanh trạng thái, thao tác chuột thông qua tệp cấu hình ~/.tmux.conf
  • Có thể đổi phím Prefix mặc định C-b sang C-a và remap Caps Lock thành Ctrl để tăng hiệu quả nhập liệu
  • Có thể chia cửa sổ một cách trực quan bằng |, - thay cho ", %, và dùng phím r để nạp lại tệp cấu hình ngay lập tức
  • Chuyển pane bằng Alt + phím mũi tên, bật chế độ chuột, tắt tự động đổi tên cửa sổ để cải thiện trải nghiệm thao tác
  • Có thể tinh chỉnh chi tiết các yếu tố hiển thị như màu sắc, thanh trạng thái, thông báo, đường viền để tạo một giao diện nhất quán

Khái niệm cơ bản về tùy biến tmux

  • Tệp cấu hình tmuxtmux.conf; nếu đặt tại ~/.tmux.conf trong thư mục home của người dùng thì sẽ được áp dụng như cấu hình cá nhân
    • Nếu muốn nhiều người dùng cùng chia sẻ thì có thể đặt ở thư mục hệ thống toàn cục, và vị trí sẽ khác nhau tùy hệ điều hành
    • Có thể kiểm tra vị trí chính xác trong phần mô tả tùy chọn -f của man tmux
  • Có thể chỉnh sửa tệp cấu hình để tự do thay đổi phím tắt, màu sắc, thanh trạng thái, thao tác chuột

Thiết lập phím Prefix bớt bất tiện hơn

  • Có thể đổi phím Prefix mặc định C-b thành C-a, dễ bấm hơn
    • C-a có thể xung đột với lệnh “di chuyển về đầu dòng” trong bash
    • Nếu remap phím Caps Lock thành Ctrl thì việc nhập tổ hợp Prefix sẽ dễ hơn
  • Ví dụ cấu hình như sau
    unbind C-b
    set-option -g prefix C-a
    bind-key C-a send-prefix
    
  • Vẫn có thể dùng lệnh bash cũ với C-a C-a

Lệnh chia cửa sổ trực quan

  • Dùng |, - trực quan hơn về mặt hình ảnh thay cho các phím chia mặc định ", %
    • Thiết lập | cho chia ngang và - cho chia dọc
    • Gỡ các phím tắt cũ
    bind | split-window -h
    bind - split-window -v
    unbind '"'
    unbind %
    

Nạp lại nhanh tệp cấu hình

  • Nếu thường xuyên chỉnh sửa tmux.conf thì có thể nạp lại ngay bằng phím tắt
    • Gán phím r cho lệnh áp dụng lại tệp cấu hình
    bind r source-file ~/.tmux.conf
    

Chuyển pane nhanh

  • Có thể di chuyển giữa các pane bằng Alt (Meta) + phím mũi tên mà không cần Prefix
    • Di chuyển tương ứng bằng Alt-Left, Alt-Right, Alt-Up, Alt-Down
    bind -n M-Left select-pane -L
    bind -n M-Right select-pane -R
    bind -n M-Up select-pane -U
    bind -n M-Down select-pane -D
    

Bật chế độ chuột

  • Có thể chọn cửa sổ, điều chỉnh kích thước pane bằng chuột
    • Dù mặc định ưu tiên thao tác bằng bàn phím, tính năng này vẫn hữu ích khi làm việc cộng tác
    • Có thể dùng thường xuyên trong pair programming
    set -g mouse on
    

Tắt tự động đổi tên cửa sổ

  • Ngăn việc tên cửa sổ được đặt thủ công bị tự động ghi đè khi chạy lệnh
    set-option -g allow-rename off
    

Thay đổi giao diện của tmux

  • Có thể tinh chỉnh chi tiết màu sắc, thanh trạng thái, thông báo, đường viền pane
    • Xem mục STYLES để biết cách thiết lập nhiều yếu tố hiển thị khác nhau
    • Nếu dùng các màu terminal mặc định (red, yellow, black...) thì giao diện sẽ hòa hợp tự nhiên với theme
    • Khi dùng chế độ 256 màu, có thể chỉ định colour0~colour256
  • Cấu hình ví dụ bao gồm các mục sau
    • Tắt thông báo chuông**,** đặt màu đồng hồ là yellow**,** kiểu copy mode là fg=black bg=red bold

    • Màu đường viền pane là red**,** đường viền pane đang hoạt động là yellow

    • Vị trí thanh trạng thái là bottom**,** khoảng trống bên trái**,** hiển thị thời gian ở bên phải

    • Kiểu cửa sổ hiện tại là fg=black bg=red**,** kiểu cửa sổ thường là fg=red bg=black

      • Kiểu thông báo là fg=yellow bg=red bold
      • Những thiết lập này giúp tạo bảng màu nhất quán và phân tách trực quan rõ ràng

Tài liệu tham khảo thêm

  • Có thể tham khảo nhiều ví dụ cấu hình tmux trong các kho GitHub tmux.conf hoặc dotfiles
    • Cũng có thể tham khảo trên Reddit tại /r/dotfiles, /r/unixporn
  • Toàn bộ cấu hình được công khai trong kho dotfiles trên GitHub
  • Để tìm hiểu sâu hơn, nên tham khảo trang man của tmuxmục Configuring tmux trên wiki tmux
    • Bao quát đầy đủ các tính năng mới nhất và tùy chọn chi tiết
  • Nếu muốn tự thiết kế theme màu cho terminal, có thể dùng Root Loops(https://rootloops.sh/)
    • Hỗ trợ tạo cấu hình màu terminal theo nhu cầu cá nhân

1 bình luận

 
Ý kiến trên Hacker News
  • Trước đây tôi từng dùng tmux, nhưng từ khi biết đến Zellij thì đã chuyển hẳn sang
    Việc thiết lập tab và panel trực quan hơn nhiều, và cuộn cũng như chọn văn bản bằng chuột rất tiện nên copy/paste dễ dàng

    • Khi xem trang tải xuống của Zellij, tôi thấy là họ không nên dùng nút cho liên kết
      Liên kết dạng nút không thể sao chép bằng chuột phải, và cũng không tốt về mặt accessibility
    • Nhược điểm chí mạng duy nhất của Zellij là không thể copy/paste trên màn hình bằng bàn phím, và không hỗ trợ nhiều clipboard buffer
      Trong tmux tôi dùng tính năng này mỗi 1~2 phút, nhưng phía dev Zellij lại bảo hãy pipe dữ liệu vào editor, mà cách đó không tương thích với system clipboard
      Vì vậy cuối cùng tôi quay lại tmux
    • Với góc nhìn của người dùng thiết bị embedded, Zellij quá nặng
      Zellij khoảng 50MB còn tmux chỉ tầm 2MB kể cả thư viện phụ thuộc, nên chênh lệch dung lượng rất lớn
    • Hai tuần gần đây tôi đã thử zmx, tuy có một ít lỗi repaint màn hình nhưng dùng cùng ghostty khá dễ chịu
    • Tôi cũng từng chuyển sang Zellij rồi lại quay về tmux
      Zellij ngày càng phình to nên thấy bất tiện, còn giờ tôi cấu hình session bằng tmuxp và giữ kết nối bằng autossh, thấy hài lòng hơn nhiều
  • Nói về key binding thì ^a là truyền thống của screen, còn ^b là của tmux
    Nếu là quản trị viên phải xử lý nhiều hệ thống thì việc nắm keymap mặc định là rất quan trọng
    Tôi chỉ đổi những thứ như màu sắc, nền panel đang hoạt động, đồng hồ timestamp, bật chuột, còn key binding thì giữ nguyên
    Khi đã quen rồi thì mặc định lại tiện hơn

  • Tôi từng bỏ tmux và sang Zellij vì Shift+Enter không hoạt động
    Nhưng rồi Zellij làm crash kiểu panic và thổi bay process, nên cuối cùng tôi quay lại tmux
    Cách giải quyết là "bind-key -T root S-Enter send-keys C-j", tôi tìm thấy trong issue này

    • Tôi giải quyết bằng "bind -n S-Enter send-keys Escape '[13;2u'"
      pi.dev có cảnh báo là không có thiết lập extended-keys, nhưng vẫn hoạt động tốt
    • Nhờ vậy tôi đã tìm được đúng giải pháp mình cần
    • Tôi tò mò liệu có thể xảy ra trường hợp multiplexer chết nhưng process con vẫn tiếp tục sống hay không
      Với tmux thì chỉ cần kill server là các process bên dưới cũng được dọn luôn, khá tiện
    • Trường hợp của tôi thì Shift+Enter không được, nhưng Option+Enter sẽ chèn dòng mới (môi trường MacOS, Claude Code)
    • Nếu muốn tránh tạo binding mới thì cũng có thể dùng tổ hợp \\ + Enter
  • Từ khi biết đến Control Mode của tmux, tôi thấy nó đúng là thứ thay đổi cuộc chơi
    Chạy tmux -CC trong iTerm2 thì tab, cuộn, copy/paste, phím tắt, v.v. đều hoạt động theo kiểu native của terminal
    Tab cũng hiển thị đầy đủ về mặt trực quan, đặc biệt hữu ích cho người mới

    • Chính tính năng này là lý do tôi dùng Mac. Trong 10 năm qua chưa có terminal Linux nào triển khai được như vậy
    • Với tôi thì chế độ -CC cũng hoạt động hoàn hảo
    • Không biết ghostty có hỗ trợ không
    • Giờ thì tôi mới hiểu -CC thực sự làm gì
    • Thật sự phải thốt lên vì quá ấn tượng
  • Tôi dùng Alt+số trong tmux để chuyển cửa sổ nhanh
    Ví dụ cấu hình kiểu bind-key -n M-1 select-window -t :1
    Alt-/ cũng có thể mở copy mode kiểu vi
    Trong môi trường Wayland, dùng wl-copy thì có thể sao chép bằng kéo chuột hoặc phím y
    Tôi còn thêm thiết kế kiểu Powerline, nhưng cần powerline-fonts

  • Tôi đã tùy biến tmux quá nhiều đến mức mỗi lần ssh vào server mới lại quên mất cách dùng mặc định
    Giờ tôi dùng cấu hình mặc định. Chỉ có mỗi thiết lập cuộn chuột là lần nào cũng phải đổi

    • Có người hỏi liệu tôi có tạo kho dotfiles để quản lý cấu hình tmux, zsh, v.v. không
    • Chuyện này khá giống với lời nguyền của Emacs. Có thể tùy biến vô hạn, nhưng cuối cùng lại thành một môi trường kỳ lạ chỉ của riêng mình
      Một khái niệm liên quan là The Lisp Curse
    • Tôi cũng gặp vấn đề tương tự, nhưng đã giải quyết bằng cách chỉ thêm các thiết lập không xung đột thay vì ghi đè mặc định
      Ví dụ vẫn giữ Ctrl-b và thêm Ctrl-space làm phím tắt bổ sung
    • Tôi cũng từng có trải nghiệm tương tự với Emacs. Sau khi ổ đĩa hỏng và mất hết cấu hình tùy chỉnh, tôi gần như quay lại trạng thái mặc định
    • Đến mức có cả câu đùa kiểu “Claude, scp cấu hình tmux của tôi sang cái server đó đi”
  • Tôi rất ấn tượng với Control Mode của tmux trong iTerm2
    Nó cho phép điều khiển cửa sổ terminal từ xa thông qua trình quản lý cửa sổ cục bộ
    Bên ghostty cũng đang triển khai tính năng này nên tôi rất mong chờ

  • Nhiều người cho rằng phím prefix mặc định của tmux (C-b) khá khó chịu, nhưng tôi lại thấy chính sự awkward đó là ưu điểm
    Gần như không thể bấm nhầm
    Với tôi, các lệnh chia khung cũng rất trực quan — % gợi cảm giác là đường ngang, còn " giống đường dọc
    Việc reload cấu hình chỉ hay làm lúc đầu, còn giờ thì hầu như không nữa

    • Tôi cũng thích phím prefix mặc định
      Nếu cần thì chỉ việc thêm vào .tmux.conf
      unbind-key -T prefix C-b
      set-option -g prefix C-s
      
      là được. Nếu chỉ dùng local thì cũng không phải lo xung đột
  • Tôi yêu tmux, nhưng cái bẫy là nó cần tới file cấu hình 400 dòng
    Trạng thái mặc định thì không thân thiện lắm, nhưng nếu chịu chỉnh nhiều thì nó thực sự rất tuyệt
    Có thể tham khảo file cấu hình của tôi

    • Tôi chẳng đổi cấu hình gì cả mà vẫn thấy dùng đủ ổn
      Chỉ cần nhớ khoảng 9 phím tắt cần thiết
    • Tôi để file cấu hình của mình ở chỗ có thể wget hoặc curl dễ dàng từ bất kỳ đâu
      Tôi cũng định thêm phiên bản PowerShell
    • Tôi tham khảo cấu hình của jcs rồi chỉ copy vài dòng
      Chỉ trả binding prefix về như cũ
  • Trước đây tôi từng dành cả cuối tuần để đọc cuốn “tmux 2: mouse-free productivity”, và đó là một trong những cuốn sách ảnh hưởng lớn nhất đến năng suất của tôi
    Bản mới nhất vẫn đang được cập nhật → tmux 3: productive mouse-free development

    • Tuy vậy tôi thấy hơi tiếc vì sách không nhắc đến tác giả gốc hay nguồn gốc của tmux
    • Cảm ơn vì đã giới thiệu một tài liệu tham khảo hay