【问题标题】:Autocomplete slow using zsh for large /.ssh/config file使用 zsh 处理大型 /.ssh/config 文件的自动完成速度很慢
【发布时间】:2020-04-29 22:54:57
【问题描述】:

我目前有一个 /.ssh/config 文件,其中包含大约 7000 行。

我正在尝试查看是否有办法为此加快 zsh 中的自动完成功能。

当我开始输入我想通过 ssh 进入的服务器,然后按 TAB 时,它需要大约 10 秒的时间来显示我可以选择的可能主机。

【问题讨论】:

  • 无益的答案是重新定义/usr/share/zsh/*/functions/_ssh 中的_ssh_hosts 函数。它本质上很慢:它逐行读取您的文件,查找Host 指令并编译结果。最大的问题是它不会缓存它第一次找到的主机名(这对于小文件是合理的,因为这意味着不必实现逻辑来检测何时对文件进行了使缓存无效的修改) .
  • 这个答案提供了一种重新定义完成速度更快的方法:stackoverflow.com/a/64147638/874671

标签: zsh iterm2 oh-my-zsh ssh-config


【解决方案1】:

问题在于,每次您尝试完成主机时,_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+l 行的一小部分,因此这应该会大大加快 _ssh_host 的速度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-22
    • 2015-03-26
    • 1970-01-01
    • 2013-11-25
    • 1970-01-01
    相关资源
    最近更新 更多