Cygwin bash prompt นั้นเป็นการพันบรรทัดในบรรทัดเดียวกัน


56

ฉันใช้ Cygwin bash prompt และสำหรับคำสั่งแบบยาวข้อความจะถูกล้อมรอบในบรรทัดเดียวกันเมื่อเทียบกับการไปที่บรรทัดถัดไปแม้จะตั้งค่า PS1 ของฉันเป็น '$'

นี่คือภาพหน้าจอ
ภาพหน้าจอ


11
อะไรคือTERMการตั้งค่าตัวแปรสภาพแวดล้อมเพื่อ? สำหรับคอนโซล Cygwin cygwinมันควรจะเป็น
ak2

1
@ ak2 นี้แก้ไขปัญหาได้สำหรับฉันขอบคุณ Cygwin บน Mintty
JoshuaD

คำตอบ:


58

ฉันใช้ MinTTY อยู่แล้วและการลบบรรทัดใหม่ใน PS1 ก็ไม่ได้ช่วยอะไรเช่นกัน คำแนะนำหนึ่งชิ้นในหน้านี้ช่วยได้ ฉันรันคำสั่ง bash นี้:

kill -WINCH $$

ในกรณีของฉันการเรียกใช้ครั้งนี้แก้ไขปัญหาได้แม้หลังจากออกจากระบบและกลับเข้ามาฉันไม่แน่ใจว่าเป็นเช่นนี้เสมอ


1
ตัดสินโดย-WINCHนี่เป็นสัญญาณของกระบวนการทุบตีที่หน้าต่างเทอร์มินัลถูกปรับขนาด ดังนั้นควรทำหลังจากปรับขนาดเทอร์มินัลหน้าต่างแต่ละอันฉันเดา
ivan_pozdeev

7
@ivan_pozdeev ฉันเพิ่งพบว่าคุณต้องทำสิ่งนี้คือคุณปรับขนาดขณะที่ vim เปิด: vim ได้รับสัญญาณและวาดใหม่ในขนาดใหม่ แต่มันไม่ได้ถูกส่งผ่านไปยังกระบวนการหลักของมันและทำให้ทุบตีคิดว่าขนาดของ หน้าจอเป็นสิ่งที่มันเป็นเมื่อเปิดเป็นกลุ่ม
akatakritos

สิ่งนี้ใช้ได้กับฉันด้วย
konqui

สิ่งนี้ใช้ได้สำหรับฉันเช่นกันขอบคุณ @jtpereyda!
Jason R. Mick

ขอบคุณนี่เป็นปัญหาสำหรับฉันแน่นอน - ปรับขนาดเทอร์มินัลขณะที่เป็นกลุ่ม ฉันรู้สึกว่ามันควรจะง่ายพอที่จะแก้ไขข้อผิดพลาดนี้ แต่ฉันไม่รู้
Iguananaut

22

สำหรับฉันทางออกคือการเพิ่มบรรทัดต่อไปนี้เพื่อ. bashrc:

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

หมายเหตุว่าตัวละครที่ไม่พิมพ์ในการแจ้งการต้องอยู่ใน ...\[\]


6
ตามที่กล่าวถึงโดย @ ak2 ในความคิดเห็นภายใต้คำถามเดิมการส่งออก TERM = cygwin เพียงพอที่จะแก้ไขปัญหา
dregad

1
มันไม่เพียงพอในกรณีของฉัน หาก PS1 มีลำดับการยกเว้นที่ไม่อยู่ใน \ [... \] ปัญหาการตัดจะยังคงมีอยู่ การตั้งค่าตัวแปร env ของ TERM อาจเพียงพอในกรณีของคุณ แต่ฉันสงสัยว่ามัน
digory doo

สำหรับฉันนี่เป็นการแก้ไขปัญหาที่บรรทัดที่สองเขียนทับบรรทัดแรกอย่างไรก็ตามถ้าฉันใช้เทอร์มินัลความกว้าง 80 ตำแหน่งตำแหน่งเคอร์เซอร์และข้อความออฟเซ็ตยังคงแปลก (โดยใช้ cygwin64, mintty 2.3.7)
MM

กำลังเพิ่ม \ [... \] ปัญหาคงที่สำหรับฉัน
Trismegistos

8

ฉันมีปัญหาเดียวกันกับ MinTTY เช่นกัน ปัญหาอาจมีบางอย่างเกี่ยวกับการพร้อมท์หลัก (PS1)

ทางออกสำหรับฉันคือการลบตัวอักษร 'ขึ้นบรรทัดใหม่' ออกจาก PS1 (ก่อนหน้าเครื่องหมาย '$'):

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

ดูhttp://cygwin.com/ml/cygwin/2001-07/msg00140.htmlสำหรับการอ้างอิง

หากต้องการทำการเปลี่ยนแปลงแบบถาวรให้เพิ่มการส่งออก PS1 = '[\ e] 0; \ w \ a] \ n [\ e [32m] \ u @ \ h [\ e [33m] \ w [\ e [0m] 0m $ 'ไปยังไฟล์ ~ / .bashrc ของคุณ


