Использование r в bash PS1

я немного устал от моих typeaheads в Баш от испортить PS1. Например, я бы выполнил команду, например ls, и в то время как он работает, начните вводить следующую команду, как echo, и typeahead для echo появится перед PS1, как

/$ls
...
ec/$echo

(здесь /$ - это PS1). Мое решение для этого было добавить r к передней части PS1, так что он очистит линию первым.

это, кажется, работает разумно Ну, но, кажется, есть странная проблема. В моем .inputrc, Я

"ep": history-search-backward

дайте мне типа M-p, чтобы вернуться назад (iTerm 2 карты вариант, чтобы избежать правильно).

проблема в том, что иногда, когда я печатаю некоторые вещи, а затем M-p чтобы получить предыдущую команду, то я делаю C-u C-k очистить строку, первый символ остается, и становится частью PS1 (удаляется из исполняемой строки, но отображается на PS1). Это когда я выполнить команда, но всякий раз, когда я нажимаю этот элемент в истории, даже с обычной стрелкой вверх, этот первый персонаж снова застревает там. Это происходит только с командами определенной длины. Это не имеет значения, если r фактически очищает любой текст, чтобы это произошло.

я поражаю странную ошибку в bash и / или iTerm? Добавляет r перед PS1 правильный способ очистить крафт перед ним?

5
задан asmeurer
источник

1 ответов

сигнал bash что \r является непечатным символом, так что вычисляется правильная длина строки приглашения, то есть вместо

PS1='\rstuff'

использовать

PS1='\[\r\]stuff'

Я думаю, что с \r в начале приглашения, это всегда символ нулевой длины, а не символ отрицательной ширины переменной длины, как это можно было бы рассмотреть, если это происходит в середине приглашения som где, поэтому это должно работать.

1
отвечен chepner 2014-04-07 16:26:08
источник

Другие вопросы bash carriage-return iterm2 ps1