Подсказка ZSH исчезает после ввода слишком большого количества текста

Здесь нет ничего особенного. Синтаксис для case:

case word in [ [(] pattern [ | pattern ]... ) list ;; ]... esac

В примере в вопросе wordстроится путем объединения $1, /и $2./вообще не имеет особого значения, это просто символ.

PS :На практике использование немного странное, так как часть $2впоследствии сопоставляется с *, так что значение $2на самом деле не имеет значения. Можно было бы в контексте, описанном в Вики, также написать

#!/bin/sh
case $1 in
  pre)
    echo "Going to $2..."
    ;;
  post)
    echo "Waking up from $2..."
    ;;
esac

Но могут быть случаи, когда suspend, hibernateилиhybrid(возможные значения для$2)имеют значение, так что здесь это просто общая схема.

0
13.03.2021, 10:23
1 ответ

Я предполагаю, что большая часть вашего файла .zshrcбыла взята из более старого или чьего-то другого файла .bashrc, поскольку в нем есть ряд вещей, которые в zshвыполнялись бы иначе, чем в bash.

Ваша текущая подсказка установлена ​​с

PS1='[${GREEN}%n${NC}@${GREEN}%m${NC}:${CYAN}%1~${NC}]%(?,,[${RED}%?${NC}])$(git_status)$ '

где $GREENи т. д. — управляющие последовательности, создаваемые tput.

Проблема заключается в том, что оболочке будет сложно определить ширину подсказки, поскольку вы используете свои собственные управляющие последовательности для раскрашивания вместо стандартного способа zsh.

Я бы посоветовал вам отказаться от $GREENи т. д.переменная и вместо этого используйте

PS1='[%F{green}%n%f@%F{green}%m%f:%F{cyan}%1~%f]%(?,,[%F{red}%?%f])$(git_status)$ '

Каждый %F{colorname}устанавливает цвет переднего плана на colorname, и каждый %fпрекращает использование этого цвета.

Чтобы правильно использовать ваши собственные escape-последовательности, каждая такая последовательность должна быть заключена в %{...%}, чтобы оболочка знала, что она не займет места в подсказке (файл инициализации пользователя root делает это, но в окольный путь):

PS1='[%{${GREEN}%}%n%{${NC}%}@%{${GREEN}%}%m%{${NC}%}:%{${CYAN}%}%1~%{${NC}%}]%(?,,[%{${RED}%}%?%{${NC}%}])$(git_status)$ '

Обратите внимание, что это также означает, что вывод вашей git_statusфункции оболочки, который содержит цветовые коды, должен быть обновлен.

Прочтите раздел «РАСШИРЕНИЕ ПОСЛЕДОВАТЕЛЬНОСТЕЙ ПОДСКАЗОК» в руководстве zshmisc.

0
18.03.2021, 22:25

Теги

Похожие вопросы