Podpowiedź Cygwin bash powoduje zawijanie linii na tej samej linii
56
Używam zachęty Cygwin bash, a dla długich poleceń tekst będzie zawijał się w tym samym wierszu, w przeciwieństwie do przejścia do następnego wiersza, pomimo ustawienia na PS1 po prostu „$”.
Sądząc po -WINCH, oznacza to, że proces bash zmienia rozmiar okna terminala. To chyba powinno być zrobione po zmianie rozmiaru każdego okna terminala.
ivan_pozdeev
7
@ivan_pozdeev, właśnie znalazłem, że musisz to zrobić tylko zmienić rozmiar, gdy vim jest otwarty: vim otrzymuje sygnał i przerysowuje w nowym rozmiarze, ale nie jest przekazywany do procesu nadrzędnego i dlatego bash nadal myśli, że rozmiar screen jest tym, czym był po otwarciu vima.
akatakritos
to również zadziałało dla mnie
konqui
To zadziałało również dla mnie, dzięki @jtpereyda!
Jason R. Mick
Dzięki, to zdecydowanie był dla mnie problem - zmiana rozmiaru terminalu w vimie. Wydaje mi się, że naprawienie tego błędu powinno być dość łatwe, ale nie wiem.
Iguananaut
22
Dla mnie rozwiązaniem było dodanie następujących wierszy do .bashrc:
PS1='\[\e[32m\]\u@\h:\W> \[\e[0m\]'
TERM=cygwin
export PS1
export TERM
Należy pamiętać, że znaki niedrukowalne w wierszu musi być ujęty w
\[... \].
Jak wspomniano w @ ak2 w komentarzu do oryginalnego pytania, eksport TERM = cygwin jest wystarczający do rozwiązania problemu.
dregad
1
w moim przypadku nie było to wystarczające. jeśli PS1 zawiera sekwencje specjalne, które nie są zawarte w \ [... \], problem z zawijaniem będzie się utrzymywał. ustawienie zmiennej env TERM może być w twoim przypadku wystarczające, ale wątpię w to.
digory doo
Dla mnie rozwiązuje to problem polegający na tym, że druga linia zastępuje pierwszą linię, jednak jeśli nie użyję terminalu o szerokości dokładnie 80, pozycja kursora i przesunięcie tekstu są nadal niepewne (przy użyciu cygwin64, mintty 2.3.7)
MM
Dodanie \ [... \] naprawiło problem.
Trismegistos
8
Miałem ten sam problem z MinTTY. Problem prawdopodobnie ma coś wspólnego z monitem podstawowym (PS1).
Rozwiązaniem było dla mnie usunięcie ostatniego znaku „nowej linii” z PS1 (tuż przed znakiem „$”):
@ jtpereyda za odpowiedź z pewnością jest na znaku. Ale z jakiegoś powodu nie mogłem odpuścić i kopałem trochę głębiej.
Rozwijając ten komentarz , jeśli zmienisz rozmiar terminalu w vimie (lub innej aplikacji pełnoekranowej, która przejmuje kontrolę nad tty od powłoki), wynikowy SIGWINCHczęsto nie jest wysyłany do powłoki, więc kiedy odzyskuje kontrolę, nie robi tego nie wiem, czy rozmiar terminala został zmieniony.
Kiedy zmieniasz rozmiar terminala, powinien on wywoływać ioctl(..., TIOCSWINSZ, ...)komendę master na pty, w którym działa vim. To z kolei prowadzi do killpg(SIGWINCH)grupy procesów w vimie.
Problem polega na tym, że vim działa we własnej grupie procesów innej niż powłoka, z której został wykonany, więc powłoka bash nie odbiera SIGWINCHi nie dostosowuje odpowiednio swoich linii / kolumn.
Jeśli chcesz mieć stałe obejście, dodaj shopt -s checkwinsizedo swojego .bashrc. To sprawia, że bash sprawdza rozmiar okna ( ioctl(..., TIOCGWINSZ, ..)) po powrocie z każdego polecenia i aktualizuje jego linie / kolumny.
Co vim ma wspólnego z tym pytaniem? OP nie używa vima.
DavidPostill
1
Chciałem odnieść się do innego pytania, które moim zdaniem uczyniło połączenie bardziej oczywistym, ale w skrócie możliwą przyczyną problemu OP jest otwarcie pełnej aplikacji terminalowej, takiej jak vim, zmiana rozmiaru terminalu, a następnie zamknięcie. Jak wyjaśniłem, SIGWINCH nie jest widziany przez powłokę, więc kiedy wyjdziesz z vima, nadal myśli, że terminal ma poprzedni rozmiar, co powoduje różne problemy z zawijaniem linii.
dzięki! chociaż nie używam cygwina, to naprawiło problem „zawijania na tej samej linii” w bashu - po prostu zmaksymalizuj okno terminala, a następnie zmaksymalizuj go ponownie, a problem zniknie :)
TERM
zmienna środowiskowa? W przypadku konsoli Cygwin tak powinno byćcygwin
.Odpowiedzi:
Już korzystałem z MinTTY i usunięcie nowej linii z PS1 też nie pomogło. Jedna rada na tej stronie pomogła. Wykonałem to polecenie bash:
W moim przypadku uruchomienie tego raz rozwiązało problem, nawet po wylogowaniu i ponownym zalogowaniu. Nie jestem pewien, czy tak jest zawsze.
źródło
-WINCH
, oznacza to, że proces bash zmienia rozmiar okna terminala. To chyba powinno być zrobione po zmianie rozmiaru każdego okna terminala.Dla mnie rozwiązaniem było dodanie następujących wierszy do .bashrc:
Należy pamiętać, że znaki niedrukowalne w wierszu musi być ujęty w
\[
...\]
.źródło
Miałem ten sam problem z MinTTY. Problem prawdopodobnie ma coś wspólnego z monitem podstawowym (PS1).
Rozwiązaniem było dla mnie usunięcie ostatniego znaku „nowej linii” z PS1 (tuż przed znakiem „$”):
patrz http://cygwin.com/ml/cygwin/2001-07/msg00140.html w celach informacyjnych.
Aby ta zmiana była trwała, dodaj eksport PS1 = '[\ e] 0; \ w \ a] \ n [\ e [32m] \ u @ \ h [\ e [33m] \ w [\ e [0m] \ $ 'do pliku ~ / .bashrc.
źródło
Jak skomentowali dregad i ak2 , ustawienie
export TERM=cygwin
w moim~/.bashrc
pliku wystarczyło, aby naprawić ten problem.źródło
@ jtpereyda za odpowiedź z pewnością jest na znaku. Ale z jakiegoś powodu nie mogłem odpuścić i kopałem trochę głębiej.
Rozwijając ten komentarz , jeśli zmienisz rozmiar terminalu w vimie (lub innej aplikacji pełnoekranowej, która przejmuje kontrolę nad tty od powłoki), wynikowy
SIGWINCH
często nie jest wysyłany do powłoki, więc kiedy odzyskuje kontrolę, nie robi tego nie wiem, czy rozmiar terminala został zmieniony.Kiedy zmieniasz rozmiar terminala, powinien on wywoływać
ioctl(..., TIOCSWINSZ, ...)
komendę master na pty, w którym działa vim. To z kolei prowadzi dokillpg(SIGWINCH)
grupy procesów w vimie.Problem polega na tym, że vim działa we własnej grupie procesów innej niż powłoka, z której został wykonany, więc powłoka bash nie odbiera
SIGWINCH
i nie dostosowuje odpowiednio swoich linii / kolumn.Jeśli chcesz mieć stałe obejście, dodaj
shopt -s checkwinsize
do swojego.bashrc
. To sprawia, że bash sprawdza rozmiar okna (ioctl(..., TIOCGWINSZ, ..)
) po powrocie z każdego polecenia i aktualizuje jego linie / kolumny.źródło
Coś jest zepsute w ustawieniach twojego terminalu (prawdopodobnie).
Myślę, że już próbowałbyś wyjść z tej sesji i zrestartować nową.
Chociaż nie dostajesz rozwiązania dla terminalu Cygwin, wypróbuj MinTTY (jest rzeczywiście lepszy).
źródło
Jak skomentował akatakritos , prawdopodobnie zmieniłeś rozmiar swojego terminalu, gdy vim był otwarty.
Gdy tak się stanie, wystarczy zmienić rozmiar terminala jeszcze raz, a problem zniknie.
źródło