Странное поведение в терминале с пользовательским .bash_profile

8

Трудно описать поведение, но вот короткий клип:

http://www.youtube.com/watch?v=9KqHBA94FPI

По сути, при вводе многострочных команд в конце первой строки блок вставки возвращается к началу первой строки, записывает по первой строке, затем продолжается, как обычно, по второй, третьей и т. Д. Строкам. , При удалении это позволяет мне удалить всю команду, а также пустые места в строке над командой (у меня настроено так, чтобы команды вставлялись после строки, содержащей информацию user @ host / Directory. Затем она даже позволяет мне удалить последнюю часть каталога и хоста я описал выше. Извините, я ужасно объясняю это, видео будет работать лучше.

Вот содержимое моего .bash_profile:

export PS1="\e[31m\u\e[0m@\e[34m\h\e[33m\w\n \$ \e[0m "
Блэр Беквит
источник

Ответы:

12

Вы должны окружить свои непечатаемые символы (в этом случае ваши escape-последовательности ANSI) escape-последовательностями bash: \[и \]. Таким образом, bash будет знать, что вложенные символы не видны, т.е. они не занимают места, т.е. они не должны быть включены в вычисление длины слова, используемое упаковщиком строк.

другими словами, измените свое PS1определение:

export PS1="\e[31m\u\e[0m@\e[34m\h\e[33m\w\n \$ \e[0m "

… Чтобы:

export PS1="\[\e[31m\]\u\[\e[0m\]@\[\e[34m\]\h\[\e[33m\]\w\n \$ \[\e[0m\] "

И вот то же PS1значение, только для чтения человеком, возможно с улучшенной читабельностью (ANSI-экранирование в нижнем ряду, bash экранирование в среднем и печать символов в верхнем ряду.)

          \u          @          \h          \w\n \$
\[      \]  \[     \] \[      \]  \[      \]        \[     \] 
  \e[31m      \e[0m     \e[34m      \e[33m            \e[0m    

Дальнейшее чтение:

Яри ​​Кейнянен
источник
Это прекрасно, решил мою проблему. Большое спасибо за помощь!
Блэр Беквит
Блэр, добро пожаловать, чтобы спросить другого! Если вам нравится ответ на ваш вопрос, пожалуйста, проголосуйте и примите его.
холме
0

Я все,

У меня были похожие проблемы, и я нашел решение, просто изменив мою переменную PS1 с исходной на очень простую, просто на самом деле мое имя: export PS1 = Alex

Теперь у моего терминала больше нет странного поведения.

Надеюсь, это поможет.

Алекс (на Mac Lion 10.8)

user43414
источник