【问题标题】:Remnant characters when tab completing with ZSH使用 ZSH 完成制表符时的剩余字符
【发布时间】:2013-10-18 18:36:32
【问题描述】:

我在 Arch linux 中使用 oh-my-zsh 并加载了 robbyrussell 主题。当我尝试使用制表符完成时,我最终会在提示中附加剩余字符。如果我删除自动完成的字符,剩余的字符不会删除。

例如,如果我输入:

~ /etc

然后tab,变成了

~ /e/etc/

下面有一个选项列表。即使我删除了/etc//e 仍然存在,我仍然坚持:

~ /e

我无法删除/e。我必须执行一个命令来清除剩余的字符。

知道这里发生了什么吗?

【问题讨论】:

  • 如果没有更多信息,可能是提示中缺少一两个字符。例如,阅读this question。您使用的是最新的 oh-my-zsh 吗?你有没有修改过提示?我可以从 GitHub 下载 oh-my-zsh 进行测试,并准确表示您的设置吗? :)

标签: zsh oh-my-zsh


【解决方案1】:

似乎我在语言环境配置和非 UTF8 配置方面遇到了问题

在我的情况下,解决方法是:

export LC_ALL="en_US.UTF-8"

并将其永久添加到 .zshrc:

echo "export LC_ALL=en_US.UTF-8" >> .zshrc

更多信息在 Ubuntu 文档https://help.ubuntu.com/community/Locale

【讨论】:

  • 在默认 .zshrc 中取消注释以下行似乎对我有用:export LANG=en_US.UTF-8
  • 在 Manjaro 中,我需要更改文件 /etc/locale.conf/etc/locale.gen 以添加 en_US.UTF-8 配置并运行 locale-gen。这解决了我的问题:wiki.archlinux.org/index.php/Locale_(Espa%C3%B1ol)
【解决方案2】:

正如 simont 所建议的,您使用的提示很可能使用了不可打印的字符(如颜色转义码),但并不表示这些字符是不可打印的。因此,当重新绘制提示时,终端会认为提示比实际更宽。

您使用%{%} 分隔符指示zsh 提示符中的字符序列宽度为零。例如我的提示是:

%{%(?.%F{green}.%F{red})%}➜%{%f%}

(?...) 是一个三元组,它设置提示的颜色,并且它已被标记以表明它是零宽度。以同样的方式%f 重置颜色并且也被标记了。

您可以通过更新 PS1 变量来测试对提示的更改,这样您就可以尝试不同的安排,看看哪些适合您。

你可以用这种方式标记任何个字符,所以要小心不要让你的提示太短!

【讨论】:

  • 这是真正解决问题的答案。我查看了我自定义的 zsh 主题并发现了这个确切的问题($fg[red] 而不是%{$fg[red]%})。我添加了分隔符,现在它按预期工作。谢谢马修!
【解决方案3】:

我遇到了同样的问题,所以在寻求解决方案时,我遇到了这篇文章: https://wiki.archlinux.org/index.php/Locale

而且,正如建议的那样,要在系统范围内启用某些区域设置,您只需取消注释 /etc/locale.gen 上所需的区域设置,例如,在我的情况下:

en_US.UTF-8 UTF-8

在文件上保存更改后,在命令行上执行(以 root 身份):

locale-gen

重启,就可以了! (至少对我来说)

【讨论】:

    【解决方案4】:

    我也遇到了类似的问题,虽然不是 oh-my-zsh 而是 promptline;对我来说,解决方案是从我的配置中删除:

    ZLE_PROMPT_INDENT=0
    

    【讨论】:

      【解决方案5】:

      我也有类似的问题,主题是 tjkirch_mod。每当我在一个肮脏的 git repo 中工作并使用制表符完成时,该行的第一个字符就会重复。 更改指示 git repo 状态的字符为我解决了这个问题。 改变了

      ZSH_THEME_GIT_PROMPT_DIRTY=" %{$fg[red]%}⚡"

      ZSH_THEME_GIT_PROMPT_DIRTY=" %{$fg[red]%}x"

      【讨论】:

        【解决方案6】:

        原来这是一个语言环境问题。直到我在某处删除了一些配置文件并重新运行它之后,运行 locale-gen 才起作用。

        不过,您的建议对提示很有用。谢谢。

        【讨论】:

        • 您可以更具体地了解解决方案,像我这样的其他用户可能无法理解您是如何解决问题的。
        • 我希望我能更具体一些,但我最初在 /etc/locale.gen 中从 UTF8 更改为拉丁文,当我将其更改回 UTF8 时,我开始遇到问题。我删除了很多文件,但找不到确切告诉我哪个文件为我解决问题的文章。最后,它归结为让 /etc/locale.gen 正确并以 root 身份运行 locale-gen。我已经在同一个盒子上安装了新的 Arch,从那以后再也没有遇到过这个问题。
        猜你喜欢
        • 2013-10-29
        • 2015-04-28
        • 1970-01-01
        • 2016-05-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-24
        • 2012-12-03
        相关资源
        最近更新 更多