Dlaczego niektóre (często długie) polecenia są zniekształcone w bash i zsh?

10

Wiele razy, gdy wprowadzam długie polecenie w bash lub zsh (są to jedyne dwie powłoki, w których jestem pewien, że to widziałem), kursor wypacza się gdzieś pośrodku ciągu, który wprowadzam, czy ktoś może wyjaśnić, dlaczego tak jest, a jeśli można coś z tym zrobić?

Zauważyłem, że często zdarza się to, gdy przeglądam historię mojej powłoki (używając klawiszy strzałek), gdy napotykam długi wpis, długi, nowy wpis miesza się z poprzednim wpisem, powodując zniekształcenie tekstu.

Mam przykład z krótkimi ciągami, który właśnie zauważyłem:

Historia zawiera:

mkdir sune1
mkdir sune2

Gdybym nawigował do mkdir sune1, a następnie do mkdir sune2, oczekiwałbym, że moja linia poleceń będzie mkdir sune2(ponieważ do tego właśnie nawigowałem) - ale zamiast tego dostaję mkdir1sune2.

Zauważyłem to często od lat, ale nigdy nie pozwól mi zbytnio przeszkadzać, ale myślę, że nadszedł czas na zmianę! Jakieś pomysły?

Jonatan
źródło

Odpowiedzi:

8

Twój ciąg znaków prawdopodobnie nieprawidłowo nie zawierał znaków niedrukowalnych. Jeśli masz coś takiego jak zmiany koloru w Twój wiersz, trzeba umieścić \[i \]wokół terminalu sekwencje bash więc można powiedzieć, że nie zajmują miejsca na ekranie - w przeciwnym razie miscalculates gdzie rzeczywista komenda jest na ekranie, a Aktualizuje w niewłaściwym miejscu. Zobacz tę sekcję TLDP . W zsh, pakowane %{i %}wokół sekwencje.

Gordon Davisson
źródło
Naprawdę mam kolory w mojej linii, spróbuję uciec od nich lub je usunąć i zobaczę, czy to pomoże. Dzięki!
Jonatan
Zastanów się nad użyciem modułu kolorów zsh. Powinno unikać błędów stackoverflow.com/questions/6159856/…
Francisco