Первые символы команды, повторяющиеся на дисплее при завершении

Первые два символа были повторены, пока я использую Tab для завершения. На скриншоте ниже, cd повторяется.

введите описание изображения здесь

Я пробовал rxvt-unicdoe, xterm, terminator. Все эти терминальные эмуляторы имеют эту проблему.

Zsh версии 5.0.2, конфигурационный файл on-my-zsh

2 Solutions collect form web for “Первые символы команды, повторяющиеся на дисплее при завершении”

Если символы в командной строке иногда отображаются со смещением, это часто происходит потому, что zsh вычислил неверную ширину для подсказки. Симптомы состоят в том, что дисплей выглядит нормально, пока вы добавляете символы или перемещаете символ по символу, но становитесь искаженным (некоторые символы появляются дальше, чем они должны), когда вы используете другие команды, которые перемещают курсор (« Домой» , «Завершение» и т. Д.). .) или когда команда перекрывает вторую строку.

Zsh должен знать ширину подсказки , чтобы знать, где размещаются символы команды. Он предполагает, что каждый символ занимает одну позицию, если не указано иное.

Одна из возможностей заключается в том, что в вашем приглашении содержатся escape-последовательности, которые не имеют надлежащего соответствия. Экранирующие последовательности, которые изменяют цвет или другие аспекты форматирования текста или изменяют название окна или другие эффекты, имеют нулевую ширину. Они должны быть включены в конструкцию процентов-скобок %{…%} . В более общем плане escape-последовательность, такая как %42{…%} сообщает zsh, что то, что находится внутри фигурных скобок, составляет 42 символа.

Поэтому проверьте свои параметры подсказки ( PS1 , PROMPT или переменные, которые они ссылаются) и убедитесь, что все escape-последовательности (такие как \e[…m чтобы изменить текстовые атрибуты), обратите внимание, что она может присутствовать через некоторую переменную типа $fg[red] ) находятся внутри %{…%} . Поскольку вы используете oh-my-zsh, проверьте как свои собственные настройки, так и определения, которые вы используете с oh-my-zsh.

Та же проблема возникает в bash. Там последовательности нулевой ширины в подсказке должны быть заключены в \[…\] .

Другая возможность заключается в том, что ваша подсказка содержит символы, отличные от ASCII, и что zsh (или любое другое приложение) и ваш терминал имеют другое представление о том, насколько они широки. Это может произойти, если существует несоответствие между кодировкой вашего терминала и кодировкой, объявленной в оболочке, и эти два кодирования приводят к разной ширине для определенных последовательностей байтов. Как правило, вы можете столкнуться с этой проблемой при использовании терминала, отличного от Юникода, но объявив локализацию Unicode или наоборот.

Приложения полагаются на переменные среды, чтобы знать язык; соответствующий параметр – LC_CTYPE , который определяется из переменных среды LANGUAGE , LC_ALL , LC_CTYPE и LANG (применяется первое из них, которое установлено). Командная locale | grep LC_CTYPE locale | grep LC_CTYPE сообщает вам текущую настройку. Обычно лучший способ избежать проблем с локальностью – позволить эмулятору терминала установить LC_CTYPE , поскольку он знает, какую кодировку он ожидает; но если это не работает для вас, обязательно установите LC_CTYPE .

Те же симптомы могут возникать, когда предыдущая команда отображала некоторый вывод, который не заканчивался в новой строке, так что подсказка отображается в середине строки, но оболочка этого не понимает. В этом случае это произойдет только после выполнения такой команды, а не настойчиво.

Если строка не отображается правильно, команда redisplay или clear-screen (привязанная к Ctrl + L по умолчанию) исправит ее.

У меня была та же проблема, и я нашел решение здесь: https://github.com/robbyrussell/oh-my-zsh/issues/5157#issuecomment-226031519 . Просто ~/.zshrc следующее в свой файл ~/.zshrc .

export LC_CTYPE=en_US.UTF-8

  • zsh скрипт успешно тестирует ssh или нет
  • Как отредактировать приглашение командной строки для отображения времени?
  • Недопустимое присвоение zsh в функции канала
  • Клавиатурные привязки от bash до zsh?
  • zsh удалить часть приглашения
  • Пробелы как разрывы строк из команды inline for loop
  • Получите вход от редактора (vim / nano / emacs / textmate?)
  • Byobu - Новое окно с той же сессией ssh?
  • Переменные среды установки OS X
  • Тема zsh не работает на удаленном сервере
  • Копирование текущей командной строки в буфер обмена
  • Linux и Unix - лучшая ОС в мире.