代码之家  ›  专栏  ›  技术社区  ›  NoDataFound

在Git for Windows中设置COMP_WordBreak后,有什么可以重新初始化它?

  •  0
  • NoDataFound  · 技术社区  · 5 年前

    我的一些作品使用了 @ (如 @group )我想把它从 COMP_WORDBREAKS 但我还不明白这是什么 恢复 这个 @ 当前位置我完全知道我们不应该胡乱摆弄 COMP_WORDBREAKS 使用 _get_comp_words_by_ref -n @ ,但Windows 2.28.0的Git版本。窗户。1(+bash 4.4.23(1)-发行版)与Linux上的版本(Gentoo+bash 5+app shells/bash completion 2.11)的工作原理不同。

    我试着把这个添加到我的 ~/.bashrc 对于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”命令):

    Terminal and COMP_WORDBREAKS

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

    • 我正在办理登机手续 Bash manual 但我看不出它会在哪里恢复 @ ?
    • 我还检查了可以修改文件的文件 COMP_WORDBREAKS ,但没有看到任何结论。
    0 回复  |  直到 5 年前
        1
  •  0
  •   NoDataFound    5 年前

    问题是由于主机名完成( shopt -p hostcomplete )这使得bash包括 @ 完成(或拆分)主机,如 user@hos .

    鉴于Windows下的完成非常有限,我禁用了它:

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

    我不知道(这与我的问题无关)为什么/什么时候 /etc/主持人 抄袭自 C:\Windows\System32\drivers\etc\hosts 然而,在我的情况下,这种完成是相当无用的。

        2
  •  -1
  •   user1934428    5 年前

    它不能恢复它。错误在于设置/打印值的方式。

    在里面

    COMP_WORDBREAKS="${COMP_WORDBREAKS//@/}"
    

    您已经正确地删除了 @ ,如果你只是做了一个

    echo "COMP_WORDBREAKS after:"; declare -p COMP_WORDBREAKS
    

    你会看到你的变化还在这里。但你决定把它写成

    echo "COMP_WORDBREAKS after: $(declare -p COMP_WORDBREAKS)"
    

    它创建了一个子进程来执行 declare ,并且由于您没有导出变量,子进程不知道您已经修改了它,并创建了自己的新版本。

    推荐文章