Backspace ไม่ทำงานใน Cygwin


29

ฉันเพิ่งติดตั้ง Cygwin และฟังก์ชั่น BACKSPACE ไม่อยู่ที่นั่นเช่นเมื่อฉันกดปุ่ม Backspace ฉันจะได้รับพื้นที่

ฉันพยายามค้นคว้าปัญหานี้บน Google แล้ว แต่ไม่พบข้อสรุปใด ๆ


คุณสามารถให้รายละเอียดเพิ่มเติมเกี่ยวกับวิธีการติดตั้งและเรียกใช้งาน Cygwin และตำแหน่งแบ็คสเปซไม่สามารถทำงานได้หรือไม่
ak2

1
ฉันเดาว่ามันเกิดขึ้นในเปลือก จะเกิดอะไรขึ้นเมื่อคุณพิมพ์ control-V ตามด้วย backspace แล้วเอาต์พุตของsttyคำสั่งคืออะไร?
Keith Thompson

คุณมีแป้นพิมพ์ประเภทใด สหรัฐอเมริกา, สหราชอาณาจักร ฯลฯ
pjc50

คุณเคยแก้ไขปัญหานี้หรือไม่? ฉันเห็นตอนนี้ใน Cygwin ใหม่ของฉันติดตั้งแม้ว่ามันจะทำงานก่อนหน้านี้ เป็นที่น่าสังเกตว่าคุณไม่ได้รับ "ช่องว่าง": มันไม่สามารถเลื่อนเคอร์เซอร์กลับเพื่อลบตัวอักษร พื้นที่ที่คุณเห็นคือพื้นที่ที่ควรจะเหยียบย่ำอักขระก่อนหน้า ถ้าคุณกด ^ L คุณจะเห็นว่า backspace นั้นทำงาน นี่คือเหตุผลที่ stty ไม่ได้แก้ไขสิ่งต่าง ๆ มันเกือบจะเหมือนเปลือก CMD ที่ Cygwin ถูกผูกไว้กับความล้มเหลวในการตีความการเคลื่อนไหวของเคอร์เซอร์
SomeCallMeTim

คำตอบ:


33

ในกรณีของฉัน backspace ไม่ทำงานเลยหลังจากสร้าง blank ~ / .vimrc การเปลี่ยนแปลงต่อไปนี้ทำให้มันทำงาน

ใส่:

set bs = 2

ใน. vimrc

พบสิ่งนี้ได้ที่ http://linux-journal.blogspot.com/2005/04/fix-vim-backspace-doesnt-work.html


ขอบคุณนี้ใช้งานได้สำหรับฉัน - ก่อนหน้านี้ใน Vim คีย์ backspace ของฉันเคลื่อนไปตามบรรทัด แต่ไม่ได้ล้างตัวอักษรจนกว่าฉันจะเริ่มพิมพ์ ตอนนี้มันจะย้อนกลับ 'ปกติ'
Robert

4
เป็นเรื่องที่ดีมากที่คำตอบนี้ช่วยผู้ใช้บางคน แต่ในกรณีนี้มันไม่ใช่คำตอบของคำถามเนื่องจากคำถามดั้งเดิมไม่ได้ถามเกี่ยวกับเสียงเรียกเข้า
Kelsin

สิ่งนี้แก้ไขปัญหาที่คล้ายกันที่ฉันมีกับปุ่มเคอร์เซอร์
Steve Paul

12

ใช้งานได้สำหรับฉัน: ในพรอมต์คำสั่ง Windows ให้พิมพ์

echo export TERM=cygwin >> C:/cygwin/home/YourUser/.bashrc

สิ่งนี้จะเพิ่มไป.bashrcและทุกอย่างอาจทำงานได้ดี!


1
ฉันได้TERMตั้งค่าตัวแปรสภาพแวดล้อมเป็นmsysผ่านการตั้งค่าตัวแปรสภาพแวดล้อม Windows ตามที่แนะนำใน StackOverflowเพื่อช่วยgitแก้ไขปัญหาใน Windows เพียงแค่รีเซ็ตมันcygwinใน.bashrcไม่ได้ช่วย แต่เอาTERMเข้ามาจากการตั้งค่า Windows ไม่ ขอบคุณที่ชี้นำฉันไปในทิศทางที่ถูกต้อง!
Florian Brucker

สิ่งนี้แก้ไขความจริงที่ว่า cygwin64 ไม่สนใจ backspaces ในคำสั่งที่มีตัวแบ่งบรรทัด ขอบคุณ
suanik

