Ssh
如何附加/擴展 zshell 完成?
我將 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'