Проблема переноса строки в 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.