Я замечал, что много раз, когда я выполняю обратный поиск по истории из командной строки через 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\]