2010-09-26 33 views
11

Hoàn thành Zsh là một con thú khá phức tạp, và tôi thấy trang người đàn ông rất khó đọc, đặc biệt là các ví dụ thiếu (đơn giản) của tất cả các dạng optspec khác nhau, v.v. sẽ được đánh giá cao nhất.Tài nguyên hoàn thành Zsh?

Ví dụ ở đây là những gì tôi đang gặp khó khăn vào lúc này và trang zshcompsys không cung cấp bất kỳ giải thích rõ ràng nào. Tôi có

#compdef mtt2 

_arguments -s : \ 
    '-h' '--help' \ 
    '-V' '--version' \ 
    ':foobars:(foo bar baz)' 

Bây giờ, khi tôi gõ mtt2 <TAB> tôi chỉ cung cấp foo, barbaz như hoàn tất, tại sao không -h, --help, vv, cũng? Tôi cần phải làm gì để vượt qua _arguments để được cung cấp tất cả các khả năng?

+0

Bạn cần phải gõ 'mtt2 - 'nếu bạn muốn xem các tùy chọn. –

+0

@Bertrand, có chính xác, và đó là lý do tại sao tôi hỏi câu hỏi, tôi muốn xem * tất cả * có thể hoàn thành trên 'mtt2 '. – Magnus

Trả lời

5

Bạn cần bắt đầu đối số mà bạn hoàn thành bằng dấu gạch ngang (tôi có nghĩa là đối số mà bạn nhập để kiểm tra, không phải đối số _arguments). Bạn có thể xem zstyle, cố gắng vượt qua -h và những người khác giống như :foobars: hoặc thậm chí trực tiếp sử dụng compadd. Ví dụ:

  1. Trực tiếp sử dụng compadd:
     
    #compdef test 
    A=(-h --help -V --version foo bar baz) 
    compadd -a A 
    
  2. Đi qua -h và những người khác giống như :foobars::
     
    #compdef test 
    A=(-h --help -V --version) 
    _arguments \ 
        - foobars \ 
        ':foobars:(foo bar baz)' \ 
        - options \ 
        ":arguments:($A)" 
    
    hoặc
     
    A=(-h --help -V --version foo bar baz) 
    _arguments \ 
        ":::($A)" 
    
  3. zstyle điều khiển hoàn phong cách. Nó được mô tả trong phần «COMPLETION SYSTEM CONFIGURATION» trong man zshcompsys và có thể có một tùy chọn cho phép hoàn thành các công tắc, nhưng tôi không biết tùy chọn điều khiển nào.
+1

Bạn có một ví dụ mà tôi có thể xem xét, vì vậy tôi có cơ hội hiểu những gì bạn đang nói không? ;-) – Magnus

+0

Tôi cho rằng điều này có nghĩa là việc thêm mô tả vào các tùy chọn khác nhau (-h, -V, ...) sẽ trở nên khó khăn, đúng không? – Magnus

+0

@Magnus, Thêm mô tả bằng 'compadd' có lẽ đơn giản hơn, nhưng trong ví dụ này, nó không quá khó. Bạn sẽ phải đối mặt với các vấn đề khi bạn cố gắng cung cấp một cách để chỉ định nhiều hơn sau đó một chuyển đổi và một đối số cùng một lúc. – ZyX

4

Tôi thấy điều này là một giới thiệu tốt: http://www.linux-mag.com/id/1106/

Đó là yêu cầu đăng nhập tường, nhưng bạn không nói rõ ...

+3

Vâng, mặc dù thực tế rằng [các nguyên tắc này] (http://meta.stackexchange.com/a/94027/154764) là một chút ít được sử dụng trong câu trả lời này, tôi tìm thấy liên kết ở trên để (a) ** không ** yêu cầu tôi đăng nhập, và (b) cho tôi điểm khởi đầu tôi cần để tìm ra một vấn đề tôi đã hoàn thành. Như vậy, tôi đang upvoting câu trả lời này, mặc dù ngắn gọn và thiếu _direct_ (nghĩa là không theo liên kết) tính hữu dụng. Cảm ơn bạn, @Michael! – lindes

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