Часто, когда я ввожу длинную команду в bash или zsh (это единственные две оболочки, в которых я точно видел подобное), курсор перемещается куда-то в середину вводимой мной строки. Может ли кто-нибудь объяснить, почему это происходит, и можно ли что-то с этим сделать?
Я заметил, что это часто происходит, когда я просматриваю историю своей оболочки (используя клавиши со стрелками). Когда я сталкиваюсь с длинной записью, эта длинная новая запись смешивается с предыдущей, из-за чего текст искажается.
У меня есть пример с короткими строками, который я только что заметил:
История содержит:
mkdir sune1
mkdir sune2
Если я перейду к mkdir sune1
, а затем к mkdir sune2
, я бы ожидал увидеть командную строку mkdir sune2
(поскольку это то, куда я сейчас перешел), но вместо этого я получаю mkdir1sune2
.
Я замечал это часто в течение многих лет, но никогда не позволял этому беспокоить меня слишком сильно, но я думаю, что пришло время для перемен! Итак, есть идеи?
решение1
Ваша строка приглашения, вероятно, неправильно экранировала непечатаемые символы. Если в приглашении есть что-то вроде изменения цвета, вам нужно поместить \[
и \]
вокруг управляющих последовательностей терминала, чтобы bash мог определить, что они не занимают места на экране — в противном случае он неправильно вычисляет, где на экране находится фактическая команда, и обновляет ее в неправильном месте. Смотритеэтот раздел из TLDP. В zsh поместите %{
и %}
вокруг управляющих последовательностей.