Почему некоторые (часто длинные) команды искажаются в bash & zsh?

10

Много раз, когда я ввожу длинную команду в bash или zsh (это единственные две оболочки, в которых я уверен, что я видел это) курсор искажается где-то в середине строки, которую я ввожу, может кто-нибудь объяснить, почему это так, и можно ли с этим что-то сделать?

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

У меня есть пример с короткими строками, который я только что заметил:

История содержит:

mkdir sune1
mkdir sune2

Если я перейду к mkdir sune1, а затем к mkdir sune2, я бы ожидал, что моя командная строка будет mkdir sune2(поскольку это то, к чему я сейчас перешел) - но вместо этого я получаю mkdir1sune2.

Я часто замечал это годами, но никогда не позволял мне слишком беспокоиться, но думаю, что настало время перемен! Итак, есть идеи?

Йонатан
источник

Ответы:

8

Возможно, в строке приглашения неправильно экранированы непечатаемые символы. Если в вашем приглашении есть что-то похожее на изменение цвета, вам нужно поместить \[и \]завершить escape-последовательности терминала, чтобы bash мог сказать, что они не занимают место на экране - в противном случае он неправильно рассчитывает, где на экране находится фактическая команда, и обновляет ее. в неправильном месте. Смотрите этот раздел от TLDP . В зш, положи %{и %}вокруг escape-последовательности.

Гордон Дэвиссон
источник
У меня действительно есть цвета в моем приглашении, я постараюсь избежать их или удалить их и посмотреть, поможет ли это. Спасибо!
Джонатан
Рассмотрите возможность использования цветового модуля Zsh. Следует избегать ошибок stackoverflow.com/questions/6159856/…
Франциско