он прерывает возврат каретки (вместо перехода на новую строку, когда строка заполнена, он начинается с той же строки и стирает введенный текст).
Если я уберу последовательность цветов, она будет работать нормально. Я использую Ubuntu 11.10 и терминал (в guake такая же ошибка).
Странный. Это работает без каких-либо проблем на RedHat 5 и Mac OS X
Matteo 12 лет назад
0
возможный дубликат [проблема PS1, cmd зацикливается] (http://superuser.com/questions/311511/ps1-problem-cmd-is-looping)
grawity 12 лет назад
0
2 ответа на вопрос
37
grawity
Вы должны обернуть все escape-последовательности между \[и \]для того, чтобы readline правильно вычислял видимую длину подсказки. Без них readline думает, что подсказка длиннее, и не знает, когда текст достигает поля.
PS1 = " \ [ \ e [; 31 м \] [\ u @ \ h \ W] \ $ \ [ \ e [м \] "
Благодаря тонну!! я пытался найти некоторую документацию по нему в официальных документах, но не смог - цветовая подсказка «сток» действительно использует этот «трюк», и мне было трудно сначала выяснить, для чего именно он был нужен, так что спасибо за очистку этого up --- кстати, я действительно нашел источник документации в 'man readline 3' вокруг строки 684, и он говорит, что это на самом деле называется 'skip-csi-sequence' для тех, кто хочет знать, где находится документация по этому вопросу. Я не думаю, что нашел бы это, если бы вы не указали мне на readline (3), хотя я знал об этом раньше - не смог установить соединение.
osirisgothra 11 лет назад
3
Что значит "обернуть"? Ты имеешь в виду завернуть все это * IN * a `\ [`, `\]`? Я думаю, но это, похоже, не работает для меня.
Max Howell 10 лет назад
0
@osirisgothra: документация на самом деле говорит о другом - skip-csi-sequence` предназначена для подавления ** входных ** последовательностей, генерируемых специальными ключами.
grawity 10 лет назад
1
@MaxHowell вы должны обернуть каждую последовательность `\ e [xxm`, а не всю строку.
Enrico 8 лет назад
1
Благодарю. В моем случае я просто заменил `\ e [39m` на` \ [\ e [; 39m \] `, и он отлично работает
Herrgott 6 лет назад
0
Обратите внимание, что `\ e [; 39m` расширяется до` \ e [0; 39m`, что означает "сбросить все форматирование, _then_ установить цвет на 39". Это хорошо в подсказках, но это никак не связано с моим постом о `\ [\]`.
grawity 6 лет назад
0
1
stonefruit
[и] совет работал на bash и в OS X 10.8.2.
Я использую:
PS1 = "[\ e [0; 37 м \ W \ $ (ветвь git 2> / dev / null | grep -e '*' | sed 's / ^ .. (. *) / {\ 1} /') \ $ \ e [м] "
который показывает мне мою текущую ветку git в использовании.
Знаете ли вы о "__git_ps1"?
rafak 11 лет назад
0
nopes. какую волшебную вещь он будет делать?
stonefruit 11 лет назад
0