+6

Tối ưu hóa Tmux trong lập trình

Giới thiệu

Đã từ hơn 1 năm rồi từ bài viết trước về tmux của mình vào tháng 5 năm 2023, mình cứ có dự định mãi mà không viết chủ yếu do lười 🥲. Nay nhân ngày nghỉ dài, chúng ta tiếp tục với serires tmux nào. Trong bài viết này, mình sẽ tập trung vào 3 phần chính là :

  • Làm việc hiệu quả với text và buffers trong tmux
  • Session manager for tmux
  • Cài đặt plugin trong tmux

I. Làm việc hiệu quả với text và buffers trong tmux

Khi làm việc với terminal, việc sao chép và dán văn bản là thao tác chúng ta thực hiện hàng ngày, nhiều đến mức khó đếm xuể. Đặc biệt khi sử dụng tmux, bạn sẽ thường xuyên cần cuộn ngược lại output buffer để xem những thông tin đã bị đẩy ra khỏi màn hình. Ngoài ra, việc sao chép văn bản từ tmux để dán vào file khác hoặc chương trình khác cũng là nhu cầu phổ biến. Trong phần này, chúng ta sẽ tìm hiểu các kỹ thuật quản lý văn bản hiệu quả trong tmux:

  • Sử dụng bàn phím để di chuyển trong output buffer của tmux
  • Làm việc với nhiều paste buffer
  • Tương tác với system clipboard

Việc nắm vững các kỹ thuật này sẽ giúp bạn làm việc hiệu quả hơn trong môi trường tmux, đặc biệt khi cần xử lý nhiều thông tin văn bản trong quá trình làm việc với terminal.

Scrolling Through Output with Copy Mode

Khi bạn làm việc với các chương trình trong terminal, đầu ra từ các chương trình này thường bị cuộn ra khỏi màn hình. Nhưng khi bạn sử dụng tmux, bạn có thể sử dụng bàn phím để di chuyển ngược lại qua bộ đệm đầu ra để bạn có thể xem những gì bạn đã bỏ lỡ. Điều này đặc biệt hữu ích cho những lúc bạn đang chạy tests hoặc xem các log files.

Đầu tiên, bạn kích hoạt chế độ Copy mode như sau:

  1. Nhấn PREFIX [ ( ở đây PREFIX theo bài trước là Ctr + A]
  2. Sử dụng các phím di chuyển để điều hướng màn hình

Vì thường edit với Vim, nên để thuận tiện hơn, bạn có thể cấu hình tmux sử dụng các phím di chuyển của Vim bằng cách thêm dòng sau vào file .tmux.conf:

setw -g mode-keys vi

Với setting trên, bạn có thể dùng các phìm h, j, k, l di chuyển trong buffer như di chuyển trong vim chế độ normal.

Di chuyển nhanh trong Buffer:

  • Ctrl-b: Lên một trang
  • Ctrl-f: Xuống một trang
  • g: Nhảy đến đầu bộ đệm
  • G: Nhảy đến cuối bộ đệm

Tìm kiếm trong buffer

  • ?: tìm kiếm ngược lên
  • /: tìm kiếm xuống

Sau khi nhập từ cần tìm, nhấn Enter để nhảy tới kết quả đầu tiên

  • n: chuyển đến kết quả tiếp theo
  • N: chuyển đến kết quả trước đó

Nếu bạn hay dùng vim thì rất quen thuộc với các phím trên rồi ha 😄

Copying and Pasting Text

Việc di chuyển và tìm kiếm thông tin trong output buffer chỉ là một nửa của bài toán quản lý văn bản trong tmux. Phần còn lại là khả năng sao chép và dán văn bản một cách hiệu quả để sử dụng cho các mục đích khác nhau.

Chế độ Copy (Copy mode) của tmux cung cấp cho chúng ta khả năng chọn và sao chép văn bản vào một paste buffer, từ đó có thể dán văn bản này vào nơi khác khi cần thiết.

Sao chép văn bản và dán văn bản test.gif

Để sao chép văn bản trong Copy mode:

  • Di chuyển con trỏ đến vị trí bắt đầu của văn bản mà bạn muốn sao chép.
  • Nhấn Space để bắt đầu chọn văn bản.
  • Di chuyển đến cuối đoạn văn bản và nhấn Enter.
  • Văn bản đã chọn sẽ được sao chép vào buffer và sẵn sàng để dán.

Để dán văn bản đã sao chép vào một pane hoặc cửa sổ khác, nhấn PREFIX ]. Điều này sẽ dán nội dung của buffer gần nhất.

