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

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

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

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

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

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

mkdir sune1
mkdir sune2

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

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

решение1

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

Связанный контент