Мне бы хотелось многострочное приглашение zsh с выровненной справа частью, которое будет выглядеть примерно так:
2.nate@host:/current/dir 16:00
->
Я знаю о RPROMPT в zsh, но он выровнен по правому краю напротив вашего обычного приглашения, которое находится на той же строке текста, что и вы печатаете.
Есть ли способ получить выравнивание по правому краю в первой строке многострочной командной строки? Я ищу либо директиву в переменной PS1, которая говорит «выравнивание по правому краю сейчас», либо переменную, которая для PS1, что RPROMPT для PROMPT.
Благодарность!
Вот как я настроил эту вещь только сейчас. Этот подход не требует каких-либо манипуляций с escape-последовательностями, но заставит вас иметь две разные переменные для основного приглашения:
PS1
с окраской иNPS1
без.Обратите внимание на использование
print -P
для быстрого развертывания,${#variable}
для получения длины строки, хранящейся в переменной, иprintf "%Nd"
для заполнения слеваN
пробелами. Обаprint
иprintf
являются встроенными командами, поэтому не должно быть никакого снижения производительности.источник
Давайте определим подсказку с этим макетом:
Для этого нам понадобится функция, которая сообщает нам, сколько символов занимает заданная строка при печати.
Нам понадобится другая функция, которая принимает два аргумента и печатает полный штраф с этими аргументами на противоположных сторонах экрана.
Наконец, мы можем определить функцию, которая устанавливает
PROMPT
иRPROMPT
инструктирует ZSH вызывать ее перед каждым приглашением, и установить соответствующие параметры расширения приглашения:Это приводит к следующему приглашению:
#
если корень,%
если нет; зеленый при успехе, красный при ошибке.Вы можете найти дополнительные подробности в многострочном запросе: отсутствующий ингредиент и полный код в этой сущности .
источник