Thiết lập tab hoàn thành các đường dẫn trong bash hoặc zsh để giống với tcsh


4

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ách lib/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/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//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.


Một phần của việc học một môi trường mới là làm quen với cách nó hoạt động. man bash /completion
Ignacio Vazquez-Abrams

Tôi có thể giúp đỡ nhưng nghĩ rằng nhận xét này vừa hạ thấp vừa gợi ý rằng tôi thích nghi với cách hoạt động của bash. Xin hãy sửa tôi nếu tôi sai, tôi thích.
Olivier 'Ölbaum' Scherler

Điều đó không có nghĩa là hạ thấp, nhưng thực tế là phần mềm khác nhau có thể có các tính năng hơi khác nhau.
Ignacio Vazquez-Abrams

Do đó, tôi yêu cầu, bởi vì tôi không tìm ra cách để làm một cái gì đó không nhất thiết có nghĩa là nó không thể được thực hiện. :) Giống như 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 .
Olivier 'Ölbaum' Scherler

Câu trả lời:


2

Hoàn thành tốt việc mô tả chính xác các yêu cầu của bạn, nhưng tôi không chắc tôi thực sự hiểu những gì bạn muốn làm nếu có sự mơ hồ, ví dụ: sau /usr/lib, những gì bạn mong đợi Chuyển hướng chìa khóa để làm

Nếu tôi thử tcsh, sau /usr/lib, các Chuyển hướng danh sách chính liblibexec. Bạn có thể tái tạo hiệu ứng này trong zsh với setopt no_auto_menu, nhưng điều này có thể thay đổi hành vi theo cách bạn không thích trong các trường hợp khác. Nếu bạn cũng làm setopt rec_exact, hành vi trông giống như những gì bạn mô tả: sau /usr/li, Chuyển hướng chèn b, sau đó khác Chuyển hướng chèn /và một danh sách thứ ba hoàn thành trong /usr/lib/.

Các tùy chọn hoàn thành zsh được ghi lại bên dưới hoàn thành man zshoptions.


Chính xác là như vậy, cảm ơn rất nhiều. Trong khi đó, tôi cũng phát hiện ra về oh-my-zsh, bắt đầu điều chỉnh lời nhắc của mình và tìm kiếm một giải pháp thay thế cho Terminal của Apple có hỗ trợ tùy chỉnh màu sắc. Chắc sẽ vui lắm đây! :)
Olivier 'Ölbaum' Scherler

1

Đối với bash: trong của bạn ~/.inputrc đặt:

set show-all-if-unmodified  on
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.