Powerline PS1 линия обтекания
контекст
- GNU Bash
4.4.12(1)-release
- Линия электропередачи
2.5.2-1
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
После этого все новые терминалы вели себя правильно.