我目前有一个 /.ssh/config 文件,其中大约有7000行。
我正在尝试看是否有办法加速zsh中的自动完成功能。
当我开始输入我想要 ssh 进入的服务器名称,然后按 TAB
键时,需要大约10秒才会显示可以选择的主机列表。
我目前有一个 /.ssh/config 文件,其中大约有7000行。
我正在尝试看是否有办法加速zsh中的自动完成功能。
当我开始输入我想要 ssh 进入的服务器名称,然后按 TAB
键时,需要大约10秒才会显示可以选择的主机列表。
_ssh
的自动完成每次尝试自动完成主机时都会逐行读取您的整个配置文件,查找Host
指令。_ssh_hosts
)以执行更快的操作(例如,在内存中缓存主机名以供后续完成)。Host
/Include
对的列表。例如,转换为:Host foo
User bob
IdentityFile ~/.ssh/bob_ident
Host bar
User alice
IdentityFile ~/.ssh/alice_ident
转换为
Host foo
Include foo_config
Host bar
Include bar_config
在这里,~/.ssh/foo_config
和~/.ssh/bar_config
将包含每个主机的相关细节。
可以想象,Host
指令只占据了您7000多行代码中的一小部分,因此这应该会显著加快_ssh_host
的速度。
/usr/share/zsh/*/functions/_ssh
中找到的_ssh_hosts
函数。它本质上很慢:它逐行读取您的文件,查找“Host”指令并编译结果。最大的问题是它没有缓存第一次发现的主机名(对于小文件来说是合理的,因为这意味着不必实现检测文件何时被修改以使缓存无效的逻辑)。 - chepner