web-dev-qa-db-ja.com

zshell補完を追加/拡張する方法は?

私はoh-my-zshで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ファイルに追加すると、ファイル~/.ssh/known_hostsで定義されているホスト名の他のすべてのソース(~/.oh-my-zsh/lib/completion.zshなど)が上書きされます。

':completion:*:hosts'ファイルに~/.zshrcの新しい完了ルールを追加するにはどうすればよいですか?

5
Martin

既存のアイテムを取得して追加する必要があると思います。

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

もう1つのオプションは、hostsコマンドを再定義することです(デフォルトではgetent hostszstylesを使用します。利点は、sshに対してのみ実行でき、動的にすることができることです(完了システムによって実行されるキャッシュを除く)。

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

最良のオプションは、zshのデフォルトを使用することです。

https://github.com/robbyrussell/oh-my-zsh/pull/1498 でoh-my-zshのプルリクエストを参照してください

0
blueyed

Oh-my-zshを、はるかに優れた記述と保守に置き換えることができます https://github.com/sorin-ionescu/prezto デフォルトのzsh補完とこの外部モジュールを使用します https://github.com/zsh-users/zsh-completions

0
huyz