Làm thế nào để ngăn chặn zsh từ không gian ăn trước biểu tượng đường ống?


17

Khi tôi nhập một khoảng trắng theo sau là ký hiệu ống '|'trên dòng lệnh zsh, zsh sẽ ăn khoảng trắng, đặt ký hiệu ống trực tiếp lên so với từ trước đó. Làm thế nào để tôi ngăn chặn nó làm điều đó? Tôi không chắc chắn về bất kỳ quy ước phong cách nào có thể, nhưng tôi thích một không gian ở cả hai bên của biểu tượng đường ống để dễ đọc. Tôi đang sử dụng oh-my-zsh khá nhiều.

Giải pháp

Dựa trên câu trả lời của mpy bên dưới, tôi đã sử dụng giải pháp sau:

Theo mặc định, ZLE_REMOVE_SUFFIX_CHARS không được xác định trong zsh / ohmyzsh. Khi không xác định, nó hoạt động như thể nó là:

ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&|'

Tôi đã thêm định nghĩa sau vào ~ / .zshrc:

ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&'

(tất cả ngoại trừ đường ống) và uy tín, hoàn hảo! vấn đề đã biến mất


1
đầu tiên thử lại bằng cách sử dụng zsh -f(để bỏ qua việc tải cấu hình của bạn). Bạn sẽ nhận thấy rằng zsh sẽ không làm điều đó nữa. Sau đó, bạn sẽ phải đào (rất có thể) vào oh-my-zsh để tìm hiểu xem nó gây ra điều đó như thế nào ;-)
Francisco

Câu trả lời:


17

Tôi cho rằng bạn có nghĩa là khi bạn TABhoàn thành một lệnh / tên tệp, một khoảng trắng sẽ được thêm tự động, nhưng sau khi nhấn |nó sẽ biến mất một lần nữa. Nếu không, tôi không thể tái tạo hiệu ứng đó.

Tuy nhiên, trong trường hợp đó, giải pháp nên đơn giản như

ZLE_REMOVE_SUFFIX_CHARS=""

Giải thích là một chút khó khăn, vì vậy tôi chỉ cần trích dẫn man zshparam

ZLE_REMOVE_SUFFIX_CHARS/ ZLE_SPACE_SUFFIX_CHARS Các tham số này được sử dụng bởi trình chỉnh sửa dòng. Trong một số trường hợp, hậu tố (thường là dấu cách hoặc dấu gạch chéo) được thêm bởi hệ thống hoàn thành sẽ bị xóa tự động, vì lệnh chỉnh sửa tiếp theo không phải là ký tự có thể chèn hoặc do ký tự được đánh dấu là yêu cầu xóa hậu tố.

Các biến này có thể chứa các bộ ký tự sẽ khiến hậu tố bị xóa. Nếu ZLE_REMOVE_SUFFIX_CHARS được đặt, các ký tự đó sẽ khiến hậu tố bị xóa; nếu ZLE_SPACE_SUFFIX_CHARSđược đặt, các ký tự đó sẽ khiến hậu tố bị xóa và được thay thế bằng khoảng trắng.

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;&|'

Nếu ZLE_REMOVE_SUFFIX_CHARSđược đặt nhưng trống, không có ký tự nào có hành vi này. ZLE_SPACE_SUFFIX_CHARS được ưu tiên, sao cho như sau:

ZLE_SPACE_SUFFIX_CHARS=$'&|'

gây ra các ký tự &|loại bỏ hậu tố nhưng để thay thế nó bằng một khoảng trắng.

Để minh họa sự khác biệt, giả sử rằng tùy chọn AUTO_REMOVE_SLASHcó hiệu lực và thư mục DIR vừa được hoàn thành, với một phụ lục /, theo đó người dùng gõ &. Kết quả mặc định là DIR&. Với ZLE_REMOVE_SUFFIX_CHARSbộ nhưng không bao gồm &kết quả là DIR/&. Với ZLE_SPACE_SUFFIX_CHARSthiết lập để bao gồm &kết quả là DIR &.

Lưu ý rằng một số hoàn thành nhất định có thể cung cấp loại bỏ hậu tố hoặc hành vi thay thế riêng của chúng ghi đè lên các giá trị được mô tả ở đây.


Vâng, tôi đã không nhận thấy điều đó cho đến khi bạn đề cập đến nó, nhưng nó chỉ xảy ra sau khi hoàn thành tab, cảm ơn vì câu trả lời, điều này mang lại cho tôi những gì tôi cần :)
scanny
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.