Cygwin bash prompt membungkus baris pada baris yang sama


56

Saya menggunakan bash prompt Cygwin, dan untuk perintah panjang teks akan membungkus di baris yang sama sebagai lawan pergi ke baris berikutnya meskipun menetapkan PS1 saya hanya '$'.

Ini tangkapan layar,
tangkapan layar


11
Untuk apa TERMvariabel lingkungan disetel? Untuk konsol Cygwin, seharusnya cygwin.
ak2

1
@ ak2 ini memperbaiki masalah bagi saya, terima kasih. Cygwin di Mintty.
JoshuaD

Jawaban:


58

Saya sudah menggunakan MinTTY, dan menghapus baris baru di PS1 juga tidak membantu. Satu saran di halaman ini membantu. Saya menjalankan perintah bash ini:

kill -WINCH $$

Dalam kasus saya, menjalankan ini sekali memperbaiki masalah, bahkan setelah logout dan kembali. Saya tidak yakin apakah ini selalu terjadi.


1
Dilihat oleh -WINCH, ini menandakan proses bash bahwa jendela terminal diubah ukurannya. Jadi ini harus dilakukan setelah setiap jendela terminal mengubah ukuran, saya kira.
ivan_pozdeev

7
@ivan_pozdeev, saya baru saja menemukan Anda hanya perlu melakukan ini adalah Anda mengubah ukuran saat vim terbuka: vim mendapatkan sinyal dan menggambar kembali pada ukuran baru, tetapi tidak diteruskan ke proses induknya dan dengan demikian bash masih berpikir ukuran dari Layar adalah apa pun saat vim dibuka.
akatakritos

ini juga bekerja untuk saya
konqui

Ini juga bekerja untuk saya, terima kasih @jtpereyda!
Jason R. Mick

Terima kasih, ini jelas merupakan masalah bagi saya - mengubah ukuran terminal saat vim. Saya merasa seharusnya cukup mudah untuk memperbaiki bug ini tetapi saya tidak tahu.
Iguananaut

22

Bagi saya, solusinya adalah menambahkan baris berikut ke .bashrc:

PS1='\[\e[32m\]\u@\h:\W> \[\e[0m\]'
TERM=cygwin
export PS1
export TERM

Perhatikan bahwa karakter non-printable di prompt harus diapit \[... \].


6
Seperti yang disebutkan oleh @ ak2 dalam komentar di bawah pertanyaan awal, ekspor TERM = cygwin sudah cukup untuk memperbaiki masalah ini.
dregad

1
itu tidak cukup dalam kasus saya. jika PS1 berisi urutan pelarian yang tidak termasuk dalam \ [... \], masalah pembungkus akan tetap ada. mengatur variabel TERM env mungkin cukup dalam kasus Anda, tetapi saya ragu.
digit doo

Bagi saya ini memperbaiki masalah bahwa baris kedua menimpa baris pertama, namun kecuali saya menggunakan terminal dengan lebar 80 persis, posisi kursor dan offset teks masih miring (menggunakan cygwin64, mintty 2.3.7)
MM

Menambahkan \ [... \] masalah yang diperbaiki untuk saya.
Trismegistos

8

Saya memiliki masalah yang sama dengan MinTTY juga. Masalahnya mungkin ada hubungannya dengan prompt utama (PS1).

Solusi bagi saya adalah menghapus karakter 'baris baru' terakhir dari PS1 (tepat sebelum tanda '$'):

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 ~ $

lihat http://cygwin.com/ml/cygwin/2001-07/msg00140.html untuk referensi.

Untuk membuat perubahan ini terus-menerus, tambahkan ekspor PS1 = '[\ e] 0; \ w \ a] \ n [\ e [32m] \ u @ \ h [\ e [33m] \ w [\ e [0m] \ $ 'ke file ~ / .bashrc Anda.


1
Tidak bekerja untuk saya ...
HDave

Ini berhasil bagi saya, tetapi selain menghapus baris baru terakhir saya juga harus me-restart terminal Cygwin.
christosc

5

Seperti dikomentari oleh dregad dan ak2 , pengaturan export TERM=cygwindalam ~/.bashrcfile saya sudah cukup untuk memperbaiki masalah ini untuk saya.


5

@ jtpereyda ini jawabannya tentu pada sasaran. Tetapi untuk beberapa alasan saya tidak bisa membiarkan ini pergi, dan menggali sedikit lebih dalam.

Memperluas komentar ini , jika Anda mengubah ukuran terminal saat dalam vim (atau aplikasi layar penuh lainnya yang mengendalikan tty menjauh dari shell), hasilnya SIGWINCHsering tidak dikirim ke shell, jadi ketika kembali kontrol shell tidak tidak tahu bahwa terminal telah diubah ukurannya.

Ketika Anda mengubah ukuran terminal, terminal harus memanggil ioctl(..., TIOCSWINSZ, ...)master pty yang menjalankan vim. Hal ini pada gilirannya menghasilkan killpg(SIGWINCH)grup proses on vim.

Masalahnya adalah bahwa vim berjalan dalam grup prosesnya sendiri yang berbeda dari shell yang dijalankannya, sehingga shell bash tidak menerima SIGWINCHdan tidak menyesuaikan garis / kolomnya dengan tepat.

Jika Anda ingin solusi permanen, tambahkan shopt -s checkwinsizeke .bashrc. Itu membuat bash memeriksa ukuran jendela ( ioctl(..., TIOCGWINSZ, ..)) setelah kembali dari setiap perintah, dan memperbarui baris / kolomnya.


Apa yang harus dilakukan dengan pertanyaan itu? OP tidak menggunakan vim.
DavidPostill

1
Saya bermaksud merujuk pertanyaan berbeda yang saya pikir membuat koneksi lebih jelas, tetapi singkatnya kemungkinan penyebab masalah OP adalah membuka aplikasi terminal penuh seperti vim, mengubah ukuran terminal, dan kemudian keluar. Seperti yang saya jelaskan, SIGWINCH tidak terlihat oleh shell sehingga ketika Anda keluar dari vim masih menganggap terminal adalah ukuran sebelumnya, menghasilkan berbagai masalah pembungkus garis.
Iguananaut


2

Ada yang rusak di pengaturan terminal Anda (mungkin).
Saya kira Anda sudah mencoba keluar dari sesi itu dan memulai kembali yang baru.

Meskipun Anda tidak mendapatkan solusi untuk terminal Cygwin, cobalah MinTTY (yang sebenarnya lebih baik).


1
Saya melihat masalah ini di Cygwin di beberapa mesin, tetapi MinTTY terlihat lebih baik dan menyelesaikan masalah pembungkus. Dua burung dengan satu batu!
mulai

Perhatikan bahwa MinTTY adalah terminal default untuk Cygwin sejak akhir 2011 .
Hugh W

1

Seperti yang dikomentari oleh akatakritos , Anda mungkin mengubah ukuran terminal saat vim terbuka.

Ketika ini terjadi, ubah ukuran terminal sekali lagi dan masalah hilang.


Terima kasih! walaupun saya tidak menggunakan cygwin, ini memperbaiki masalah "membungkus pada baris yang sama" bagi saya di bash - hanya unmaximize jendela terminal, kemudian maksimalkan lagi dan masalahnya hilang :)
Nick Humphrey
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.