首页 > 解决方案 > 在我在 Git for Windows 中设置 COMP_WORDBREAKS 后,什么可以重新初始化它?

问题描述

我有一些使用@(如@group)的完成,我希望从中删除它,COMP_WORDBREAKS但我还没有理解正在恢复的内容@:我完全知道我们不应该修补COMP_WORDBREAKS和使用_get_comp_words_by_ref -n @,但 Git for Windows 上的版本2.28.0.windows.1 (+bash 4.4.23(1)-release) 与 Linux (Gentoo + Bash 5 + app-shells/bash-completion 2.11) 上的不同。

我试图将它添加到我~/.bashrc的 for Windows 中,它的来源~/.bash_profile和输出显示在 PS1 提示符之前:

echo "COMP_WORDBREAKS before:"; declare -p COMP_WORDBREAKS
COMP_WORDBREAKS="${COMP_WORDBREAKS//@/}"
echo "COMP_WORDBREAKS after:"; declare -p COMP_WORDBREAKS
export COMP_WORDBREAKS

但是,这不能按预期工作:@如果我键入declare -p COMP_WORDBREAKS 命令,它仍然存在:

COMP_WORDBREAKS before:
declare -- COMP_WORDBREAKS="
\"'><=;|&(:"
COMP_WORDBREAKS after:
declare -- COMP_WORDBREAKS="
\"'><=;|&(:"
# when I have first access to the TERM and that I can input the declare -p COMP_WORDBREAKS
$ declare -p COMP_WORDBREAKS
declare -- COMP_WORDBREAKS="@
\"'><=;|&(:"

这也显示在此屏幕截图中(我删除了识别部分,但这是与 Git for Windows 捆绑的“Git Bash”命令):

终端和 COMP_WORDBREAKS

正如我们所看到的,有些东西(我想bash)正在添加,@但我找不到在哪里或做什么。

标签: bashgit-bash

解决方案


问题是由于主机名完成 ( shopt -p hostcomplete) 导致 bash 包含@要完成(或拆分)的主机,例如user@hos.

看到在 Windows 下,完成非常有限,我禁用了它:

  • 它使用(至少)/etc/hosts作为源来完成
  • Git for Windows/etc/hosts没有任何主机。
  • MSYS2/etc/hosts似乎是一个副本C:\Windows\System32\drivers\etc\hosts

我不知道(这与我的问题无关)为什么/何时/etc/hosts复制,C:\Windows\System32\drivers\etc\hosts但在我的情况下,这个完成是相当无用的。


推荐阅读