Chciałbym mieć czytelną kolorową ścieżkę. Na przykład, zamiast po prostu użyć% ~ do powrotu ~/path/to/foo
, chciałbym sformatować go, ~$RED/$NOCOLORpath$RED/$NOCOLORto$RED/$NOCOLORfoo
aby podświetlić separatory ścieżek.
Czy mogę zdefiniować zawartość PROMPT, aby wyrażenie ścieżki było ponownie oceniane na każdym ekranie? Coś takiego ${${(%):-%~}//\//_some_format_expression/}
oczywiście nie działa.
A może powinienem to jeszcze zhakować i wymusić resetowanie wartości PROMPT za każdym razem, gdy zmieniamy katalog?
Wszelkie rozwiązania osiągające cel formatowania ścieżki byłyby mile widziane.
Dzięki :)
Odpowiedzi:
zsh
Spróbuj tego:
Oto podział pytania:
%{...%}
- sekwencja ucieczki$(pwd|grep --color=always /)
- wydrukuj bieżący katalog i podświetl/
- kolor będzie zależeć od zmiennej środowiskowej $ GREP_COLORS (lub jej wartości domyślnej) - domyślnie pogrubiona czerwień%${#PWD}G
- użyj długości w znakach nazwy bieżącego katalogu jako wartości usterki. To sprawia, że powłoka bierze to pod uwagę długość poprzedzającej sekwencji znaków (po „%{
”) zamiast rzeczywistej długości ciągu zawierającego sekwencje specjalne ANSI. Dzięki temu powłoka nie jest mylona co do pozycji kursora względem końca monitu.- - - - - - - to koniec części, która odpowiada na twoje pytanie - - - - - - -
%(!.%F{red}.%F{cyan})
- jeśli jest to uprzywilejowana powłoka (root), ustaw kolor pierwszego planu na czerwony, w przeciwnym razie cyjan%n
- wypisuje nazwę użytkownika%f
- przywróć domyślny kolor pierwszego planu@
- dosłowny znak%F{yellow}
- uczynić kolor pierwszego planu żółtym%m
- wypisz nazwę hosta%f
- przywróć domyślny kolor pierwszego planu%(!.%F{red}.)
- jeśli jest to uprzywilejowana powłoka (root), ustaw kolor pierwszego planu na czerwony%#
- wypisuje a#
dla uprzywilejowanej powłoki lub%
dla nieuprzywilejowanej powłoki%f
- przywróć domyślny kolor pierwszego planuKładę nacisk na ścieżkę na pierwszym miejscu, ponieważ pytanie dotyczy ścieżki.
Oto wersja dla zsh, która zmienia kolor ukośnika w zależności od tego, czy jesteś rootem (uprzywilejowanym) poprzez manipulowanie
$GREP_COLORS
zmienną:Grzmotnąć
Możesz zrobić podobny monit w Bash. W tym przykładzie umieściłem nazwę użytkownika i hosta na pierwszym miejscu, a kolor ukośników również zmienia się, gdy UID ma wartość 0. Ostrzeżenie: to zastępuje
$PS1
zmienną zachęty Basha . Nie powinno to stanowić problemu, chyba że robisz coś specjalnego lub nie spodziewasz się, że zachowanie zmieni się, gdy ustawisz tę zmienną bezpośrednio, a to nastąpi. Ponadto wykorzystuje zmienną o nazwie „usercolor
”, która może kolidować z czymś innym, chociaż cała ta rzecz mogłaby zostać umieszczona w funkcji, a zmienna deklarowana jako lokalna.Skorzystałem z faktu, że Bash nie ma funkcji „glitch” zsh, aby użyć podstawiania rozszerzenia parametru do warunkowego pokolorowania ukośników (zamiast używania grep).
źródło
PS1="$(pwd)"; PS1="${debian_chroot:+($debian_chroot)}\[$bldgrn\]\u@$(fgcolor $hostnamecolor)\h$(resetcolor)\[$txtrst\]:\[$bldblu\]${PS1//\//$txtred/$bldblu}\[\e[00m\]$bldred\$(parse_git_branch)\[$txtrst\] \[$undcyn\]\T \d\[$txtrst\] 95\$ "
kolory zdefiniowane w github.com/ibrahima/dotfiles/blob/master/.bashrc.d/prompt.shPo krótkim obejściu mogę podać rozwiązanie zastępujące
chpwd
:my_path
var? Nie mogę bezpośrednio zastąpić / inside% ~ ...doprompt
jest prawdopodobnie czystsze.źródło
Czyste rozwiązanie Zsh:
${(%):-%~}
jest bieżącą ścieżką.${xxxxx//\//${PR_BOLD_RED}/%f}
zastępuje każdy / w xxxxx pogrubioną czerwoną czcionkąW testach używałem podwójnych cudzysłowów, co nie pozwala na podstawienie. Wszystko działa dobrze z pojedynczymi cudzysłowami.
źródło
$PR_BOLD_RED
zdefiniować gdzie indziej. Muszę użyć, wPROMPT='%n@%m: %{%B%F{red}%}${${(%):-%~}//\//%B%F{red\}/%b%f}%b%f '
tym bardzo dziwnego ucieczki zamykającego nawiasu klamrowego (tylko) po drugim „czerwonym”.Oto moja próba (na podstawie NicDumZ):
Różnica polega na tym, że używam kolorowej ścieżki, więc po powrocie koloru ukośnik muszę wrócić do pierwotnego koloru ścieżki. W moim przypadku ścieżka jest zwykle żółta, a ukośnik zmienia kolor na purpurowy, a następnie wraca do żółtego. Wolę też używać sekwencji% F% f, ponieważ wydają mi się one bardziej czytelne.
źródło