9

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

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

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

РЕДАКТИРОВАТЬ: Если я добавлю новую строку в конце PS1 проблема, похоже, исчезнет. Однако я предпочел бы ввести команду в той же строке, что и приглашение.

2 ответа2

11

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

Убедитесь, что вы вложили их все так:

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

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

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

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