I'm on OS X Mountain Lion, running the included ZSH shell (4.3.11) with Oh-My-ZSH installed over the top.
When using tab completion with commands such as homebrew, when ZSH lists the available commands, it is also duplicating the command. For example:
$ brew {tab}
will result in:
$ brew brew
[list of homebrew commands]
I'm unsure what is causing this error, as when I resize the terminal window, the first instance of the command name disappears.
If I hit backspace when the duplicates are displayed, I can only delete the second instance of the command, zsh won't let me backspace any further. Also, if I do remove the duplicate with backspace, zsh then acts as if there is no command typed at all.
My .zshrc along with all my other .configuration files can be found at https://github.com/daviesjamie/dotfiles
UPDATE: I found this post about someone having the same problem on Ubuntu. However, I don't understand the given solution, and I'm not even sure if it applies to my set up?
My solution to make both local and ssh work is something like a combination of @Marc's and @neotohin's answers:
export LANG=en_US.UTF-8
(simply uncomment that part in the template .zshrc; exportingLC_ALL
, as in @neotohin's answer, instead ofLANG
may also work, I didn't try)LC_CTYPE=UTF-8
instead ofen_US.UTF-8
, which brakes the locale for me in ssh)The problem is likely to arise from misplaced
%{
%}
brackets that tell zsh that text inside has zero width. The only things that should be enclosed in them are escape sequences that change color or boldness of the text. If you are using new zsh (>=4.3.{unknown version}) I would even suggest to use%F{color}...%f
,%K{color}...%k
,%B...%b
instead of%{${fg[green]}%}
or what you have there.The problem with them is that there is no way to query the terminal with a question like “Hey, I outputted some text. Where is the cursor now?” and zsh has to compute the length of its prompt by itself. When you type some text and ask zsh to complete zsh will say terminal to move cursor to specific location and type completed cmdline there. With misplaced
%{%}
brackets this specific location is wrong.It's an old thread but I faced similar issue in my zsh setup with oh-my-zsh configuration.
Setting
export LC_ALL=en_US.UTF-8
fixed the issue.If you use iTerm on Mac, be sure to check "Set locale variables automatically" in your profile preferences. I had it unchecked for an SSH connection and it resulted in the same bug and I fixed it by leaving that option checked.
This effect also could be reproduced if you use any of fancy UTF-8 characters like arrow, "git branch" character and so on.
Just remove this chars from prompt and duplication will not occur.
Also adding
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
to ~/.profile can help