Первые два символа были повторены, пока я использую, Tabчтобы сделать завершение. На скриншоте ниже, cd
повторяется.
Я пробовал rxvt-unicdoe, xterm, терминатор. Все эти эмуляторы терминала имеют эту проблему.
Zsh версия 5.0.2, конфигурационный файл on-my-zsh
zsh
line-editor
oh-my-zsh
jilen
источник
источник
Ответы:
Если символы в командной строке иногда отображаются со смещением, это часто происходит потому, что zsh вычислил неправильную ширину для приглашения. Симптомы состоят в том, что дисплей выглядит нормально, пока вы добавляете символы или перемещаете символ за символом, но он искажается (некоторые символы появляются дальше вправо, чем следовало бы), когда вы используете другие команды, которые перемещают курсор ( Home, завершение и т. Д.). ) или когда команда перекрывает вторую строку.
Zsh должен знать ширину приглашения , чтобы знать, где расположены символы команды. Предполагается, что каждый персонаж занимает одну позицию, если не указано иное.
Одна возможность состоит в том, что ваше приглашение содержит escape-последовательности, которые не разделены должным образом. Escape-последовательности, которые изменяют цвет или другие аспекты форматирования текста, или которые изменяют заголовок окна или другие эффекты, имеют нулевую ширину. Они должны быть включены в конструкцию процентных скобок
%{…%}
. В более общем смысле escape-последовательность, подобная%42{…%}
zsh, говорит, что в фигурных скобках содержится 42 символа.Поэтому проверьте настройки вашего приглашения (
PS1
,PROMPT
или переменные, на которые они ссылаются) и убедитесь, что все escape-последовательности (например,\e[…m
для изменения текстовых атрибутов - обратите внимание, что они могут присутствовать через некоторую переменную, например$fg[red]
), находятся внутри%{…%}
. Поскольку вы используете oh-my-zsh, проверьте свои собственные настройки и определения, которые вы используете из oh-my-zsh.Та же проблема возникает в bash. Там последовательности нулевой ширины в приглашении должны быть заключены в
\[…\]
.Другая возможность состоит в том, что ваша подсказка содержит не-ASCII символы и что zsh (или любое другое приложение) и ваш терминал имеют другое представление о том, насколько они широки. Это может произойти, если есть несоответствие между кодировкой вашего терминала и кодировкой, объявленной в оболочке, и эти два кодирования приводят к разной ширине для определенных последовательностей байтов. Как правило, вы можете столкнуться с этой проблемой при использовании терминала не-Unicode, но при объявлении локали Unicode или наоборот.
Приложения полагаются на переменные среды, чтобы знать локаль; соответствующая настройка
LC_CTYPE
, которая определяется из переменных окруженияLANGUAGE
,LC_ALL
,LC_CTYPE
иLANG
(первый из них , что это набор применяется). Командаlocale | grep LC_CTYPE
сообщает вам ваши текущие настройки. Обычно лучший способ избежать проблем с локалью - установить эмулятор терминалаLC_CTYPE
, поскольку он знает, какую кодировку он ожидает; но если это не работает для вас, не забудьте установитьLC_CTYPE
.Те же симптомы могут возникать, когда предыдущая команда отображала некоторые выходные данные, которые не заканчивались символом новой строки, поэтому подсказка отображается в середине строки, но оболочка этого не понимает. В этом случае это произойдет только после выполнения такой команды, а не постоянно.
Если строка не отображается должным образом, команда
redisplay
илиclear-screen
( по умолчанию связанная с Ctrl+ L) исправит это.источник
->
я думаюlocale
и ofecho $PS1 | od -t x1
(и то же самое с любой другой переменной, используемой$PS1
).\e{7,8}
для сохранения / восстановления состояний курсора.LC_CTYPE
что исправило это для меня. У меня было установлено, чтобыC
, когда я его отключил, все работало. Спасибо.У меня была такая же проблема, и я нашел свое решение здесь: https://github.com/robbyrussell/oh-my-zsh/issues/5157#issuecomment-226031519 . Просто вставьте следующее в свой
~/.zshrc
.export LC_CTYPE=en_US.UTF-8
источник
locale
я использовал, но это сработало для меня. Этот ответ предоставляет необходимые шаги для Ubuntu.У меня была эта проблема в iTerm 2 на macOS. В итоге я решил ее, выбрав «Настройки» -> «Профили» -> «Текст» и отметив галочкой «Использовать ширину Unicode версии 9».
источник
У меня есть эта проблема, используя Ubuntu LTS Docker Image (
ubuntu:latest
). Я исправил это с помощью инструкции, приведенной на соответствующей странице: https://hub.docker.com/_/ubuntuисточник