Jam*_*mie 23 macos zsh tab-completion zsh-completion
我在OS X Mountain Lion上运行包含的ZSH shell(4.3.11),并在顶部安装了Oh-My-ZSH.
当使用诸如homebrew之类的命令使用制表符完成时,当ZSH列出可用命令时,它也复制命令.例如:
$ brew {tab}
将导致:
$ brew brew 
[list of homebrew commands]
我不确定是什么导致了这个错误,因为当我调整终端窗口的大小时,命令名的第一个实例消失了.
如果我在显示重复项时按下退格键,我只能删除命令的第二个实例,zsh不会让我再退格.此外,如果我使用退格键删除副本,则zsh就像没有输入任何命令一样.
我的.zshrc以及我的所有其他.configuration文件可以在https://github.com/daviesjamie/dotfiles找到
更新:我发现这篇文章是关于Ubuntu上有同样问题的人.但是,我不明白给定的解决方案,我甚至不确定它是否适用于我的设置?
ZyX*_*ZyX 27
问题很可能是由于错误的%{ %}括号告诉zsh内部文本的宽度为零.应该包含的唯一内容是转义序列,它们会改变文本的颜色或粗体.如果您使用的是新的zsh(> = 4.3.{unknown version}),我甚至建议您使用,而不是使用%F{color}...%f,或者您拥有它.%K{color}...%k%B...%b%{${fg[green]}%}
他们的问题是没有办法用"嘿,我输出一些文字"这样的问题来查询终端.现在光标在哪里?"并且zsh必须自己计算其提示的长度.当您键入一些文本并要求zsh完成时,zsh会说终端将光标移动到特定位置并在那里键入完成的cmdline.由于错误的%{%}括号,这个特定的位置是错误的.
Max*_*pov 21
如果您使用任何花哨的UTF-8字符,如箭头,"git branch"字符等,也可以重现此效果.
只需从提示中删除此字符,就不会发生重复.
还添加
export LC_ALL = en_US.UTF-8 
export LANG = en_US.UTF-8
到〜/ .profile可以提供帮助
很多地方的很多答案都表明export LC_ALL=en_US.UTF-8解决方案。然而,这对我不起作用。我在 Arch linux 和 PopOS 上使用 oh-my-zsh 时仍然遇到这个问题。
对我有用的唯一解决方案是romkatv 关于 oh-my-zsh github 存储库上的一个问题的建议。
\n\n事实证明,至少在我的情况下,只有当行中某处存在非 ASCII 字符(例如表情符号)时,才会出现自动完成重复问题。并且 ZSH 会错误地假设该非 ASCII 字符需要占用 2 个字符空间而不是 1 个。
\n\n因此,有效的解决方案是打开.zsh-theme您正在使用的任何主题的文件,找到所有非 ASCII 字符并用于%{%G%}告诉 ZSH 仅对该字符使用一种字符宽度
例如,默认的 oh-my-zsh 主题robbyrussel包含 2 个非 ASCII 字符。提示符中的 \'\xe2\x9e\x9c\' 字符
PROMPT="%(?:%{$fg_bold[green]%}\xe2\x9e\x9c :%{$fg_bold[red]%}\xe2\x9e\x9c )"\n以及 git 目录提示中的 \'\xe2\x9c\x97\' 字符
\n\nZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[blue]%}) %{$fg[yellow]%}\xe2\x9c\x97"\n像这样使用%{%G<character>%}大约 2 个非 ASCII 字符
PROMPT="%(?:%{$fg_bold[green]%}%{%G\xe2\x9e\x9c%} :%{$fg_bold[red]%}%{%G\xe2\x9e\x9c%} )"\n和这个
\n\nZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[blue]%}) %{$fg[yellow]%}%{%G\xe2\x9c\x97%}"\n这最终为我解决了问题。
\n\n因此,您需要做的就是复制要使用的主题文件并编辑如上所示的所有非 ASCII 字符,希望您再也不会遇到重复问题。
\n| 归档时间: | 
 | 
| 查看次数: | 6459 次 | 
| 最近记录: |