Chciałbym wieloliniowego monitu zsh z odpowiednio wyprostowaną częścią, który będzie wyglądał mniej więcej tak:
2.nate@host:/current/dir 16:00
->
Wiem o RPROMPT w zsh, ale ma on wyrównany do prawej znak zachęty przeciwny do zwykłego znaku zachęty, który znajduje się w tym samym wierszu tekstu co pisanie.
Czy istnieje sposób na wyrównanie do prawej części pierwszego wiersza wiersza polecenia zawierającego wiele wierszy? Szukam albo dyrektywy w zmiennej PS1, która mówi „wyrównaj teraz”, albo zmiennej, która jest dla PS1 tym, czym RPROMPT jest dla PROMPT.
Dzięki!
Oto jak właśnie skonfigurowałem tę rzecz. To podejście nie wymaga żadnych manipulacji sekwencjami ucieczki, ale sprawi, że będziesz mieć dwie różne zmienne dla głównego monitu:
PS1
z kolorowaniem iNPS1
bez.Zwróć uwagę na użycie
print -P
do szybkiego rozwijania,${#variable}
do uzyskania długości łańcucha przechowywanego w zmiennej orazprintf "%Nd"
do wypełniania lewej stronyN
spacjami. Zarównoprint
iprintf
są wbudowane w poleceniach, więc nie powinno być hitem wydajność.źródło
Zdefiniujmy monit za pomocą tego układu:
Aby to zrobić, potrzebujemy funkcji, która mówi nam, ile znaków dany ciąg przyjmuje podczas drukowania.
Będziemy potrzebować innej funkcji, która pobierze dwa argumenty i wypisuje pełną grzywnę z tymi argumentami po przeciwnych stronach ekranu.
Wreszcie możemy zdefiniować funkcję, która ustawia
PROMPT
iRPROMPT
poinstruować ZSH, aby wywoływał ją przed każdym monitem, oraz ustawić odpowiednie opcje rozszerzania monitu:Powoduje to wyświetlenie następującego monitu:
#
jeśli root,%
jeśli nie; zielony w przypadku sukcesu, czerwony w przypadku błędu.Możesz znaleźć dodatkowe szczegóły w wierszu Wieloliniowym: brakujący składnik i pełny kod w tej liście .
źródło