9

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

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

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

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

mkdir sune1
mkdir sune2

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

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

1 ответ1

7

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .