На этот вопрос уже есть ответ:
См. Мою правку ниже, это не полностью дублирует Настройка подсказки оболочки и поведение cmd
Моя функция обратного поиска
в интерфейсе командной строки не работает, и я не знаю, как исправить это обратно ...
Когда я нажимаю ctrl + r и ищу команду, которую я сделал ранее, нахожу ее, а затем нажимаю клавишу со стрелкой вправо, чтобы использовать ее, вывод прерывается.Вот пример:
# I reverse-searched the word "test" then pressed right arrow
yoshiji@x1carbon:~/path/to/git/folder (master) $ch)`test': rake test
# ^^^^^^^^^^ weird output
# ^ cursor right there
Он также «сдвигает» мой курсор в другую позицию. Если я нажимаю Enter, выполняется правая команда (в данном случае rake test
), поэтому это означает, что отображаемый текст не совпадает с тем, что выполняется на самом деле.
Я знаю, что это, скорее всего, связано с моим экспортом PS1
в моем ~ / .bashrc
, поэтому вот последние строки этого файла:
# Git branch in prompt.
git_branch() {
branch=$(__git_ps1 2> /dev/null)
if [ "$branch" = " (master)" ]; then
echo -e "\033[33m${branch}\033[00m" # yellow
elif [ "$branch" = "" ]; then
echo -e "\033[90m (no git)\033[00m" # red
else
echo -e "\033[32m${branch}\033[00m" # green
fi
}
PS1='\u@\h:\w$(git_branch) \$ '
Это что-то Я написал для отображения ветки git оранжевым (если master
ветка) или зеленым (или no git
серым).
Вы, ребята, знаете, что вызывает такое странное поведение?
Изменить: Это проблема, отличная от возможного дубликата в том способе, которым я использую echo -e "некоторая строка"
, чтобы вернуть строку, имеющую цвет + имя ветки git из функции git_branch ()
. Использование echo -e
не экранирует символы \ [
и \]
(попробуйте сами в своем CLI: echo -e "\ [\ 033 [33м \] тест »
).
В идеале я хотел бы сохранить эти условные цвета в зависимости от наличия и имени ветки (серый, если ветки нет, оранжевый, если основной, иначе зеленый).
Перенесите цветные последовательности в Escape readline как так:
echo -e "\001\033[33m\002${branch}\001\033[00m\002" # yellow
echo -e "\001\033[90m\002 (no git)\001\033[00m\002" # red
echo -e "\001\033[32m\002${branch}\001\033[00m\002" # green
Escape readline \001
в начале непечатаемой последовательности, и \002
в конце. Они эквивалентны \[
и \]
, соответственно, в строке PS1.
Источник: ответ archemiro на подсказке удара и отзывающихся эхом цветах в функции - Переполнение стека
Это - мой ответ от другого вопроса с измененным кодом.
При помещении цветовых кодов в подсказку, необходимо добавить дополнительные маркеры, чтобы позволить терминалу знать, что у Вас есть невидимые символы в подсказке
Изменение
echo -e "\033[33m${branch}\033[00m" # yellow
кому:
echo -e "\[\033[33m\]${branch}\[\033[00m\]" # yellow
# .......^^........^^.........^^........^^
и так далее
Посмотрите Управление Подсказкой в руководстве удара.