Nhưng cách trên hơi chậm, và không hiểu quả lắm. Chúng ta cùng tìm hiểu cách nhanh hơn.

Capturing a Pane

capture-v2.gif

Bạn cũng có thể sao chép toàn bộ nội dung của một pane bằng lệnh capture-pane trong Command mode (PREFIX :).

Lệnh này sẽ sao chép mọi thứ hiển thị trên pane và lưu nó vào buffer, từ đó bạn có thể dán nội dung này vào bất kỳ đâu.

Dưới đây là nội dung viết lại của hai phần "Showing and Saving the Buffer""Using Multiple Paste Buffers".

Showing and Saving the Buffer

Trong quá trình làm việc, đôi khi bạn muốn kiểm tra nội dung trong buffer hoặc lưu chúng lại thành tệp để sử dụng sau. tmux cho phép bạn thực hiện điều này một cách dễ dàng.

Để hiển thị nội dung của buffer, bạn có thể sử dụng lệnh show-buffer. Thao tác này sẽ hiển thị toàn bộ nội dung hiện tại của buffer lên terminal, giúp bạn nhanh chóng xem lại những gì đã sao chép:

tmux show-buffer

Hoặc bạn có thể sử dụng trong chế độ command của tmux prefix :

show-buffers.gif

Nếu bạn muốn lưu nội dung buffer vào một tệp tin, lệnh save-buffer sẽ giúp bạn làm điều đó. Bạn chỉ cần chỉ định tên tệp mà bạn muốn lưu nội dung:

tmux save-buffer buffer.txt

Lệnh này sẽ lưu tất cả những gì có trong buffer vào tệp buffer.txt.

Bạn cũng có thể kết hợp việc sao chép và lưu nội dung của các pane ngay lập tức bằng cách sử dụng lệnh capture-pane và sau đó là save-buffer, đảm bảo rằng bạn không mất bất kỳ thông tin quan trọng nào trong quá trình làm việc.

Câu lệnh đầy đủ trong chế độ command như sau:

capture-pane; save-buffer buffer.txt

Using Multiple Paste Buffers

list-choose-buffers.gif

Một tính năng mạnh mẽ khác của tmux là khả năng quản lý nhiều paste buffers. Mỗi khi bạn sao chép một đoạn văn bản mới, tmux không xóa ngay buffer cũ mà tạo ra một buffer mới và lưu buffer cũ trong một ngăn xếp. Điều này cho phép bạn giữ lại nhiều đoạn văn bản khác nhau để sử dụng khi cần.

Để xem danh sách các buffers đã lưu, bạn có thể sử dụng lệnh list-buffers:

tmux list-buffers

Danh sách này sẽ hiển thị từng buffer với nội dung và kích thước của chúng. Mỗi buffer mới sẽ được gán một chỉ số, và buffer gần nhất luôn là buffer số 0.

Khi bạn muốn dán một buffer cụ thể, thay vì mặc định dán buffer 0, bạn có thể sử dụng lệnh choose-buffer. Lệnh này sẽ mở ra một danh sách các buffers, cho phép bạn chọn buffer mong muốn để dán:

tmux choose-buffer

Sau khi chọn buffer bạn cần, nhấn Enter, nội dung của buffer sẽ được dán vào pane hiện tại.

Khả năng quản lý nhiều buffers rất hữu ích khi bạn làm việc với nhiều phần văn bản khác nhau trong các dự án phức tạp. Bạn không cần phải lo lắng về việc mất đoạn văn bản đã sao chép trước đó khi sao chép nội dung mới, bởi tmux lưu trữ tất cả chúng để bạn có thể truy cập lại bất cứ lúc nào. Và tmux lưu trữ của tất cả các session.

Remapping Copy and Paste Keys

Nếu bạn là người dùng Vim, bạn có thể muốn thay đổi phím tắt copy và paste để chúng tương tự với lệnh Visual selection và yank của Vim. Bạn có thể remap các phím này trong tệp cấu hình .tmux.conf như sau:

Copy code
bind Escape copy-mode
bind -t vi-copy 'v' begin-selection
bind -t vi-copy 'y' copy-selection
unbind p
bind p paste-buffer

