如何阻止网站出现在MacOS终端ZSH的SSH自动补全列表中?
如何阻止网站出现在MacOS终端ZSH的SSH自动补全列表中?
别担心,这个问题其实是ZSH的自动补全机制“过度热心”地读取了各种来源的信息导致的,我来给你几个可行的解决办法:
清理ZSH命令历史里的无关记录
ZSH会把你之前输入过的所有命令存在~/.zsh_history文件里,如果之前不小心输入过带网址的命令(哪怕不是正经的SSH连接命令),补全功能可能会把它们当成候选项。你可以直接编辑这个文件,删掉那些和网站相关的行;或者用命令删除指定历史条目:- 输入
history查看所有历史记录,找到对应网站记录的行号 - 执行
history -d <行号>删除该行 - 最后执行
history -w把修改后的历史保存到文件里
- 输入
检查并清理SSH的已知主机列表
SSH会把你连接过的主机信息存在~/.ssh/known_hosts文件里,虽然这里一般是服务器主机名,但如果之前误连过网站地址,也可能出现在补全里。你可以打开这个文件,删掉那些无关的网站条目,保存后重启终端试试。调整ZSH的SSH补全规则,限制来源
默认ZSH的SSH补全会从命令历史、known_hosts、系统hosts文件等多个地方拉取候选,你可以修改~/.zshrc文件,让它只从SSH的配置文件和已知主机里补全:- 打开
~/.zshrc(用nano ~/.zshrc或者你习惯的编辑器) - 添加以下内容:
# 限制SSH补全只使用SSH配置和已知主机 zstyle ':completion:*:ssh:*' hosts $(cat ~/.ssh/config ~/.ssh/known_hosts 2>/dev/null | awk '/^Host / {print $2}' | grep -v '*') zstyle ':completion:*:ssh:*' ignore-parents parent pwd - 保存文件后,执行
source ~/.zshrc让配置生效
- 打开
重置ZSH的补全缓存
ZSH会生成补全缓存文件~/.zcompdump,有时候缓存里可能残留了旧的候选信息。你可以执行rm ~/.zcompdump删除缓存,然后重启终端,ZSH会自动重新生成干净的缓存。
如果以上方法都试过还没解决,你可以检查一下/etc/hosts文件里有没有添加过奇怪的网站条目(不过一般用户不会随便改这个),或者彻底重置ZSH的配置:删掉~/.zshrc和~/.zprofile,然后重新初始化ZSH(执行zsh会自动生成默认配置)。
备注:内容来源于stack exchange,提问作者Wex300
相关产品推荐
相关产品推荐

