Ssh

如何附加/擴展 zshell 完成?

  • October 22, 2015

我將 zsh 與 oh-my-zsh 一起使用。不幸的是,oh-my-zsh 不使用文件~/.ssh/config來自動完成主機名(例如,參見問題 #1009)。

這可以通過以下程式碼輕鬆存檔:

[ -r ~/.ssh/config ] && _ssh_config=($(cat ~/.ssh/config | sed -ne 's/Host[=\t ]//p')) || _ssh_config=()
zstyle ':completion:*:hosts' hosts $_ssh_config

但是,如果我將上述命令添加到我的~/.zshrc文件中,則在 file 中定義的所有其他主機名來源(如~/.ssh/known_hosts)都將~/.oh-my-zsh/lib/completion.zsh被覆蓋。

如何在我的文件中附加新的完成規則?':completion:*:hosts'``~/.zshrc

我認為您需要檢索現有項目並附加您的項目。

zstyle -s ':completion:*:hosts' hosts _ssh_config
[[ -r ~/.ssh/config ]] && _ssh_config+=($(cat ~/.ssh/config | sed -ne 's/Host[=\t ]//p'))
zstyle ':completion:*:hosts' hosts $_ssh_config

另一種選擇是使用s 重新定義hosts命令(預設情況下) 。優點是您可以只做它並使其動態化(完成系統完成的記憶體除外):getent hosts``zstyle``ssh

zstyle ':completion::complete:ssh*:*:hosts' command '
 getent hosts; sed -n "s/^Host[=[:blank:]]*/ignored /p" ~/.ssh/config'

引用自:https://unix.stackexchange.com/questions/52099