Intereting Posts

Как добавить / расширить 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 , все остальные источники для имен хостов (например, ~/.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 

Другой вариант – переопределить команду hosts (по умолчанию getent hosts ), используя zstyle s. Преимущество состоит в том, что вы можете сделать это только для ssh и сделать его динамическим (за исключением кэширования, выполняемого системой завершения):

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

Лучшим вариантом является просто использование значений по умолчанию для zsh.

См. Мой запрос на получение oh-my-zsh по адресу https://github.com/robbyrussell/oh-my-zsh/pull/1498.

Вы можете захотеть заменить oh-my-zsh на гораздо лучше написанный и поддерживаемый https://github.com/sorin-ionescu/prezto, который использует по умолчанию zsh-доработки и этот внешний модуль https://github.com/zsh- пользователи / ЗШ-пополнения