Sao chép nội dung một phần file code từ máy ở xa

Giả sử bạn có một file source code trên máy ở xa (truy cập qua SSH) và bạn muốn sao chép một phần nội dung sang máy trước mặt. Có nhiều cách để làm, nhưng tôi muốn trình bày một cách hiệu quả, vì sẽ tận dụng tính năng chọn khối rất tiện lợi của Helix.

Ví dụ trong hình sau, cửa sổ bên trái là đang truy cập vào một máy ở xa, qua SSH, trên đó tôi đang mở một file source code bằng Helix. Cửa sổ bên phải là một trình soạn thảo, ví dụ Geany, của máy trước mặt. Tôi muốn sao chép source của hàm enable_mqtt_on_gsm_modem sang Geany. Cửa sổ bên trái, ta nên dùng một ứng dụng Terminal hiện đại một tí, ví dụ Kitty, WezTerm, Alacritty vì một tính năng mà tôi sẽ giải thích sau.

Hình 1

Bên file nguồn, ta sẽ di chuyển con trỏ đến bất cứ dòng nào phía trong thân hàm enable_mqtt_on_gsm_modem, sau đó nhấn m. Helix sẽ hiện ra menu của lệnh m, nhấn a để chọn "Select around object". Sau đó Helix lại hiện ra menu của "m a".

Hình 2

Lần này bấm "f", Helix sẽ bôi chọn toàn bộ code của hàm enable_mqtt_on_gsm_modem.

Hình 3

Ở đây, nếu ta không dùng những ứng dụng "modal editor" như Helix, Vim, NeoVim... thì ta sẽ phải chọn khối bằng chuột, sẽ mỏi cổ tay và vai lắm.

Tiếp đến, bấm phím "Space", Helix sẽ hiện lên menu của "Space":

Hình 4

Bấm "y". Helix sẽ sao chép nội dung đã chọn vào clipboard, và có dòng thông báo dưới đáy "Yanked 1 selection to register +":

Hình 5

Có một điểm thú vị đáng lưu ý ở đây là, ta đang chạy Helix trên máy ở xa, nên thông thường Helix sẽ sao chép vào clipboard của máy ở xa. Tuy nhiên, khi tạo cửa sổ dòng lệnh, nếu ta tạo bằng một phần mềm terminal thuộc loại đã kể ở trên, thì terminal sẽ giúp chuyển nội dung đó vào clipboard của máy trước mặt!

Vì nội dung cần sao chép đã ở trong clipboard của máy trước mặt, ta chỉ việc nhấn Ctl + V để dán vào phần mềm Geany:

Hình 6

Trong hình thì bạn còn thấy dòng chữ màu vàng "Text copied to system clipboard", đó là do ở máy phía bên kia tôi còn dùng thêm Zellij, một phần mềm để tôi có thể mở nhiều "cửa sổ" để làm việc mà chỉ cần dùng chung một kết nối SSH (tương tự tmux truyền thống). Mỗi khi nó nhận biết có nội dung nào vừa được sao chép vào clipboard thì nó sẽ báo dòng chữ đó. Tác dụng chính của Zellij thì không liên quan đến chủ đề của bài này nên tôi không nói nhiều về nó, nhưng có một tính năng liên quan là mỗi khi bạn đang ở trong Zellij mà dùng chuột bôi vào đoạn text nào thì nó cũng tự động sao chép đoạn text đó vào clipboard!

Như vậy tôi đã trình bày xong một ví dụ để tận dụng những phần mềm trong môi trường dòng lệnh để làm việc hiệu quả. Mấu chốt là chọn những phần mềm:

  • Text editor với khả năng nhận dạng những đối tượng theo ngữ nghĩa của code.
  • Terminal với nhiều tính năng tiên tiến (mặc dù tính năng tiên tiến lại không đi cùng với "giao diện đẹp" như đã thấy trong hình).

Thông tin bên lề:

Source code bên trên là của một firmware cho thiết bị IoT mà tôi đang viết. Code được viết bằng ngôn ngữ Rust và framework Embassy.

Hàng ngày thì tôi làm việc trên máy ở xa là chính, như đã chia sẻ trong bài Làm việc từ xa bằng máy tính ở nhà.