如何使 zsh 自动完成故障转移到 compdef _files
How to make zsh autocomplete failover to compdef _files
我需要使用以下方法获取 ssh 密钥的指纹:
$ ssh-keygen -lf ~/.ssh/id_rsa_user.pub
键入后:ssh-keygen -lf ~/.ss
TAB 它没有提供任何选项。
我必须做的:
$ compdef _files ssh-keygen
在那之后我可以使用文件路径自动完成,但是命令自动完成停止工作,所以如果我输入 ssh-keygen -
Tab 我看不到这个输出:
$ ssh-keygen -
-- option --
-B -- show the bubblebabble digest of key
-C -- provide new comment
-D -- download key stored in smartcard reader
-N -- provide new passphrase
-P -- provide old passphrase
-U -- upload key to smartcard reader
-b -- specify number of bits in key
-c -- change comment in private and public key files
-e -- export key to SECSH file format
-f -- key file
-i -- import key to OpenSSH format
-l -- show fingerprint of key file
-p -- change passphrase of private key file
-q -- silence ssh-keygen
-t -- specify the type of the key to create
-y -- get public key from private key
所以想知道是否有一种方法可以同时启用这两个选项,这样我就可以做类似的事情:
ssh-keyg
TAB 会给我:
$ ssh-keygen
那我可以
$ ssh-keygen -
TAB
这将打印选项菜单并可以执行以下操作:
$ ssh-keygen -lf ~/.ss
TAB
并且有可行的选项列表,所以最后我会得到类似的东西:
$ ssh-keygen -lf ~/.ssh/id_rsa_user.pub
现在我只添加到我的 ~/.zshrc
这个:
compdef _files ssh-keygen
compdef _files adb
compdef _files mysql
...
但我必须为我想使用 _files 完成的每个命令执行此操作,因此我想知道是否有一种方法可以始终使用 _files
或故障转移到它。
有什么想法吗?
是否可以在按 Ctrl+d 显示文件选项时使其表现得像 csh
?
更新:
我注意到如果我最后一个参数是 -f
自动完成工作:
ssh-keygen -l -f ~/.ssh
TAB
但是对于自定义脚本,命令什么功能,小部件别名可以帮助强制 _files
完成。?
解决方案是更新到 zsh
我是这样做的:
# check the zsh info
brew info zsh
# install zsh
brew install zsh
# add shell path
sudo vim /etc/shells
# add the following line into the very end of the file(/etc/shells)
/usr/local/bin/zsh
# change default shell
chsh -s /usr/local/bin/zsh
我在完成 git-flow
时遇到问题,已通过 --without-completions
:
重新安装解决
$ brew install git --without-completions
我需要使用以下方法获取 ssh 密钥的指纹:
$ ssh-keygen -lf ~/.ssh/id_rsa_user.pub
键入后:ssh-keygen -lf ~/.ss
TAB 它没有提供任何选项。
我必须做的:
$ compdef _files ssh-keygen
在那之后我可以使用文件路径自动完成,但是命令自动完成停止工作,所以如果我输入 ssh-keygen -
Tab 我看不到这个输出:
$ ssh-keygen -
-- option --
-B -- show the bubblebabble digest of key
-C -- provide new comment
-D -- download key stored in smartcard reader
-N -- provide new passphrase
-P -- provide old passphrase
-U -- upload key to smartcard reader
-b -- specify number of bits in key
-c -- change comment in private and public key files
-e -- export key to SECSH file format
-f -- key file
-i -- import key to OpenSSH format
-l -- show fingerprint of key file
-p -- change passphrase of private key file
-q -- silence ssh-keygen
-t -- specify the type of the key to create
-y -- get public key from private key
所以想知道是否有一种方法可以同时启用这两个选项,这样我就可以做类似的事情:
ssh-keyg
TAB 会给我:
$ ssh-keygen
那我可以
$ ssh-keygen -
TAB
这将打印选项菜单并可以执行以下操作:
$ ssh-keygen -lf ~/.ss
TAB
并且有可行的选项列表,所以最后我会得到类似的东西:
$ ssh-keygen -lf ~/.ssh/id_rsa_user.pub
现在我只添加到我的 ~/.zshrc
这个:
compdef _files ssh-keygen
compdef _files adb
compdef _files mysql
...
但我必须为我想使用 _files 完成的每个命令执行此操作,因此我想知道是否有一种方法可以始终使用 _files
或故障转移到它。
有什么想法吗?
是否可以在按 Ctrl+d 显示文件选项时使其表现得像 csh
?
更新:
我注意到如果我最后一个参数是 -f
自动完成工作:
ssh-keygen -l -f ~/.ssh
TAB
但是对于自定义脚本,命令什么功能,小部件别名可以帮助强制 _files
完成。?
解决方案是更新到 zsh
我是这样做的:
# check the zsh info
brew info zsh
# install zsh
brew install zsh
# add shell path
sudo vim /etc/shells
# add the following line into the very end of the file(/etc/shells)
/usr/local/bin/zsh
# change default shell
chsh -s /usr/local/bin/zsh
我在完成 git-flow
时遇到问题,已通过 --without-completions
:
$ brew install git --without-completions