Câu trả lời:
Tôi biết về https://github.com/mgalgs/fuzzy_bash_completion , một nhóm các hàm shell được sử dụng với complete
.
Tôi nghĩ rằng chúng ta có thể làm tốt hơn một chút, ngắn gọn hơn. Đã đến lúc để mở .bashrc hoặc .profile của bạn ...
Móc cơ bản chúng tôi sử dụng là:
complete -o nospace -o filenames -F fuzzypath cd ls cat
Tùy chọn -F có nghĩa là sử dụng hàm shell để hoàn thành tab, trong đó các tùy chọn được đặt trong COMPREPLY
biến. Ví dụ:
hàm fuzzypath () { nếu [-z $ 2] sau đó TƯƠNG THÍCH = (`ls`) khác TRỰC TIẾP = `echo" $ 2 "| gsed 's | [^ /] * $ ||' ` BASENAME = `tiếng vang" $ 2 "| gsed 's |. * / ||' ` LỌC = `echo" $ BASENAME "| gsed 's |. | \ 0. * | g'` COMPREPLY = (`ls $ TRỰC TIẾP | grep -i" $ LỌC "| gsed" s | ^ | $ TRỰC TIẾP | g "`) fi }
nơi DIRPATH
là tất cả mọi thứ trước cuối cùng / trên con đường bạn đang nhập và BASENAME
là nơi con trỏ của bạn hiện đang ở.
FILTER
là nơi mà tính năng mờ xuất hiện. Về cơ bản, hãy lấy BASENAME
và chèn một .*
khoảng giữa mỗi char để tạo ra biểu thức fuzz của chúng ta.
Phần còn lại chỉ là kết hợp regex với ls để sản xuất COMPREPLY
. Bạn có thể tìm thấy những điều thông minh hơn để làm ở đây, có thể với find
.
Tôi cũng thấy http://fahdshariff.blogspot.com/2011/04/writer-your-own-bash-completion.html là hữu ích.
Bạn có thể thấy fzf hữu ích. Đây là một công cụ tìm mờ mục đích chung được viết bằng Ruby có thể được sử dụng với bất kỳ danh sách nào: tệp, quy trình, lịch sử lệnh, nhánh git, v.v.
Kịch bản cài đặt của nó sẽ thiết lập CTRL-T
keybinding cho shell của bạn. GIF sau đây cho thấy cách nó hoạt động.
fzf
.. (tput sc) và sau đó khôi phục lại bằng tput rc
..
Để đi cùng với câu trả lời khác của bạn, bạn có thể muốn xem xét zsh. Nó tương thích ngược với bash để bạn có thể sử dụng nó như một sự thay thế, nhưng nó hỗ trợ các tính năng được mở rộng đáng kể và một trong số đó là tăng cường hoàn thành tab nhận biết ngữ cảnh.
Câu hỏi thường gặp về hoàn thành zsh mở rộng về các trường hợp sử dụng, nhưng tôi tin rằng theo ví dụ của bạn, bạn sẽ quan tâm nhất đến COMPLETE_IN_WORD
chức năng này. Nó không hoàn toàn là hành vi mong muốn, nhưng nó gần. Điểm chính là có rất nhiều cách để mở rộng chức năng cơ bản theo cách có thể dễ tiếp cận hơn so với sử dụng bash.
Đây là một phần mở rộng kết hợp mờ sẽ gần đúng những gì bạn muốn cụ thể hơn; trận đấu mờ
Đối với một số ý tưởng, bạn có thể xem qua khung oh-my-zsh phổ biến có một số chức năng để quản lý zsh và mở rộng nó. Đó là nhiều hơn bạn muốn, rất có thể, nhưng trong các plugin, bạn sẽ lưu ý các tập lệnh hoàn thành tự động cho nhiều vai trò khác nhau. Để có được một ý tưởng về các khả năng.
cat Th
+tab
?