2011-12-04 33 views
6

Tôi sử dụng compctl -K _my_cpl ls để kết nối chức năng tự động hoàn thành của mình với lệnh ls. Hàm trả về một danh sách các tên từ một tệp chỉ mục.Làm thế nào để loại bỏ một không gian bổ sung từ chức năng tự động hoàn thành zsh?

Tuy nhiên, zsh luôn thêm khoảng trống sau mỗi lần hoàn thành. Nếu tôi muốn tự động hoàn thành nhiều thư mục cấp, tôi phải loại bỏ một không gian mỗi lần. Có cách nào để xóa không gian bổ sung giống như tùy chọn -o nospace trong lệnh hoàn thành bash không?

Tôi đã thử nghiệm zstyle ':completion:*' add-space false lệnh và nó không hoạt động. Cảm ơn bạn.

_my_cpl() { 
local cur last opts 

# current word in command line. 
read -cA cur 
last=$cur[-1] 

# grep all directories and file names under current directory level. 
opts=`egrep "${last}[^/]*[$|/]*" ~/index -o |uniq` 

reply=($=opts) 
} 
compctl -K _my_cpl ls 
+0

zsh có mô-đun bashcompinit. Tôi có thể chuyển chức năng hoàn thành bash của tôi thành zsh như một công việc xung quanh. tự động tải bashcompinit bashcompinit – leo

Trả lời

2
compctl -K _my_cpl -S '' ls 

này trả lời câu hỏi bạn hỏi, nhưng nó có thể không được linh hoạt đủ cho những gì bạn muốn làm. Đặc biệt, cách tiếp cận này không cho phép bạn chỉ định một hậu tố khác nhau cho các thư mục và các tệp thông thường. Nếu bạn muốn điều đó, tôi nghĩ bạn cần phải chuyển sang hệ thống hoàn thành "mới" và thực hiện các cuộc gọi riêng đến compadd với các đối số -S khác nhau.

Các vấn đề liên quan