Зворотний пошук історії в bash з подальшими клавішами зі стрілками призводить до відображення курсора в неправильному місці


10

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

Це викликає труднощі, оскільки фактичне розташування курсору відрізняється від відображеного на екрані; майбутні зміни в команді надаються так, ніби курсор знаходиться там, де він перейшов, але фактична команда зберігає правильне розташування без жодного стрибка.

Хтось знає, що це спричиняє, або як це виправити?

EDIT: Якщо я додам новий рядок в кінці PS1проблеми, схоже, відміняється. Однак я вважаю за краще ввести команду в тому ж рядку, що і рядок.

Відповіді:


6

Часто це спричинено командами в історії, що перевищують 1 рядок. Коли ви вибираєте коротший елемент з історії, схоже, він не враховує ширину підказки при повторному нанесенні командного рядка, тому все після цієї тривалої команди хитро.

Просте рішення, яке я знайшов - це натиснути домашній ключ, вставити "ехо" і натиснути клавішу "Введення". Потім згадайте останню команду та відредагуйте звідти. (Спочатку знімаю відлуння. :)


Дякую, я насправді спробував це лише трохи тому. У моєму випадку я був недбалий і видув файл, тому що в команді була труба, яка проковтнула відлуння. Ви вірні, це, здається, впливає лише на довгі команди відповідно до мого експерименту.
Jonderry

Краще рішення, ніж відлуння, яке я щойно знайшов: Додайте "#" до початку рядка, а не відлуння. Таким чином баш трактує весь рядок як коментар.
Jonderry

1
Але ще краще: проблема, схоже, усунеться, якщо поточна лінія перероблена. Або Cl, щоб очистити екран і перемалювати поточну лінію, або створити прив'язку клавіш для функції незв'язаного перерив-струму-лінії.
Jonderry

Я забув згадати про рішення Cl, оскільки я справді ненавиджу втратити буфер прокрутки, але так, це тимчасовий глюк виведення з навігації по історії, тому примушування перемальовки виправить це. redraw-current-line звучить як ще краще рішення!
каббі

13

Можливо, у вас є PS-послідовності, що не друкуються, в PS1, не вкладені в \ [і \].

Будьте впевнені, що ви вклали їх усі так:

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

1
Прекрасно працює , якщо ви укладаєте тільки недруковані послідовності в \[і \](так що вам потрібно кілька груп цих блоків цитат)
Andomar
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.