รหัสบ้านไม่ทำงานในเทอร์มินัล


13

ฉันใช้ GNOME Terminal 2.7.3 และ zsh 4.3.9 (x86_64-unknown-linux-gnu)

HomeและEndไม่ทำงาน ไม่มีอะไรเกิดขึ้นและไม่มีอะไรปรากฏขึ้นเมื่อฉันกด แต่มันจะทำงานเมื่อฉันกดshift + Home(เลื่อนไปที่จุดเริ่มต้นของเอาต์พุตเชลล์) และทำงานในโปรแกรม GUI อื่น ๆ ฉัน googled และลองต่อไปนี้ ไม่มีการเปลี่ยนแปลง :(

  885  bindkey "\e[1~" beginning-of-line
  886  bindkey "\e[H" beginning-of-line
  887  bindkey "\e1~" beginning-of-line
  888  bindkey "\eH" beginning-of-line
  889  bindkey "\e[0H" beginning-of-line

PS: เมื่อฉันอยู่ในแท็บสุดท้ายและกดCtrl + pagedownฉันได้รับการ;5~พิมพ์บนหน้าจอ นั่นให้เบาะแสหรือไม่?


คุณมี.inputrcในโฮมไดเร็กตอรี่ของคุณหรือไม่? สิ่งนี้เกิดขึ้นกับผู้ใช้ที่สร้างขึ้นใหม่หรือไม่ สิ่งนี้เกิดขึ้นเสมอหรือเริ่มต้นหนึ่งวัน
บาฮามาต

.inputrcไม่มีฉันไม่ได้มี ฉันไม่ได้รับอนุญาตให้สร้างผู้ใช้ใหม่ มันเป็นอย่างนั้นเสมอ ที่อาศัยอยู่กับ I'am และctrl +a ctrl+e
balki

1
ฉันเดาว่าในกรณีนั้นฉันจะไม่แนะนำctrl+a& ctrl+e;-)
bahamat

คำตอบ:


4

ฉันอยู่บนฟางตอนนี้เลยผมขอแนะนำให้คุณอ่านวิกิพีเดีย ArchLinux ของระมัดระวังทั้งหมดของมัน: Home และปุ่มวางสายไม่ได้ทำงาน

สิ่งที่ฉันทำเพื่อแก้ไข:

  1. กด Ctrl-V Home ลำดับการ Escape สำหรับปุ่ม Home จะถูกพิมพ์ มันเป็นไม่ได้ \e[4~และขณะที่ผมคาดว่าจะโดยดูที่\e[1~ /etc/inputrcมันเป็น[Hและ[F

  2. แตกข้อมูลเทอร์มินัล infocmp $TERM >terminfo.src

  3. เปิดไฟล์นั้นเพื่อทำการแก้ไขเช่นvim terminfo.srcมองหาkhomeและkendมันถูกกำหนดให้กับบางสิ่งสมมติว่าkhome=\E[1~และkend=\E[4~ไม่ทำงานในกรณีนี้ เอามันออกไปและแทนที่ด้วยลำดับที่คุณพบในขั้นตอนที่ 1 ดังนั้นสำหรับผมแล้วหลังจากการแก้ไขคือ: และkhome=\E[Hkend=\E[F

  4. หากคุณต้องการเล่นอย่างปลอดภัยตรวจสอบให้แน่ใจ[Fและ[H(หรือลำดับใดก็ตามที่คุณเพิ่งใช้) ไม่ได้ถูกมอบหมายให้ทำอย่างอื่นมิฉะนั้นสิ่งต่าง ๆ จะถูกทำให้ยุ่งเหยิง!

  5. เรียกใช้tic terminfo.srcซึ่งสร้าง~/.terminfoไดเรกทอรี

  6. ด้านบนของ.zshrcคำสั่งก่อนหน้าและอื่น ๆ ให้วางexport TERMINFO=~/.terminfo

เปิดหน้าต่างเทอร์มินัลใหม่และคุณควรจะดีบ้านและปลายทางต้องทำงานทันที

PS: วิธี bindkey ในทางทฤษฎีควรทำงานได้ง่ายขึ้น แต่มันก็ไม่ได้สำหรับฉัน


ทดสอบด้วย CentOS + bash - ใช้งานได้! ขอบคุณ :)
Kasia Gauza

6

ลำดับเอสเคปที่ส่งโดยฟังก์ชันและปุ่มเคอร์เซอร์ประกอบด้วยอักขระยกเว้นตามด้วยอักขระที่พิมพ์ได้ กดCtrl+ แล้วV Homeสิ่งนี้จะแทรกลำดับการหลบหนีอย่างแท้จริง แล้วเพิ่มคำแนะนำของคุณbindkey~/.zshrc

คำแนะนำน่าจะเป็น (หมายเหตุOไม่ใช่0):

bindkey '\e[OH' beginning-of-line
bindkey '\e[OF' end-of-line

ไม่มีอะไรถูกพิมพ์เมื่อฉันกด Ctrl จากนั้นหน้าแรก ไม่มีอะไรเกิดขึ้น. พยายามเปลี่ยน 0 เป็น O เช่นกัน
balki

@balki มันเป็น Ctrl + V ไม่ใช่ Ctrl ฉันเพิ่งรู้ว่ามีปัญหาการจัดรูปแบบในคำตอบของฉัน
Gilles 'หยุดความชั่วร้าย' ใน

ขอบคุณ! :) ตอนนี้ฉันคุ้นเคยกับctrl + aและctrl +eและโหมด vi
balki

5

ฉันพบว่าฉันต้องกดปุ่มCTRL-vปล่อยHomeหรือกดEndปุ่มหรือเพื่อให้ได้ลำดับ^[[Hและ^[[FสำหรับHomeและEndตามลำดับ การเพิ่มบรรทัดต่อไปนี้ลงใน.zshrcไฟล์สามารถแก้ไขปัญหาให้ฉันได้:

bindkey '^[[H' beginning-of-line
bindkey '^[[F' end-of-line

2

เพิ่มบรรทัดเหล่านี้/etc/zshrcและจากนั้นทำsource /etc/zshrc(นำมาจากที่นี่ )

bindkey '\e[1~'   beginning-of-line  # Linux console
bindkey '\e[H'    beginning-of-line  # xterm
bindkey '\eOH'    beginning-of-line  # gnome-terminal
bindkey '\e[2~'   overwrite-mode     # Linux console, xterm, gnome-terminal
bindkey '\e[3~'   delete-char        # Linux console, xterm, gnome-terminal
bindkey '\e[4~'   end-of-line        # Linux console
bindkey '\e[F'    end-of-line        # xterm
bindkey '\eOF'    end-of-line        # gnome-terminal

2

คำตอบนี้อธิบายปัญหาของฉันดีมากและแก้ไขได้

/programming//a/686458/5472892

TL; DR:เปลี่ยนฉาบประเภทอาคารของคุณจากการเริ่มต้นที่จะxtermlinux

บางทีบางคนก็สามารถใช้มันได้เช่นกัน

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