11

ฉันพบวิธีแก้ไขปัญหาที่นำเสนอเช่นเดียวกับด้านบน

เพียงแค่เรียกใช้การตั้งค่า Cygwin อีกครั้งและติดตั้งและtermcap terminfoหากคุณใช้ช่องค้นหาคุณสามารถค้นหาได้อย่างรวดเร็ว แทนที่จะพูดว่า "Keep" สำหรับแต่ละรายการให้คลิกเพื่อให้พูดว่า "ติดตั้งใหม่" คุณอาจต้องเลือกช่องทำเครื่องหมาย "ซ่อนล้าสมัย" เพื่อtermให้ปรากฏในการค้นหา

โฟลเดอร์ terminfo ของฉันหายไปทั้งหมด ไม่รู้ว่าทำไม หวังว่านี่จะช่วยใครซักคน


1
ฉันมีค่าติดตั้งแบบกำหนดเองซึ่งฉันลบออก หลังจากลบและติดตั้งใหม่ผ่าน cygwin setup.exe ฉันมีปัญหานี้ ฉันไม่ต้องการใช้ bandaid โดยการตั้งค่าตัวแปร TERM ให้กับสิ่งอื่นนอกเหนือจากที่ทำงานก่อนที่จะเกิดอุบัติเหตุ การติดตั้ง terminfo อีกครั้ง (ฉันไม่สามารถหา termcap) ได้ผลสำหรับฉัน ขอบคุณ!
Kelsin

เจ๋งทำงานได้ แต่ทำไม!
Yordan Georgiev

5

แก้ไข c: \ cygwin \ cygwin.bat ของคุณ

วางสิ่งนี้: SET TERM=cygwin

ก่อน: bash --login -i


1
การแก้ไขที่ง่ายที่สุดโดยไกล หวังว่าจะไม่มีผลข้างเคียง
RomanSt

1

เมื่อคุณตั้งค่าชนิดของ TERM คุณกำลังบอกโฮสต์ว่า TERMCAP ใช้เพื่อวาดภายในหน้าต่างเทอร์มินัล โฮสต์ * NIX ส่วนใหญ่ไม่รู้ว่า termtype 'cygwin' คืออะไรดังนั้นพวกเขาจึงไม่รู้วิธีจัดการกับอักขระบนหน้าจอเช่นส่วนแทรกการลบการเลื่อนการเปลี่ยนแบบอักษรและอื่น ๆ

หากคุณเปลี่ยนตัวแปร TERM ใน CYGWIN ก่อน telnet หรือ SSH เป็นโฮสต์คุณจะได้ผลลัพธ์ที่ดีกว่ามาก:

ใน CYGWIN:

d@test01 ~
$ TERM=ansi;export TERM
$ ssh suntest1

d@suntest1's password:
Sun Microsystems Inc.  SunOS 5.8     Generic patch    October 2001

d   pts/1         test01    Fri   Oct 12  00:15   still logged in
$ echo $TERM
ansi
$_

ตอนนี้โฮสต์รู้ว่าคุณมีประเภทเทอร์มินัล ANSI และสามารถใช้เป็นไฟล์ ANSI TERMCAP เพื่อบอกวิธีการสื่อสาร

หากคุณไม่สามารถใช้งานได้และทุกอย่างทำงานได้อย่างถูกต้องยกเว้น Backspace คุณสามารถสร้างโปรแกรม "getty" บนโฮสต์ที่คุณเชื่อมต่อเพื่อรับรู้สิ่งที่คุณต้องการและนี่คือวิธี (นี่คือเก่าที่สุดที่พบมากที่สุด วิธีแก้ปัญหา backspace / ลบ):

คุณ ssh หรือ telnet ไปยังโฮสต์ของคุณและในโฮสต์คุณเรียกใช้คำสั่ง stty หากคุณกดปุ่ม "BACKSPACE" และไม่ย้อนกลับมันเป็นเพราะเทอร์มินัลอาจมองหาตัวละครที่แตกต่างกันตามประเภทของ TERM แทนที่จะขุดผ่านทั้งหมดที่คุณสามารถตั้งค่า backspace ด้วยตนเองที่ CLI หรือในไฟล์. profile, .bashrc หรือ. bash-profile ในไดเรกทอรี $ HOME ตามที่คุณต้องการหรือตามรสนิยมของ * NIX คุณ การใช้

