Tự động hoàn tất lệnh trong fish shell khi sử dụng go Cobra
Ngày cập nhật: 25-04-2025 | Lượt xem: 728 | Số từ: 658 | Phân loại: golang
Tiếp nối các bài viết trước, sau khi tôi đã hoàn thành việc phân tích cú pháp struct bằng AST trong Golang và tự động tạo mã CRUD, tôi tiếp tục thêm một số tính năng mới. Như vậy, công cụ hỗ trợ lập trình tự động của tôi gần như đã hoàn thiện. 😊
Tuy nhiên, khi sử dụng trong dự án thực tế, vẫn còn một vài điểm chưa hài lòng — cụ thể là không thể hoàn tất lệnh tự động trong môi trường fish shell. Các lệnh mà chính tôi cũng khó nhớ rõ, mỗi lần đều phải dùng lệnh help
hoặc tham khảo tài liệu để tìm kiếm thông tin. Điều này đôi khi gây bất tiện. Tôi liền nghĩ đến việc có thể triển khai chức năng tự động gợi ý lệnh tương tự như công cụ smug hay không. Sau khi tra cứu, hóa ra điều đó hoàn toàn khả thi nhờ vào tính năng sẵn có của Cobra.
Thư viện Cobra cung cấp sẵn chức năng tạo script hoàn tất lệnh (autocompletion) cho nhiều loại shell phổ biến như: fish, bash, zsh, và powershell.
Ví dụ, nếu tên công cụ của bạn là go_snip
, bạn có thể kiểm tra cách tạo file cấu hình autocompletion cho fish bằng lệnh sau:
|
|
Nếu bạn chưa từng cấu hình autocompletion trên fish shell trước đây, hãy tạo thư mục chứa các tệp hoàn tất lệnh:
|
|
Sau đó, tiến hành xuất file cấu hình với lệnh:
|
|
Lúc này, bạn đã có thể tận hưởng trải nghiệm tự động hoàn tất lệnh rồi!
Hiệu quả thực tế
Chỉ cần nhấn phím Tab một lần để xem gợi ý lệnh, hoặc nhấn hai lần Tab để liệt kê tất cả các lệnh khả dĩ.

Nội dung file cấu hình fish là gì?
Tò mò quá nên tôi mở file ~/.config/fish/completions/go_snip.fish
ra xem thử. Bỏ qua phần định nghĩa hàm đầu tiên, nội dung bên trong trông rất phức tạp, gần như là “chữ nghĩa kỳ quái” đối với người không rành về fish shell.
|
|
Khi thêm lệnh mới, có cần cập nhật lại không?
Giả sử tôi thêm một lệnh con mới bằng cách:
|
|
Không cần thiết phải cập nhật lại file autocompletion fish. Cấu hình trước đó đã đủ thông minh để nhận diện và liệt kê tất cả các lệnh mới.
Cấu trúc thư mục cấu hình fish
Dưới đây là sơ đồ cây thư mục cấu hình fish:
|
|
Ghi vào Makefile
Việc thủ công thực hiện các bước trên không dễ nhớ, đặc biệt khi bạn làm việc trên nhiều máy khác nhau. Vì vậy, tốt nhất là bạn nên lưu lại quy trình này trong một file Makefile để thuận tiện hơn khi cần thiết.
Hy vọng bài viết này sẽ giúp bạn dễ dàng hơn trong việc tích hợp chức năng tự động hoàn tất lệnh khi phát triển CLI ứng dụng bằng Go và Cobra trong môi trường fish shell. Nếu bạn thấy hữu ích, đừng quên chia sẻ nhé!