Điều này giúp bạn nhanh chóng vào Copy mode, chọn văn bản với v, sao chép bằng y, và dán bằng p, tăng cường tính nhất quán trong workflow của bạn.

Working with the Clipboard on Linux

Với sự hỗ trợ của tiện ích xclip, bạn có thể tích hợp buffers của tmux với clipboard hệ thống trên Linux, cho phép bạn sao chép văn bản từ tmux trực tiếp sang các ứng dụng khác. Đầu tiên, cài đặt xclip:

sudo apt-get install xclip

Sau đó, thêm dòng lệnh sau vào tệp .tmux.conf để sao chép văn bản trực tiếp vào clipboard hệ thống:

bind C-c run "tmux save-buffer - | xclip -i -sel clipboard"

Bây giờ, sau khi chọn văn bản trong Copy mode, bạn có thể nhấn PREFIX CTRL-c để lưu văn bản đã sao chép vào clipboard hệ thống, sẵn sàng để dán vào các trình duyệt hoặc trình chỉnh sửa văn bản.

xclip.gif

Đúc kết

Việc sử dụng các paste buffer của tmux để di chuyển văn bản giúp bạn có được một "clipboard" trong những tình huống mà bạn không có sẵn, chẳng hạn như khi đăng nhập vào console của server hoặc làm việc với terminal không có giao diện đồ họa. Khả năng cuộn ngược lại lịch sử của một đầu ra console dài cũng là một lợi ích to lớn. Chỉ riêng lý do này đã đáng để cài đặt tmux trực tiếp trên các server của bạn.

Tuy nhiên, quản lý văn bản chỉ là một phần nhỏ trong việc tận dụng sức mạnh của tmux. Để nâng cao hiệu quả làm việc, chúng ta cần xem xét cách quản lý các session một cách hiệu quả và mở rộng chức năng của tmux thông qua việc cài đặt plugin.

Trong phần tiếp theo, chúng ta sẽ tìm hiểu về "Session manager for tmux", một công cụ giúp bạn quản lý các phiên làm việc của mình một cách thuận tiện và có tổ chức hơn.

II. Session manager for tmux

Tiếp theo tới phần mình tương đối thích, nếu bạn là một người dùng tmux thường xuyên, chắc hẳn bạn đã từng gặp khó khăn trong việc thiết lập lại các cửa sổ và panel mỗi khi bắt đầu một phiên làm việc mới. Đó là lúc tmuxp - một công cụ quản lý phiên làm việc tmux - có thể giúp bạn tiết kiệm thời gian và tăng năng suất làm việc. Hãy cùng tìm hiểu về tmuxp và cách nó có thể cải thiện quy trình làm việc của bạn!

Install tmuxp

Để bắt đầu sử dụng tmuxp, bạn cần cài đặt nó trên hệ thống của mình. Tmuxp có thể được cài đặt dễ dàng thông qua pip, trình quản lý gói của Python hoặc qua gói của ubuntu:

pip install --user tmuxp

Debian / ubuntu:

sudo apt install tmuxp

Sau khi cài đặt, bạn có thể kiểm tra phiên bản của Tmuxp đã được cài bằng lệnh:

tmuxp --version

Lợi ích của việc sử dụng tmuxp

  • Tự động hóa thiết lập: Tmuxp cho phép bạn định nghĩa cấu trúc phiên làm việc tmux của mình trong các file cấu hình, giúp bạn khởi động môi trường làm việc một cách nhanh chóng và nhất quán.

  • Tái sử dụng cấu hình: Bạn có thể lưu trữ và tái sử dụng các cấu hình cho các dự án khác nhau, giúp tiết kiệm thời gian thiết lập.

-Quản lý dự án hiệu quả: Tmuxp giúp bạn tổ chức các cửa sổ và panel theo cách phù hợp với quy trình làm việc của từng dự án.

  • Khả năng di động: Các file cấu hình tmuxp có thể được chia sẻ giữa các máy tính hoặc server, giúp bạn duy trì môi trường làm việc nhất quán ở mọi nơi.

Ví Dụ Về Cấu Hình Session với Tmuxp

tmuxp.gif

