Проблема переноса строки в Bash

Вопрос новичка, я недавно изменил свою PS1 в это:

RESET="\[\017\]"
NORMAL="\[\033[0m\]"
YELLOW="\[\033[0;33m\]"
CYAN="\[\033[0;36m\]"

export PS1="\[$RESET\]\u@\h:\[$CYAN\]\w\[$YELLOW\]\$(__git_ps1)\[$NORMAL\] \$ "

Но теперь я получаю ошибку переноса строки. Я создал GIF, чтобы объяснить проблему:

введите описание изображения здесь

Есть идеи, что может быть не так?

3 ответа

Решение

Я думаю, что вы дважды цитируете свои escape-коды с [и]. Попробуй это:

export PS1="$RESET\u@\h:$CYAN\w$YELLOW\$(__git_ps1)$NORMAL \$ "

Ошибка переноса возникает всякий раз, когда непечатаемый символ не экранируется (например, экранирующие коды, которые меняют цвет подсказки). Это также происходит, когда в качестве локали задано что-то, что не понимает символы Юникода, и приглашение включает их. Примером могут быть неразрывные пробелы. Когда языком является "C" и в приглашении присутствуют символы Юникода, оболочка считает, что печатается больше символов, чем на самом деле, и приглашение преждевременно переносится.

shopt -s checkwinsizeэто должно решить вашу проблему. Это установит переменную checkwinsize on. Это установлено по умолчанию в / etc / bashrc, однако, поскольку вы используете свой собственный файл .bashrc, вы можете поместить этот код туда или в свой файл .bashrc загрузить / etc / bashrc, добавив . /etc/bashrc в верхней части файла .bashrc.

Другие вопросы по тегам