To reproduce, one
needs only do PROMPT="→" on .zshrc, open a terminal, start typing some
command (e.g. ls) and hit TAB: the command (ls) will be written twice.
This usually happens when you put non-ascii characters in PROMPT (like that arrow) but your locale is not UTF-8. Run `locale` to confirm. To fix this, install and enable a UTF-8 locale.
This can also happen when TERM environment variable doesn't match the real terminal type. To fix this you need to avoid overwriting the value of TERM set by the terminal.
Roman.