Hoàn thành tab Zsh không hoạt động như mong muốn cho các đường dẫn một phần


17

Tôi muốn hoàn thành mờ không phân biệt chữ hoa chữ thường cho các tệp và thư mục trong zsh. Sau khi đọc hướng dẫn trong vài giờ, đây là những gì tôi nghĩ ra:

zstyle ':completion:*:*:*:*:globbed-files' matcher 'r:|?=** m:{a-z\-}={A-Z\_}'
zstyle ':completion:*:*:*:*:local-directories' matcher 'r:|?=** m:{a-z\-}={A-Z\_}'
zstyle ':completion:*:*:*:*:directories' matcher 'r:|?=** m:{a-z\-}={A-Z\_}'

Ngoài ra, tôi muốn nhấn TABmột lần để hiển thị các lần hoàn thành có thể, chỉ sửa đổi những gì tôi đã nhập nếu có chính xác một lần hoàn thành. Sau đó nhấn TABlần thứ hai sẽ đưa tôi vào chế độ "hoàn thành menu". Dựa trên các hướng dẫn, tôi đã đưa ra điều này:

zstyle ':completion:*' menu select

Bây giờ mọi thứ hoạt động như nó nên ngoại trừ trong một trường hợp. Tôi có hai thư mục Desktop.rstudio-desktoptrong thư mục nhà của tôi. Vì tôi có setopt globdots, tôi mong đợi gõ như sau:

$ cd ~/dktop<TAB>

để lại lệnh của tôi khi được nhập và hiển thị dưới dạng các ứng cử viên hoàn thành Desktop.rstudio-desktop. Thay vào đó, nó loại bỏ dktop , để lại cho tôi những điều sau đây:

$ cd ~/

Tôi đã xem tất cả các hướng dẫn, hướng dẫn liên quan, câu hỏi về Stack Exchange và nhiều nguồn khác. Nhưng bất cứ điều gì tôi làm, tôi không thể làm cho công việc này.

Tuy nhiên, điều thú vị là, nếu tôi đang ở trong thư mục chính và gõ như sau thì mọi thứ sẽ hoạt động như mong đợi:

$ cd dktop<TAB>

Đó là, đó chỉ là một vấn đề với các đoạn đường dẫn không dẫn đầu (và bạn có thể thấy C-x hđiều này tương ứng với directoriesthẻ hơn là local-directoriesthẻ được sử dụng).

Để dễ tái tạo, đây là một ~/.zshrccái sẽ tái tạo lại tình huống và hành vi được mô tả ở trên (được thử nghiệm trên một máy ảo El Capitan mới với zshtừ Homebrew).


Không thể sinh sản. zsh 5.3.1trên Arch Linux. cd ~/dktop<tab>năng suất cd ~/Desktop.
PythonNut

@PythonNut Với zsh 5.3.1trên OS X, sự cố không được sao chép. Thật thú vị khi có sự khác biệt giữa các hệ điều hành.
Radon Rosborough

1
@PythonNut Trên thực tế, tôi cá rằng điều này là do Linux phân biệt chữ hoa chữ thường và macOS không phân biệt chữ hoa chữ thường.
Radon Rosborough

Giống như một lời nhắc nhở thân thiện, không phải tất cả các máy Mac / macOS đều không phân biệt chữ hoa chữ thường, nó phụ thuộc vào thời tiết mà đĩa của bạn được định dạng không phân biệt chữ hoa hay chữ thường.
konqui

Câu trả lời:


1

Một giải pháp có thể là làm:

bindkey "^I" expand-word

Điều này sẽ khiến tab mở rộng ~/đến đường dẫn tuyệt đối.


Có thể tôi đang thiếu một cái gì đó, nhưng tôi không thấy điều này liên quan đến bất kỳ cách nào để hoàn thành tab mờ hoặc để giải quyết vấn đề được nêu ở trên. Nếu tôi làm như bạn đề xuất, thì nhấn TAB sẽ cho tôi cd /Users/raxod502/dktopvà hoàn thành bị vô hiệu hóa.
Radon Rosborough

@RadonRosborough Hy vọng là bằng cách mở rộng ~/đến con đường tuyệt đối của nó, việc hoàn thành mờ sẽ bắt đầu hoạt động. Có vẻ như một trong những trường hợp vấn đề là nó đánh giá nó một lần nhưng bạn thực sự cần nó để đánh giá hai lần để làm việc, vì vậy có đường dẫn tuyệt đối thay vì ~/có nghĩa là nó sẽ quay trở lại chỉ cần một đánh giá. Nhưng tào lao, tôi xin lỗi, tôi đã quên rằng bindkey thay thế các ràng buộc cũ và tôi không thể tìm thấy bất cứ điều gì nói nếu thậm chí có thể liên kết hai hàm với một khóa. Không có ràng buộc của tôi, việc hoàn thành của bạn có hoạt động như dự định khi được cung cấp đường dẫn tuyệt đối không?
ConstipatedNinja

Không. Không có sự khác biệt cho dù đường dẫn đầu vào là ~/dktophay /Users/raxod502/dktop; kết quả là như nhau, cụ thể dktoplà bị xóa khi tôi nhấn TAB.
Radon Rosborough
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.