Подтвердить что ты не робот

Добавление escape-последовательностей цвета ANSI в приглашение bash приводит к плохой позиции курсора при вызове/редактировании команд

Если я установил свою командную строку, например:

export PS1='\033[0;33m[\[email protected]\h \w]\$ \033[00m'

Цвет подсказки будет желтым, и все после символа '$' будет быть цветом терминала по умолчанию. Это то, чего я ожидаю. Однако, если я вспомню командную строку и попытаюсь ее отредактировать, переместите курсор - либо UpArrow/Ctrl-A (установите -o emacs), либо ESC K (set -o vi) если в командной строке, которую я пытаюсь отредактировать, достаточно долго, курсор не находится в начале команды. Ввод либо Ctrl-A (set -o emacs), либо ^ (set -o vi) не приведет к перемещению курсора к тому, что я вижу в качестве начала отозванной строки на экране. Аналогичным образом, попытка поместить курсор в конец строки (Ctrl-E или $, в зависимости) приводит к тому, что он помещает несколько символов в прошлое, что кажется концом строки. Похоже, что bash запутывается escape-символами, которые я добавил в подсказку. Это только то, с чем мне придется иметь дело, меняя приглашение на монохромное, когда я хочу отредактировать отозванные строки, или есть способ получить bash, чтобы правильно разрешить редактирование отозванных команд с помощью яркого приглашения?

4b9b3361

Ответ 1

Вам нужно заключить непечатаемые символы в \[ ... \], чтобы bash знал, чтобы игнорировать их при вычислении длины запроса:

export PS1='\[\033[0;33m\][\[email protected]\h \w]\$ \[\033[00m\]'