bash-completion装了却不补全,大概率是补全规则未加载:非登录shell(如terminator新开终端)默认不读取/etc/bash_completion,需确认~/.bashrc中已启用source /usr/share/bash-completion/bash_completion且未被条件语句跳过,再执行source ~/.bashrc生效。

bash-completion 为什么装了还不补全
装完 bash-completion 却发现 git、docker、systemctl 按 Tab 没反应,大概率是补全规则没加载进来。Ubuntu 默认只在交互式登录 shell 中加载 /etc/bash_completion,而 Terminator 或普通终端新开的非登录 shell(比如你每次 Ctrl+Alt+T 打开的)默认不读取它。
验证是否生效:运行 shopt login_shell,如果输出 login_shell off,说明当前是 non-login shell,需要手动补全入口。
- 检查
~/.bashrc是否已包含source /usr/share/bash-completion/bash_completion(Ubuntu 22.04+ 默认已有,但可能被注释掉) - 确认该行未被
if ! shopt -oq posix; then等条件包裹而跳过执行 - 运行
type _completion_loader,若报错bash: type: _completion_loader: not found,说明补全框架根本没加载
zsh-autosuggestions 和 zsh-syntax-highlighting 怎么共存
这两个插件常被一起装,但顺序错了会互相干扰:比如高亮失效、建议闪烁、甚至补全卡住。它们不是简单加进 plugins=() 就能用的。
Ubuntu 26.04 LTS(代号“Resolute Raccoon”)是Canonical于2026年4月23日发布的下一代长期支持版操作系统,提供长达10年的技术支持。它搭载Linux 7.0内核与GNOME 50桌面环境,全面转向Wayland协议,并引入Rust重写的核心工具以增强安全性。官方提供适用于AMD64和ARM64架构的桌面及服务器ISO镜像,是追求前沿技术与极致稳定的开发者
-
zsh-syntax-highlighting必须放在zsh-autosuggestions之后加载,否则高亮逻辑会覆盖建议渲染 - 二者都不能放在
oh-my-zsh.sh加载之前——即必须写在source $ZSH/oh-my-zsh.sh之后 - 推荐写法(在
~/.zshrc底部):source $ZSH/oh-my-zsh.sh source $ZSH_CUSTOM/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh source $ZSH_CUSTOM/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh
为自定义脚本添加补全规则
系统命令有现成规则,但你自己写的 Python 脚本或 Shell 工具,默认 Tab 是不会补全参数或子命令的。补全逻辑得自己写,核心是注册一个 _complete_你的命令名 函数并绑定到命令。
- 把补全函数写进
~/.bash_completion或单独文件(如~/.local/share/bash-completion/completions/mytool) - 函数内用
COMPREPLY数组填入候选值,例如:_mytool() { local cur="${COMP_WORDS[COMP_CWORD]}" case "${cur}" in -*) COMPREPLY=($(compgen -W "--help --verbose --output" -- "$cur")) ;; *) COMPREPLY=($(compgen -W "build deploy rollback" -- "$cur")) ;; esac } complete -F _mytool mytool - 加载后执行
source ~/.bash_completion,或重启 shell;用complete -p mytool验证是否绑定成功
conda 和 pip 命令补全失效的常见原因
conda 补全依赖 conda-bash-completion 包,pip 补全则靠 python3-argcomplete,两者都不属于 bash-completion 主包,容易漏装。
-
conda install -c conda-forge conda-bash-completion后,需确保conda init bash已运行(它会在~/.bashrc插入初始化段) -
pip install argcomplete后,必须对每个支持 argcomplete 的命令显式启用:activate-global-python-argcomplete(全局)或register-python-argcomplete pip(单命令) - 如果用了 pyenv 或 conda 环境管理器,补全脚本可能被不同 shell 配置覆盖——优先检查
~/.pyenv/bin/pyenv或$(conda info --base)/etc/profile.d/conda.sh是否在~/.bashrc中靠前加载
补全不是“装完就灵”,关键在函数注册时机和上下文隔离。尤其当多个环境管理器共存时,PATH 和 shell 初始化顺序稍一错位,补全就会静默失效——这时候别猜,直接 complete -p 命令名 看绑定状态最准。










