Theo mặc định, công cụ hoàn thành của zsh chỉ cố gắng thêm một cái gì đó vào những gì bạn nhập. Bạn đã cấu hình nó để thử thêm tiền tố. Công cụ cấu hình hoàn thành tương tác đơn giản ( compinstall) cung cấp điều này trong điều khiển kết hợp của → → hoàn thành chuỗi con. Điều này chèn một dòng như thế này trong của bạn .zshrc:
zstyle ':completion:*' matcher-list '' 'l:|=* r:|=*'
Các zstylecài đặt hoàn thành (chủ yếu) cài đặt hoàn thành. Các matcher-listphong cách hoàn thành là một danh sách các cách thử liên tiếp, dừng lại khi có ít nhất một trận đấu. Chuỗi rỗng có nghĩa là hoàn thành mặc định (chỉ có hậu tố). Câu thần chú điều khiển phù hợpl:|=* r:|=* có nghĩa là thử kết hợp tiền tố *và kết hợp hậu tố *, tức là bất kỳ tiền tố và hậu tố.
Bạn có thể cấm các tiền tố bắt đầu bằng _hoàn toàn. Điều này vẫn cho phép hoàn thành các từ bắt đầu _và hoàn thành bằng cách thêm tiền tố, nhưng tiền tố có thể không bắt đầu bằng _.
zstyle ':completion:*' matcher-list '' 'l:|=[^_]* r:|=*'
Điều này áp dụng cho tất cả các lần hoàn thành, không chỉ hoàn thành tên lệnh. Tôi không biết làm thế nào để hạn chế điều này với tên lệnh.
Cần có một cách để loại trừ chính xác hơn các tên lệnh bắt đầu _, nhưng tôi không biết làm thế nào. Một khởi đầu đầu tiên là với ignored-patternsphong cách hoàn thành.
zstyle ':completion:*:*:-command-:*:*' ignored-patterns '_*'
Điều này không bao gồm các trận đấu bắt đầu bằng _; tuy nhiên, nếu không có kết quả khớp, thì zsh sẽ thử lại mà không bỏ qua các quy tắc. Điểm hay của việc này là nếu lệnh bắt đầu bằng dấu gạch dưới ở vị trí đầu tiên, nó sẽ được hoàn thành trong lần chuyển thứ hai này. Phần xấu là zsh do đó sẽ cố gắng thêm một dấu gạch dưới anyway nếu không có trận đấu, vì vậy nếu bạn có vivà viewnhưng không phải vimsau đó nhấn Tabsau visẽ cung cấp vivà viewnhưng không _vim, nhưng nếu bạn gõ vimsau đó hoàn thành sẽ cung cấp _vim.