Hãy xem xét một ví dụ về cách sử dụng tmuxp để thiết lập môi trường làm việc cho một dự án của mình:

  1. Tạo một file cấu hình tmuxp (ví dụ: datnt114.yaml trong thưc mục ~/.tmuxp/ ) với nội dung sau:
session_name: datnt114
windows:
  - window_name: sys
    layout: tiled
    panes:
      - shell_command:
          - btop
      - shell_command:
          - nvitop
      #- shell_command:
      #    - rescuetime

  - window_name: code
    layout: main-horizontal
    panes:
      - shell_command:
          - cd /hdd/learn/python-mastery/
          - nvim README.md

Trong ví dụ này, khi bạn khởi chạy Tmuxp với file cấu hình này, Tmux sẽ tự động mở một phiên làm việc tên là "datnt114" với hai cửa sổ:

Cửa sổ "sys": Pane đầu tiên chạy btop, pane thứ hai chạy nvitop. Cửa sổ "code": Pane đầu tiên vào folder dự án rồi chạy nvim

  1. Để khởi động phiên làm việc này, chỉ cần chạy lệnh dạng tmuxp load /path/to/your/config.yaml, nếu tên bình thường tmuxp sẽ tìm file trong thư mục mặc định ~/.tmuxp/
tmuxp load datnt114

À có 1 tính năng mình cũng hay dùng chính là zoom in, zoom out 1 pannel bằng prefix z

III. Cài đặt plugin trong tmux

Tmux cũng có 1 hệ sinh thái các plugin xung quanh. Trong phần này mình sẽ giúp thiệu các cài đặt cũng như 1 số plugin hữu ích mình hay dùng.

Đầu tiên chúng ta cần tải xuống Tmux Plugin Manager.

git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm

Tiếp theo, là ghi nhớ là phải đặt nó chạy cuối cùng của file config tmux, mình để mặc định ở ~/.tmux.conf

# List of plugins
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'

# Other examples:
# set -g @plugin 'github_username/plugin_name'
# set -g @plugin 'github_username/plugin_name#branch'
# set -g @plugin 'git@github.com:user/plugin'
# set -g @plugin 'git@bitbucket.com:user/plugin'

# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
run '~/.tmux/plugins/tpm/tpm'

Reload lại môi trường TMUX để TPM được thực thi.

Một số plugin hữu ích mình hay dùng:

  • tmux-plugins/tmux-sensible : 1 tập hợp các câu lệnh mọi người hay dùng như lưu lịch sử từ 2k lên 50k dòng,..., có thể trùng với 1 số config mình đã để bên trên
  • Theme mình dùng odedlaz/tmux-onedark-theme
  • tmux-plugins/tmux-resurrect: mình mới tìm được, theo lời của nhà phát hành nguyên văn như sau: "Tmux rất tuyệt, ngoại trừ khi bạn phải khởi động lại máy tính. Bạn sẽ mất tất cả các chương trình đang chạy, thư mục làm việc, bố cục khung, v.v. Có nhiều công cụ quản lý hữu ích, nhưng chúng yêu cầu cấu hình ban đầu và cập nhật liên tục khi quy trình làm việc của bạn phát triển hoặc bạn bắt đầu các dự án mới. tmux-resurrectlưu tất cả các chi tiết nhỏ từ môi trường tmux của bạn để có thể khôi phục hoàn toàn sau khi khởi động lại hệ thống (hoặc khi bạn muốn). Không cần cấu hình. Bạn sẽ cảm thấy như mình không bao giờ thoát khỏi tmux. "
  • Tmux-fzf: Kết hợp fzf để tìm kiếm các câu lệnh các thứ image.png

Bài viết tới đấy là dài, bài này mình cũng ngâm hơi lâu 😅, xin cảm ơn và hẹn các bạn trong các blog tiếp theo.

IV. Tài liệu tham khảo

  1. Matthieu Cneude - Building your Mouseless Development Environment (2021)
  2. Hogan - tmux 2 Productive Mouse-Free Development
  3. Terminal Setup with Zsh + Tmux + Dracula Theme
  4. Tmux Cheat Sheet & Quick Reference: https://tmuxcheatsheet.com/
  5. Tác giả của Tmuxp cũng đưa ra 1 số tài liêu hữu ích: https://leanpub.com/the-tao-of-tmuxhttps://tmuxp.git-pull.com/about_tmux.html
  6. File cấu hình tmux của mình: .tmux.conf

All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí