/ / Zagadnienie zawijania wiersza polecenia powłoki - bash, kolory, podpowiedź, ansi-escape

Zagadnienie owijania wiersza polecenia powłoki - bash, kolory, prompt, ansi-escape

Zrobiłem coś, aby złamać mój monit powłoki Bash w systemie OS X (10.5.7) Terminal.

To jest PS1, który skonfigurowałem:

PS1="[e[1;32m]h[e[0m]:[e[1;34m]w[e[0m]$ "

O ile wiem, mam komendy kolorówprawidłowo ucieka. Jednak gdy przewijam w górę iw dół historii moich poleceń, często pojawiają się problemy z zawijaniem linii, jeśli historyczne polecenia zawijają się w wiele linii.

Uprościłem moje monity do następujących:

PS1="[e[1m]h:w$ [e[0m]"
PS2="> "

I nadal widzę coś takiego:

localhost: ~ / Biblioteka / Obsługa aplikacji / Firefox / Profile / knpmxpup.Defau lt / extensions / {1A2D0EC4-75F5-4c91-89C4-3656F6E44B68} $ expocd {1A2D0EC4-7 5F5-4c91-89C4-3656F6E eksport PS1 = "[ e [1; 32m] h [e [0m]: cd Biblioteka / Appl Wsparcie /

Próbowałem też 33 zamiast e. Właśnie dodałem tam PS2 do informacji, nie zmieniłem tego z domyślnej instalacji. Jeśli całkowicie usunę kody kolorów, to wszystko działa dobrze, jakieś pomysły?

Odpowiedzi:

4 dla odpowiedzi № 1

Problemy z zawijaniem linii w Bashu nie są niczym nowym. Zapoznaj się z listą mailingową, może jest jeszcze jeden błąd dotyczący tego.

Nie możesz zrobić więcej niż oznaczanie niedrukowalnych znaków, reszta musi zostać wykonana za pomocą kodu monitującego.


47 dla odpowiedzi nr 2

Teraz używam tego PS1 z dobrym skutkiem:

green=$(tput setaf 2)
blue=$(tput setaf 4)
bold=$(tput bold)
reset=$(tput sgr0)
PS1="[$green$bold]h[$reset]:[$blue$bold]w[$reset]$ "

Przewijanie historii poleceń wydaje się teraz obsługiwać zawijanie linii. Jednak w międzyczasie od czasu zadawania tego pytania zaktualizowałem także mój OS X do wersji 10.6.3


20 dla odpowiedzi nr 3

Ta wątek stackoverflow wydaje się istotny. Jak ktoś zauważył w tym wątku, Bash FAQ na mywiki.wooledge.org omawia, jak prawidłowo cytować kody kolorów w monitach Basha (FAQ 53) i właściwe wywołanie kolorów końcowych (FAQ 37).


1 dla odpowiedzi nr 4

Wygląda na to, że poprawnie uciekłeś i zamknąłeś sekwencje.

Mimo to używam obejścia, aby dodać „n” na końcu. Uważam, że to jaśniejsze i zmniejsza problem związany z opakowaniami. Dokładny koniec mojego PS1 to:

"n[33[0;30m]$[33[0m]

Doskonały sposób, który prawdopodobnie wiesz:

Bash prompt howto


1 dla odpowiedzi nr 5

To moje: jest to najlepszy, jaki znalazłem, ale w miejscu, w którym pierwotnie znalazłem, brakowało znaku ucieczki, co doprowadziło do problemu zawijania linii. Majstrowałem przy tym i w końcu to zadziałało. Wyświetla informacje o użytkowniku, ścieżce i gałęzi z dobrym kontrastem i kolorami.

export PS1="[e[1;37m][e[1;32m]u[e[0;39m]:[e[1;33m]w[e[0;39m][e[1;35m]$(__git_ps1 " (%s)")[e[0;39m] [e[1;37m]|[e[0;39m]$"

Ponadto dodaj

GIT_PS1_SHOWDIRTYSTATE=true

Aby pokazać znacznik, gdy gałąź jest „brudna” (istnieją zmiany do zatwierdzenia)

export HISTCONTROL=ignoredups

Przydatne jest także ignorowanie duplikatów podczas przewijania w górę historii basha.

bind "set completion-ignore-case on"

Pomaga też.

W końcu,

shopt -s checkwinsize

Może być pomocny w OSX, jeśli problemy się utrzymują.


1 dla odpowiedzi № 6

Zauważyłem, że są pewne problemy z pozycjonowaniem kursora, nawet jeśli nie ma specjalnego znaku w PS1 lub PROMPT Zmienna środowiskowa.

Jeśli wyprowadzimy plik, który nie ma znaku końca linii na końcu. To zmyli monit.

Możesz to odtworzyć, wykonując:

curl https://gist.githubusercontent.com/martinos/d4aa0a7d4d752b0d0d9f/raw/3198c39f84a080c44227a084a19fb3a0bb661ee5/wrapping_issue.txt

i wielokrotne naciskanie klawisza „w górę”, a zobaczysz, że monit się myli.

Możesz zobaczyć przykład tego w akcji:

https://asciinema.org/a/9mtjhi9dib6md4ocsbw210cca

Gdy to nastąpi, po prostu naciśnij <CTRL-C> a monit powróci do normy.

Zauważ, że ZShell nie ma tego problemu.


0 dla odpowiedzi № 7

Do wykorzystania w przyszłości używam tego:

export PS1="[33[0;31m][u@Project:w]$[33[0m] "

To wyświetli mój monit powłoki:

[ec2-user@Project:~]$

Pomaga mi rozróżnić witryny na żywo i dev.


0 dla odpowiedzi № 8

„shopt -s checkwinsize” działa również w przypadku problemów z zawijaniem Cygwin


0 dla odpowiedzi № 9

Jeśli używasz triku na pasku tytułu "e]2;titlebara", upewnij się, że też uciekniesz: "[e]2;titlebara]"