Powerline PS1 линия обтекания

контекст

Powerline устанавливается из пакетов arch linux, а не из pip.

PS1 Script

update-ps() {
    export PS1="$(powerline shell aboveleft)"
    export PS2="$(powerline shell left)"
}

export PROMPT_COMMAND="update-ps;$PROMPT_COMMAND"

Конфигурация Powerline


проблема

У меня та же проблема, что и у него, когда я пишу несколько символов, строка переносится, и я начинаю писать в той же строке, перезаписывая то, что уже написала (включая ps1).

Я знаю, что это может быть проблема с непечатными символами, но разве это не означает, что это ошибка в сети? Какие еще проблемы могут быть?

0 ответов

Для меня изменение в ~.bashrc: from:

. /usr/local/lib/python2.7/dist-packages/powerline/bindings/shell/powerline.sh

к

. /usr/local/lib/python2.7/dist-packages/powerline/bindings/bash/powerline.sh

решил проблему

Это может произойти, если языковой стандарт неверен или когда glibc создан с языковым стандартом "C", который не поддерживает символы Юникода. Powerline использует неразрывные пробелы (2 байта), а также использует 2-байтовые символы юникода для треугольников. Для каждого из этих символов оболочка (не powerline) считает, что был напечатан 1 дополнительный символ. Если в приглашении 5 пробелов и 3 треугольника, приглашение будет перенесено на 8 символов, прежде чем оно достигнет конца строки. Оттуда все ведет себя неправильно. Это относится только к Powerline в том смысле, что Powerline использует символы Unicode в приглашении.

Исправление заключается в исправлении локали, чтобы оболочка понимала 2-байтовый юникод. Вы можете запустить "locale", чтобы увидеть, использует ли оболочка "C", и в этом случае ее нужно исправить. Для моего приложения мы использовали Powerline в образе Docker под управлением Centos Linux. Нам пришлось исправить локаль в /etc/yum.conf, чтобы использовать строчную форму utf8 следующим образом:

sed -i 's/UTF-8/utf8/' /etc/yum.conf

Затем пересоберите glibc-common с исправлением:

yum reinstall glibc-common

После этого новые терминалы повели себя и подсказка завернулась правильно. Затем мы изменили наш образ Docker для исправления yum.conf перед установкой glibc. Тем не менее, мы обнаружили, что один из наших модулей изменил локаль обратно на C (LANG="C"), поэтому мы использовали переменную LC_ALL env для ее переопределения:

LC_ALL=en_US.UTF_8

После этого все новые терминалы вели себя правильно.

Другие вопросы по тегам