ดังนั้นหากคุณกด ^ H (นั่นคือตัวควบคุม -H) และคีย์ของคุณสำรอง แต่คุณกดปุ่ม BACKSPACE และไม่ลองใช้ stty ดังนี้:

stty erase \*<HIT YOUR BACKSPACE KEY HERE>*[ENTER]

เวลาส่วนใหญ่จะมีลักษณะเช่นนี้:

stty erase \^?[ENTER]

เครื่องหมาย '\' บอกว่าตัวละครตัวต่อไปจะเป็นตัวควบคุมที่ไม่สามารถพิมพ์ได้และจะยอมรับมันไม่ใช่ "ตีความ"

เมื่อคุณกด [ENTER] คุณควรจะสามารถกดปุ่ม [BACKSPACE] ของคุณและให้มันถอยหลัง / ลบสิ่งที่คุณพิมพ์

คุณสามารถตั้งค่านี้ในเปลือกของคุณ

ตอนนี้ถ้าคุณยังคงใช้ VI บางครั้งการแปลไม่ทำงานและคุณต้องพิมพ์ ^ H ใน vi แต่ก็ไม่เป็นไร

คุณอาจพูดว่า:

ลบ stty k [ENTER]

และแท้จริงแล้วมันจะแปล 'k' ไปเป็นอักขระลบ / ลบ

-D


0

ตกลงฉันมีปัญหานี้ด้วยการอัปเดตการติดตั้ง Cygwin ด้วยตนเอง อย่างไรก็ตามฉันพบโพสต์นี้ซึ่งนำฉันไปสู่โซลูชันสำหรับการติดตั้งของฉัน

Cygwin เก่ามีไฟล์/etc/terminfo/c/cygwinแต่ในรุ่นใหม่ Cygwin /etc/terminfo/63/cygwinคาดว่าไฟล์ที่จะ

เมื่อฉันคัดลอกไฟล์ "cygwin" ไปยังตำแหน่งนี้คีย์ bash shell backspace ทำงานได้ดีเช่นเดียวกับแท็บและอื่น ๆ


0

การเปลี่ยนTERMตัวแปรcygwinและการเพิ่มSET TERM=cygwinไปยัง.batไฟล์ที่ไม่ได้ทำงานให้ฉัน แต่ฉันคงมัน ที่นี่สิ่งที่ฉันทำ: ในการติดตั้งแพคเกจผู้จัดการเนื่องจากฉันเลือกที่จะติดตั้งxterm: X11 terminal emulatorหลังจากการติดตั้งผมเพิ่มSET TERM=xtermไปยัง.batไฟล์ (เช่นที่เสนอข้างต้น) เปิดตัวสถานีและในตัวเลือก -> เทอร์มิเมนูที่เลือกType=xtermแล้วเริ่มต้นใหม่ขั้ว Backspace เริ่มทำงานอย่างถูกต้อง!

หมายเหตุ: หากคุณติดตั้ง cygwin แล้ว - เพียงแค่เรียกใช้โปรแกรมติดตั้งอีกครั้งและเพิ่มแพ็คเกจ xterm

ฉันกำลังวิ่ง:

  • OS = Windows 8 (x64)
  • Cygwin setup.exe เวอร์ชั่น = 2.850 (x64)
  • Mitty รุ่น = 1.2-beta1 (x86_64-pc-cygwin)


0

ใช้งานได้สำหรับฉัน: ในพรอมต์คำสั่ง Windows ให้พิมพ์

(echo; echo "export TERM=cygwin") >> ~/.bash_profile

สิ่งนี้จะเพิ่มลงใน. bash_profile (ไม่ใช่. bashrc ซึ่งไม่ได้ผลสำหรับฉันและมีการขึ้นบรรทัดใหม่)


0

หลังจากใช้เวลา 2 วันในการอ่านเนื้อหาออนไลน์ ฉันเจออันนี้ที่เหมาะกับฉัน ฉันไม่ทราบว่ากรณีนี้ตรงกับทุกคน แต่มันก็ใช้งานได้อย่างมีเสน่ห์สำหรับฉันขอบคุณ Yuksel

ปัญหาเกิดจากไฟล์ 'termInfo' ขั้นตอนที่เขาแนะนำ

  1. ยืนยันว่าปัญหาเกี่ยวกับเครื่องเทอร์มินัลโดยการพิมพ์ใน CygWin Terminal ควรให้ (ละเว้นคำเตือน)

    less my_session.log

