Zsh tab completion duplicating command name

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.


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