1
ใช้งานไม่ได้สำหรับฉัน ...
HDave

สิ่งนี้ใช้งานได้สำหรับฉัน แต่นอกเหนือจากการลบ newline สุดท้ายที่ฉันต้องรีสตาร์ท Terminal Cygwin
christosc

5

ตามความเห็นของdregadและak2การตั้งค่าexport TERM=cygwinใน~/.bashrcไฟล์ของฉันก็เพียงพอที่จะแก้ไขปัญหานี้ให้ฉันได้


5

@ jtpereyda คำตอบนั้นแน่นอนในเครื่องหมาย แต่ด้วยเหตุผลบางอย่างฉันไม่สามารถปล่อยมันไปได้และขุดลึกลงไปอีกเล็กน้อย

การขยายความคิดเห็นนี้หากคุณปรับขนาดเทอร์มินัลในขณะที่เป็นกลุ่ม (หรือแอปพลิเคชันแบบเต็มหน้าจออื่น ๆ ที่ควบคุม tty ออกจากเชลล์) ผลลัพธ์SIGWINCHมักจะไม่ถูกส่งไปยังเชลล์ดังนั้นเมื่อได้รับการควบคุมกลับ ไม่ทราบว่าเทอร์มินัลถูกปรับขนาดแล้ว

เมื่อคุณปรับขนาดเทอร์มินัลของคุณควรเรียกใช้ioctl(..., TIOCSWINSZ, ...)บน pty หลักที่ vim กำลังทำงานซึ่งจะส่งผลให้killpg(SIGWINCH)กลุ่มกระบวนการของ vim ทำงาน

ปัญหาคือกลุ่มที่เรียกใช้ในกลุ่มกระบวนการของตัวเองแตกต่างจากเชลล์ที่ถูกเรียกใช้จากดังนั้นเชลล์ bash ไม่ได้รับSIGWINCHและไม่ปรับบรรทัด / คอลัมน์ของมันอย่างเหมาะสม

ถ้าคุณต้องการการแก้ปัญหาแบบถาวรเพิ่มที่คุณshopt -s checkwinsize .bashrcที่ทำให้ทุบตีตรวจสอบขนาดหน้าต่าง ( ioctl(..., TIOCGWINSZ, ..)) หลังจากกลับมาจากแต่ละคำสั่งและปรับปรุงสาย / คอลัมน์


เป็นกลุ่มจะทำอะไรกับคำถาม? OP ไม่ได้ใช้ vim
DavidPostill

1
ฉันหมายถึงการอ้างอิงคำถามที่แตกต่างที่ฉันคิดว่าทำให้การเชื่อมต่อชัดเจนขึ้น แต่ในระยะสั้นสาเหตุที่เป็นไปได้ของปัญหา OP คือการเปิดแอปพลิเคชั่นเทอร์มินัลแบบเต็มเช่น vim ปรับขนาดเทอร์มินัล ตามที่ฉันอธิบาย SIGWINCH ไม่ได้เห็นโดยเชลล์ดังนั้นเมื่อคุณออกจากกลุ่มก็ยังคงคิดว่าเทอร์มินัลมีขนาดก่อนหน้านี้ทำให้เกิดปัญหาการตัดบรรทัดต่างๆ
Iguananaut


2

มีบางอย่างผิดปกติในการตั้งค่าเครื่อง (อาจ)
ฉันเดาว่าคุณคงลองออกจากเซสชันนั้นแล้วเริ่มใหม่อีกครั้ง

ในขณะที่คุณไม่ได้รับการแก้ปัญหาสำหรับเทอร์มินัล Cygwin ลองใช้MinTTY (ดีกว่าจริง ๆ )


1
ฉันเห็นปัญหานี้ใน Cygwin ในหลาย ๆ เครื่อง แต่ MinTTY ดูดีขึ้นและแก้ปัญหาการตัดคำ นกสองตัวด้วยหินก้อนเดียว!
wting

โปรดทราบว่า MinTTY เป็นขั้วเริ่มต้นสำหรับ Cygwin ตั้งแต่ช่วงปลายปี 2011
Hugh W

1

ตามที่แสดงความคิดเห็นโดยakatakritosคุณอาจปรับขนาดเทอร์มินัลของคุณในขณะที่กลุ่มถูกเปิด

เมื่อสิ่งนี้เกิดขึ้นเพียงแค่ปรับขนาดเทอร์มินัลอีกครั้งและปัญหาจะหายไป


ขอบคุณ! แม้ว่าฉันจะไม่ได้ใช้ cygwin การแก้ไขปัญหา "การตัดในบรรทัดเดียวกัน" สำหรับฉันในทุบตี - เพียงยกเลิกการขยายหน้าต่างเทอร์มินัลจากนั้นขยายให้ใหญ่สุดอีกครั้งและปัญหาก็หายไป :)
Nick Humphrey
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.