คำเตือน: เทอร์มินัลไม่ทำงานอย่างสมบูรณ์

  1. รับข้อมูลของ 'TermCap' พา ธ หรือไดเรกทอรีที่เกี่ยวข้องโดยพิมพ์รหัสด้านล่างใน CygWin Terminal

    infocmp -C

คุณควรจะได้รับ

infocmp: ไม่สามารถเปิดไฟล์ terminfo / usr / share / terminfo / 63 / cygwin

หรือคุณอาจเริ่มสิ่งที่มีข้อความเช่น 'สร้างใหม่ผ่านทาง infocmp ... '

  1. เรียกใช้รหัสด้านล่างใน CygWin Terminal เพื่อเรียกใช้การวิเคราะห์เพื่อรับรายละเอียดเพิ่มเติมเกี่ยวกับเส้นทางที่บันทึกไฟล์

    cygcheck -s

ที่ควรตอบสนองคุณคล้ายกับข้อความด้านล่าง

การวินิจฉัยการกำหนดค่า Cygwin

...

C: / cygwin / ระบบไบนารี noacl

C: / cygwin / bin / usr / bin ระบบไบนารี, noacl

C: / cygwin / lib / usr / lib ระบบไบนารี, noacl

C: \ cygwin \ etc \ terminfo / usr / share / terminfo ระบบเลขฐานสอง, noacl

คำนำหน้า cygdrive / ผู้ใช้ไบนารี cygdrive, noacl, posix = 0, อัตโนมัติ

...

  1. ตรวจสอบสายคล้ายกับ

C: \ cygwin \ etc \ terminfo / usr / share / terminfo ระบบเลขฐานสอง, noacl

จากผลลัพธ์คุณได้จากขั้นตอนที่ 3 ตอนนี้คัดลอกไฟล์และโฟลเดอร์ทั้งหมดที่มีอยู่ภายใน/ usr / share / terminfoไปยังโฟลเดอร์C: \ cygwin \ etc \ terminfo - หมายเหตุ: โฟลเดอร์นี้อาจแตกต่างจากของคุณขึ้นอยู่กับการติดตั้ง


0

โปรดปฏิบัติตามภาพด้านล่าง ป้อนคำอธิบายรูปภาพที่นี่

  1. คลิกขวาที่ใดก็ได้ในหน้าต่าง Cygwin
  2. คลิก options
  3. คลิกที่Keysแท็บ
  4. เห็บ Backarrow sends ^H
  5. กดใช้

นี่เป็นสิ่งเดียวที่ทำงานให้ฉันโดยเฉพาะอย่างยิ่งถ้าคุณต้อง SSH ไปยังเซิร์ฟเวอร์ (ไม่ใช่การแก้ไขทั้งหมดจะทำงานได้) ฉันใช้เพื่อเพิ่ม. stty erase ^?bashrc ของฉัน แต่สิ่งนี้แก้ไขปัญหาได้เพียง 80% เท่านั้น


-1

ไม่เคยประสบปัญหาของคุณ ลองติดตั้ง Terminal Emulator Mintty ( http://code.google.com/p/mintty/ )

มีให้บริการผ่านโปรแกรมติดตั้ง Cygwin สุดยอดเทอร์มินัลสำหรับ cygwin


สิ่งนี้ไม่ได้ช่วย
user620189

แม้จะติดอยู่ในปัญหาเดียวกันและจาก minty ยังฟังก์ชั่น Backspace ไม่ทำงาน ฉันได้รับพื้นที่เมื่อฉันตี backspace ทั้ง terminal มินต์เช่นเดียวกับ cygwin terminal
Rachel

@Rachel คุณเคยแก้ไขปัญหานี้หรือไม่? ฉันเห็นปัญหาเดียวกันกับการติดตั้ง Cygwin ใหม่ :(
SomeCallMeTim

@SomeCallMeTim: ฉันสามารถแก้ไขปัญหานี้ได้โดยใช้ Minty cygwin มีพฤติกรรมที่แปลกประหลาดหลายครั้ง
Rachel

@ ราเชลขอบคุณแม้ว่าฉันพบว่าปัญหาของฉันคือการติดตั้ง Cygwin พลาดไฟล์สำคัญบางอย่าง (เช่น / usr / lib / terminfo) ฉันไม่รู้ว่าทำไมพวกเขาถึงหายไป พบคนอื่นที่มีปัญหานั้นเข้าสู่การตั้งค่าและบอก terminfo และ termcap เพื่อติดตั้งใหม่และทุกอย่างทำงานได้
SomeCallMeTim
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.