Một lập trình viên đã chia sẻ quy trình làm việc tinh vi dựa trên terminal kết hợp tmux, nvim và các script tùy chỉnh để tạo ra một môi trường phát triển có thể sánh ngang với các IDE hiện đại. Thiết lập này cho thấy cách các công cụ dòng lệnh truyền thống có thể được nâng cấp để cung cấp khả năng điều hướng file liền mạch, chỉnh sửa từ xa và các tính năng phát triển tích hợp.
Các công cụ chính được sử dụng:
- tmux: Terminal multiplexer để quản lý phiên làm việc và điều khiển panel
- nvim: Trình soạn thảo văn bản Neovim với các tính năng nâng cao
- ripgrep (rg): Công cụ tìm kiếm văn bản nhanh
- zoxide: Điều hướng thư mục thông minh
- Các script Perl tùy chỉnh: Mở file và tích hợp tmux
Hệ thống điều hướng file tùy chỉnh thay thế các tính năng GUI
Quy trình làm việc tập trung xung quanh một biểu thức chính quy phức tạp tự động phát hiện đường dẫn file trong đầu ra terminal, cho phép các lập trình viên click vào bất kỳ tên file nào từ kết quả grep, thông báo lỗi hoặc build log để mở ngay lập tức trong trình soạn thảo. Điều này loại bỏ chu kỳ sao chép-dán tẻ nhạt thường làm chậm quá trình phát triển dựa trên terminal. Hệ thống hoạt động bằng cách phân tích lịch sử cuộn của tmux và làm nổi bật các đường dẫn file được phát hiện, sau đó có thể được mở bằng một phím đơn giản.
Lập trình viên đã dành thời gian đáng kể để tạo ra một mẫu regex nhận diện các định dạng đường dẫn file khác nhau, bao gồm đường dẫn tương đối, số dòng và tham chiếu cột. Mặc dù thừa nhận là phức tạp, việc tự động hóa này cung cấp chức năng ctrl-click tương tự như trong các IDE hiện đại nhưng hoạt động trên mọi đầu ra terminal.
Phát triển từ xa không cần phụ thuộc cục bộ
Một tính năng nổi bật là khả năng làm việc trên các codebase từ xa mà không cần clone chúng về máy cục bộ. Thiết lập sử dụng SSH để kết nối đến server từ xa chạy tmux, nơi mọi quá trình phát triển diễn ra. Các file được mở trong các instance nvim chạy trên máy từ xa, nhưng trải nghiệm cảm thấy liền mạch từ terminal cục bộ. Cách tiếp cận này loại bỏ nhu cầu duy trì môi trường phát triển giống hệt nhau trên nhiều máy.
Quy trình làm việc cũng bao gồm tính năng duy trì phiên, cho phép các lập trình viên ngắt kết nối và kết nối lại với các phiên làm việc đang diễn ra mà không mất ngữ cảnh. Điều này đặc biệt có giá trị khi chuyển đổi giữa các máy khác nhau hoặc xử lý các kết nối mạng không ổn định.
Tranh luận cộng đồng về độ phức tạp của công cụ
Cộng đồng kỹ thuật có phản ứng trái chiều đối với các thiết lập terminal phức tạp như vậy. Một số lập trình viên đánh giá cao sức mạnh và khả năng tùy chỉnh, trong khi những người khác đặt câu hỏi liệu chi phí bảo trì có biện minh cho các lợi ích hay không. Những người chỉ trích chỉ ra rằng các trình soạn thảo hiện đại như VSCode đã cung cấp hầu hết các tính năng này với ít nỗ lực cấu hình hơn.
Tôi không thể lương tâm khuyên điều này cho bất kỳ ai khác, tất cả các script của tôi đều mong manh và có thể sẽ bị hỏng nếu bạn nhìn chúng sai cách, điều này không lý tưởng nếu bạn không tự viết chúng và không biết bắt đầu debug từ đâu.
Tuy nhiên, những người ủng hộ lập luận rằng việc hiểu và kiểm soát môi trường phát triển của bạn mang lại lợi ích lâu dài. Họ nhấn mạnh rằng các quy trình làm việc dựa trên terminal cung cấp khả năng script hóa và tích hợp với các công cụ hệ thống vượt trội, làm cho chúng linh hoạt hơn các lựa chọn thay thế GUI.
Các Công Cụ Thay Thế Được Đề Cập:
- fish + zoxide + fzf: Cung cấp tính năng tìm kiếm mờ và điều hướng thư mục
- qf: Công cụ lựa chọn file từ đầu ra terminal
- vim-remote/code/emacsclient: Tích hợp editor từ xa
- atuin: Quản lý lịch sử shell nâng cao
- kitty/wezterm: Các trình giả lập terminal hiện đại với tính năng nâng cao
Cải thiện hiệu suất và năng suất
Lập trình viên báo cáo những cải thiện năng suất đáng kể, đặc biệt là giảm độ trễ so với VSCode với các plugin vim. Thiết lập loại bỏ xung đột keybinding giữa các công cụ khác nhau và cung cấp điều hướng file nhanh hơn khi làm việc với các codebase lớn. Khả năng script hóa các tương tác terminal cũng cho phép các quy trình làm việc tùy chỉnh mà sẽ yêu cầu phát triển plugin trong các IDE truyền thống.
Cách tiếp cận này chứng minh cách kết hợp các công cụ Unix trưởng thành có thể tạo ra môi trường phát triển mạnh mẽ. Mặc dù thiết lập ban đầu đòi hỏi đầu tư thời gian đáng kể, kết quả là một quy trình làm việc được cá nhân hóa cao và hiệu quả thích ứng với các nhu cầu phát triển cụ thể.
Cuộc thảo luận làm nổi bật một căng thẳng đang diễn ra trong phát triển phần mềm giữa sự tiện lợi và kiểm soát. Trong khi các IDE hiện đại cung cấp năng suất tức thì, các quy trình làm việc terminal tùy chỉnh cung cấp khả năng tích hợp và tự động hóa sâu hơn cho các lập trình viên sẵn sàng đầu tư thời gian để xây dựng chúng.
Tham khảo: how i use my terminal