Giữ khoảng trống sau khi hoàn thành cho một số ký tự trong zsh


6

Zsh có một chút tự động hóa liên quan đến hoàn thành hầu hết thời gian: sau khi nhấn Tab, một khoảng trắng được chèn tự động (hoặc một số ký tự thích hợp khác, chẳng hạn như ,bên trong dấu ngoặc nhọn).

Tôi muốn giữ tính năng này trừ một trường hợp: khi tôi gõ &hoặc |sau khi nhấn Tab, tôi không muốn xóa khoảng trống. Tôi thích khoảng trống được xóa trên a ;và tôi chắc chắn muốn loại bỏ dấu phẩy được chèn tự động khi nhấn Tab }vào bảng liệt kê dấu ngoặc nhọn.

Tính năng này hoạt động theo mặc định cả trong các hệ thống hoàn thành của cũ cũ ( compctl) và các compaddhệ thống hoàn thành mới (trên ). Tôi chỉ quan tâm đến hệ thống mới.

Làm cách nào tôi có thể điều chỉnh triệt tiêu tự động của hậu tố tự động được chèn khi hoàn thành?

Câu trả lời:


8

Tính năng này có thể được điều chỉnh với ZLE_REMOVE_SUFFIX_CHARSZLE_SPACE_SUFFIX_CHARScác tham số shell.

  • Nếu ZLE_REMOVE_SUFFIX_CHARSbiến được đặt, nó sẽ chứa một tập hợp các ký tự mà khi gõ vào sẽ gây ra các hậu tố tự động từ khi hoàn thành sẽ bị xóa. Nếu ZLE_REMOVE_SUFFIX_CHARSkhông được đặt, hành vi mặc định tương đương với

    ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&|'
  • Đối với các ký tự được đặt trong hậu ZLE_SPACE_SUFFIX_CHARStố được thay thế bằng một khoảng trắng. Nó cũng được ưu tiên hơnZLE_SPACE_SUFFIX_CHARS


Vì vậy, để có được hành vi mong muốn của bạn, nó là đủ để thiết lập

ZLE_SPACE_SUFFIX_CHARS=$'|&'

Có vẻ như phần tự động được chèn ,trong bảng liệt kê dấu ngoặc luôn bị loại bỏ khi gõ }.

Mặc dù zshparam(1)đề cập rằng các hệ thống hoàn thành nhất định có thể ghi đè hành vi này, nó dường như chỉ hoạt động tốt với "mới" compsys(bạn đã gọi nó compadd)

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.