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:
kill -WINCH $$
W moim przypadku uruchomienie tego raz rozwiązało problem, nawet po wylogowaniu i ponownym zalogowaniu. Nie jestem pewien, czy tak jest zawsze.
-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:
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
\[
... \]
.
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 „$”):
user@host ~
$ echo $PS1
\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n\$
user@host ~
$ export PS1='\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\$ '
user@host ~ $
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.
@ 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 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 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.
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).
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.
TERM
zmienna środowiskowa? W przypadku konsoli Cygwin tak powinno byćcygwin
.