Обратный поиск по истории в bash с последующим нажатием клавиш со стрелками приводит к отображению курсора в неправильном месте

Обратный поиск по истории в bash с последующим нажатием клавиш со стрелками приводит к отображению курсора в неправильном месте

Я замечал, что много раз, когда я выполняю обратный поиск по истории из командной строки через CTRL+ r, если я хочу отредактировать команду, иногда курсор перескакивает в неправильное положение, когда я нажимаю клавишу со стрелкой или ввожу CTRL+ aили CTRL+ e. Конкретное положение, в которое он переходит, похоже, является смещением, равным размеру моего приглашения командной строки, установленному в PS1.

Это вызывает трудности, поскольку фактическое местоположение курсора отличается от того, что отображается на экране; последующие изменения команды отображаются так, как будто курсор находится там, куда он переместился, но фактическая команда сохраняет правильное местоположение без какого-либо перехода.

Кто-нибудь знает, в чем причина и как это исправить?

EDIT: Если я добавляю новую строку в конце, PS1проблема, кажется, исчезает. Однако я бы предпочел ввести команду в той же строке, что и приглашение.

решение1

Это часто вызвано командами в вашей истории, которые длиннее 1 строки. Когда вы выбираете более короткий элемент из истории, он, похоже, не учитывает ширину приглашения при повторном отображении командной строки, поэтому все после этой длинной команды выглядит странно.

Простое решение, которое я нашел, это нажать клавишу home, вставить "echo" и нажать enter. Затем вызвать последнюю команду и редактировать оттуда. (Сначала удалив echo. :)

СМОТРИТЕ ТАКЖЕ ответ alexander-somov ниже, в котором указан способ устранения наиболее распространенной причины этой проблемы.

решение2

Возможно, у вас в PS1 есть непечатаемые управляющие последовательности, не заключенные в \[ и \].

Убедитесь, что вы вложили все это следующим образом:

\[\e[33m\]\w\[\e[31m\] $ \[\e[0m\]

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