我正在为我的命令创建一个自定义完成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
- 创建一个名为的文件
_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]} )"
- 确保包含此文件的文件夹位于您的
$fpath
.因此,如果我们假设它位于 中~/func
,那么您可以在文件中执行以下操作.zshrc
:fpath+=( ~/func )
- 确保您调用
compinit
了您的~/.zshrc
文件后将目录添加到您的$fpath
.否则,它将不会用于完成。autoload -Uz compinit && compinit