コマンド出力でZSHカスタムコンプリート

コマンド出力でZSHカスタムコンプリート

ipadd自動的に完了するコマンドのカスタムコンプリートを作成しています。これには、システムでネットワークデバイスを指定できるOS Xパラメータがあります。--device

ネットワークデバイスを一覧表示するコマンドはOS X次のとおりです。

networksetup -listallnetworkservices

出力は次のとおりです。

An asterisk (*) denotes that a network service is disabled.
Ethernet
Wi-Fi

Ethernetしかし、コマンドの最初の行はネットワークインターフェイスではなく、コマンドのみを表示するように変更しました。Wi-Fi

networksetup -listallnetworkservices | sed -n '2,$p'

出力は次のとおりです。

Ethernet
Wi-Fi

私の質問は、このコマンドを保存してそれを使って自分のコマンドを自動補完する方法ですipadd。私はあなたが使用できることを知っていますが、_filesこれはシステム内でファイルを完成させることです。

よろしくお願いします:)

答え1

  1. というファイルを作成し、_ipadd次の内容を入力します。
    #compdef ipadd
    
    # The line above declares this function as providing completions to 
    # `ipadd`. In addition, it's important that the file name starts with 
    # an `_`, otherwise `compinit` won't autoload it.
    
    local output=$(networksetup -listallnetworkservices)
    
    # Split the output on newlines.
    local -a services=( ${(f)output} )
    
    # Offer the second to the last line as completions.
    _arguments "*:network service:( ${services[2,-1]} )"
    
  2. このファイルを含むフォルダがあることを確認してください$fpath。したがって、そのフォルダがにあると仮定すると、~/funcファイルで次のことができます.zshrc
    fpath+=( ~/func )
    
  3. ファイルcompinitが呼び出されたことを確認してください。~/.zshrc後ろににディレクトリを追加します$fpath。それ以外の場合、完了には使用されません。
    autoload -Uz compinit && compinit
    

関連情報