Tôi là một người dùng tcsh lâu năm, nhưng tất cả những đứa trẻ tuyệt vời dường như đang sử dụng bash hoặc zsh ngày nay (nghĩa là, các mẫu hoàn thành cho git hoặc công cụ có sẵn cho bash và zsh, hiếm khi cho tcsh).
Vấn đề của tôi là cả hai shell đều có các hành vi liên quan đến việc hoàn thành tab khiến tôi phát điên và tôi gặp khó khăn trong việc tìm cách thay đổi chúng theo ý thích.
Ở đây, một vài ví dụ về những gì tôi đã sử dụng để làm trong tcsh mà những người khác làm khác:
/u<TAB>
hoàn thành/usr/
- Sau đó, tab liệt kê nội dung của
/usr/
/usr/li<TAB>
hoàn thành/usr/lib
và danh sáchlib/
vàlibexec/
- Nhấn tab lần thứ hai sẽ hoàn thành
/usr/lib/
- Nhấn tab lần thứ ba liệt kê nội dung của
/usr/lib/
Trong bash, cho dù tôi nhấn tab bao nhiêu lần, nó sẽ không bao giờ đi qua /usr/lib
, yêu cầu tôi gõ dấu gạch chéo, điều mà tôi không muốn làm.
Trong zsh, /usr/li<TAB>
đầu tiên hoàn thành /usr/lib
, sau đó một danh sách tab khác lib/
và libexec/
, tab lần thứ ba hoàn thành /usr/lib/
và tất cả các tab tiếp theo chu kỳ giữa /usr/lib/
và /usr/libexec/
. Tôi không biết làm thế nào để vượt qua điểm này. Tôi chỉ muốn đi từ /usr/li
đến /usr/lib
, sau đó /usr/lib/
, sau đó liệt kê nội dung của nó.
Con trăn cũng vậy. Trong tcsh, tôi gõ pyt<TAB>
, nó hoàn thành python
và danh sách python
, python2.5
, python2.6
, v.v., sau đó một tab thứ hai giải quyết cho python và thêm khoảng trắng. Trong bash, nó yêu cầu tôi nhập khoảng trắng và trong zsh, nó quay vòng vô tận như trong ví dụ đầu tiên.
Bất kỳ trợ giúp trong việc thuần hóa các vỏ này sẽ được đánh giá rất cao. Tôi không thực sự muốn dành thời gian tinh chỉnh các khía cạnh khác của các shell này cho đến khi tôi giải quyết được vấn đề trên.
rec_exact
tùy chọn được đề xuất bên dưới cho zsh: nó thực hiện chính xác những gì tôi muốn, nhưng tôi không nhớ nó xuất hiện trong các tìm kiếm của mình và ngay cả khi có, tôi không chắc tôi đã hiểu rằng đó là thứ tôi đang tìm kiếm .
man bash
/completion