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 '$'.
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.
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
\[... \].
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 '$'):
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.
@ 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.
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 :)
TERM
variabel lingkungan disetel? Untuk konsol Cygwin, seharusnyacygwin
.Jawaban:
Saya sudah menggunakan MinTTY, dan menghapus baris baru di PS1 juga tidak membantu. Satu saran di halaman ini membantu. Saya menjalankan perintah bash ini:
Dalam kasus saya, menjalankan ini sekali memperbaiki masalah, bahkan setelah logout dan kembali. Saya tidak yakin apakah ini selalu terjadi.
sumber
-WINCH
, ini menandakan proses bash bahwa jendela terminal diubah ukurannya. Jadi ini harus dilakukan setelah setiap jendela terminal mengubah ukuran, saya kira.Bagi saya, solusinya adalah menambahkan baris berikut ke .bashrc:
Perhatikan bahwa karakter non-printable di prompt harus diapit
\[
...\]
.sumber
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 '$'):
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.
sumber
Seperti dikomentari oleh dregad dan ak2 , pengaturan
export TERM=cygwin
dalam~/.bashrc
file saya sudah cukup untuk memperbaiki masalah ini untuk saya.sumber
@ 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
SIGWINCH
sering 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 menghasilkankillpg(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
SIGWINCH
dan tidak menyesuaikan garis / kolomnya dengan tepat.Jika Anda ingin solusi permanen, tambahkan
shopt -s checkwinsize
ke.bashrc
. Itu membuat bash memeriksa ukuran jendela (ioctl(..., TIOCGWINSZ, ..)
) setelah kembali dari setiap perintah, dan memperbarui baris / kolomnya.sumber
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).
sumber
Seperti yang dikomentari oleh akatakritos , Anda mungkin mengubah ukuran terminal saat vim terbuka.
Ketika ini terjadi, ubah ukuran terminal sekali lagi dan masalah hilang.
sumber