Menu

zshのホスト名補完強化

 zshのホスト名補完に、sshのknown_hostsを活用する設定。.zshrcに以下を追加する。

make_p () {
    local t s
    t="$1"; shift
 
    [ -f $t ] || return 0
 
    for s; do
	[ $s -nt $t ] && return 0
    done
 
    return 1
}
 
cache_hosts_file="$ZDOTDIR/.cache_hosts"
known_hosts_file="$HOME/.ssh/known_hosts"
 
print_cache_hosts () {
    if [ -f $known_hosts_file ]; then
	awk '{ if (split($1, a, ",") > 1) for (i in a) { if (a[i] ~ /^[a-z]/) print a[i] } else print $1 }' $known_hosts_file
    fi
}
 
update_cache_hosts () {
    print_cache_hosts | sort -u > $cache_hosts_file
}
 
make_p $cache_hosts_file $known_hosts_file && update_cache_hosts
 
_cache_hosts=( $(< $cache_hosts_file) )

 ずっとこの便利さを当たり前だと思っていて、IRCで指摘されるまで自分が書いた上のコードのおかげであることを忘れていた。せっかくなのでここで紹介しておく。

[後日、若干の改善のため微修正しました。(2004-04-25)]

コメントを残す

メールアドレスが公開されることはありません。