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

wting
sumber
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.

jtpereyda
sumber
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 \[... \].

doo digory
sumber
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.

Yariv
sumber
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.

blong
sumber
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.

Iguananaut
sumber
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).

nik
sumber
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.

olivieradam666
sumber
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