Bash: ฉันสามารถตั้งค่า Ctrl-Backspace เพื่อลบคำย้อนหลังได้ไหม?


19

เมื่ออยู่ในเชลล์ (ทุบตี) - ฉันต้องการให้ Ctrl-Backspace เชื่อมโยงกับ "ลบคำย้อนหลัง" เป็นไปได้ไหม?

แก้ไข :

ฉันกำลังใช้konsole- terminal ที่ KDE


2
คำถามตรงไปตรงมาไม่บ่นเกี่ยวกับเรื่องนั้น ฉันแค่ต้องการแสดงความคิดเห็นว่ามันมักจะคุ้มค่ามากที่จะอำนวยความสะดวกในการผูกคีย์ "มาตรฐาน" ที่มีอยู่แล้วในหลาย ๆ แอปพลิเคชันแทนที่จะปรับแต่งออกไปเพื่อผลประโยชน์ที่แท้จริงและความมั่นใจในการไม่เห็นพฤติกรรม Ctrl+wคือสิ่งที่คุณควรทำความคุ้นเคยกับอิมโฮ
Daniel Andersson

@ Daniel Andersson: หรืออีกวิธีหนึ่ง - คุณสามารถพัฒนาวิธีการถ่ายโอนการตั้งค่าของคุณไปยังเครื่องต่างประเทศ
Adobe

การแชร์ดอทไฟล์เป็นปัญหาที่แก้ไขแล้ว แต่มันก็ไม่ได้ช่วยอะไรมากไปกว่าคอมพิวเตอร์ในที่อื่น ๆ หากคุณอยู่ในระบบต่างประเทศคุณมักจะไม่มีอิสระในการกำหนดค่าสิ่งต่าง ๆ เช่นนั้นอีกครั้ง (อย่างน้อยก็ไม่ต้องไม่ถูกทุบตีโดยเพื่อนร่วมงานที่ใช้เครื่องเดียวกัน :-)) นอกจากนี้ทุกแอปพลิเคชันใหม่จะต้องได้รับการดูแลเป็นพิเศษ
Daniel Andersson

6
ฉันมีปัญหาการผกผันฉันเคยCtrl-wเป็น "ลบคำก่อนหน้า" ในคอนโซลและทำได้โดยสัญชาตญาณแม้ใน Eclipse หรือ Chrome ซึ่งมันหมายถึงแท็บปิด / ปิดไฟล์ปัจจุบัน ค่อนข้างน่ารำคาญ
Ezequiel Muns

1
ฉันมีปัญหาเดียวกันกับ Chrome SShInATab ฉันจะทำ ctrl-W โดยไม่ต้อง ctrl-W ได้อย่างไร :)
Riccardo SCE

คำตอบ:


11

ทำไมไม่เพียงแค่ใช้Alt+ BackspaceหรือCtrl+ Wที่แมปแล้วในเทอร์มินัลส่วนใหญ่ ไม่แน่ใจเกี่ยวกับคอนโซล Xmodmap (man xmodmap) อาจถูกใช้เพื่อทำการแมปคีย์ที่กำหนดเองอื่น ๆ เช่นกัน (ขัดแย้ง xmodmap ไม่สามารถแมป Backspace ได้ดีมากเพราะเทอร์มินัลแทนที่การแมป แต่มันทำงานได้ดีกับปุ่มส่วนใหญ่ ... )


9
เพราะฉันเคยใช้ Ctrl-Backspace ใน Emacs ของฉัน ฉันรู้เกี่ยวกับ Ctrl-w Alt-Backspace ใหม่สำหรับฉัน (+1)
Adobe

1
จุดดี @hellork คุณสามารถสกัดกั้น control + backspace ที่ X server (ผ่าน xmodmap) และแมปมันกับตัวละครที่ไม่ได้ใช้ (เช่น alt-backspace)

4
สิ่งที่น่ารำคาญเกี่ยวกับเรื่องนี้คือ ctrl + backspace เป็นแผนที่ที่ใช้กันทั่วไปสำหรับ "ลบคำย้อนหลัง" ในแอพ GUI ส่วนใหญ่ในระบบปฏิบัติการส่วนใหญ่ เช่นเดียวกัน Ctrl + W เป็นที่แพร่หลายสำหรับ "ปิดหน้าต่าง" Alt + w ไม่ค่อยได้ใช้สำหรับสิ่งใดใน GUI ที่ฉันนึกออก มาตรฐานจะดีมาก ฉันสงสัยว่าการหยุดชะงักที่ยิ่งใหญ่กว่าการเปลี่ยนเทอร์มินัลหรือการเปลี่ยน GUI คืออะไร
naught101

1
@ ไม่มี, Control-W เป็นคีย์ลบคำที่เป็นค่าเริ่มต้นแล้วในเทอร์มินัลยูนิกซ์ ใช่มันขัดแย้งกับการประชุม Windows / GUI แต่ในความเป็นจริงมันมาก่อน - หลายปี ตำหนิ Microsoft!
alexis

11

ฉันพบกระทู้นี้ผ่าน google แต่คำตอบไม่ใช่สิ่งที่ฉันต้องการได้ยิน ดังนั้นฉันเล่นไปรอบ ๆ :

ใน terminal ของฉัน Backspace ปกติส่ง^Hขณะ Ctrl + Backspace ^?ส่ง ดังนั้นควรเป็นกรณีของการปฏิเสธ^?การลบคำซึ่งโดยค่าเริ่มต้นจะพร้อมใช้งานผ่าน Ctrl + W

ครั้งแรก (ลองไม่สำเร็จ):

$ bind -P | grep 'C-w'
unix-word-rubout can be found on "\C-w".

ดังนั้นจึงควรทำงาน:

$ bind '"\C-?":unix-word-rubout'

อย่างไรก็ตามมันไม่ได้ ... ใครสามารถอธิบายได้?

การลองครั้งที่สอง (สำเร็จ):

$ bind '"\C-?":"^W"'

ตำแหน่งที่^Wเป็นตัวอักษร / ดิบ^W(กด ctrl + V แล้วกด ctrl + W เพื่อให้ปรากฏ)


ทางออกแรกของคุณใช้ได้สำหรับฉันจริงๆแล้ว! ประการที่สองไม่ได้
Drew Hoskins

ความพยายามครั้งที่สองดูเหมือนจะแทนที่ backspace เองแทนที่จะเป็น Ctrl-Backspace หรือไม่
user541686

7

เพียงแก้ไขของคุณ~/.inputrc(คุณอาจต้องสร้างหรือคัดลอกหนึ่งใน/etc/inputrcนั้น) เพื่อให้มี:

# Ctrl-Delete: delete next word
"\e[3;5~": shell-kill-word

# Ctrl-Backspace
"\C-H": shell-backward-kill-word

แผนที่นี้จะใช้Ctrl+ Deleteเพื่อลบคำถัดจากเคอร์เซอร์


ไม่ได้ผลสำหรับฉัน
Jonathan

6

มีบางคำตอบที่ดีอยู่ที่นี่ แต่ฉันจะแก้ไขใน Konsole กับการตั้งค่า> แก้ไข Profile- ปัจจุบัน> คีย์บอร์ด> แก้ไขแล้วเพิ่มการทำแผนที่จากไปBackspace+Control \x17(ฉันพบรหัส ASCII สำหรับ Ctrl-w โดยใช้showkey --ascii)


showkeyขอบคุณสำหรับการชี้ให้เห็นสิ่งที่มี ดังนั้นผมจึงคิดว่าคำลบในด้านหน้าของเคอร์เซอร์จะสอดคล้องกับALT+D \x1b\x64
โลกิ

ขอบคุณมันแก้ปัญหาของฉันได้ ในกรณีของฉันฉันจะต้องทำการแมป + Alt Backspace \x1b\x7fและลำดับของมันคือ
DDMC

3

ขึ้นอยู่กับสิ่งที่ทุบตีเห็น ในการโต้ตอบกับเทอร์มินัลปกติทุบตีจะไม่เห็นตัวดัดแปลงที่สำคัญที่คุณกด Backspace นั้นเหมือนกับ control-H อยู่แล้ว กดปุ่ม Shift หรือการควบคุมค้างไว้ก็ไม่ต่างอะไร

อย่างไรก็ตามแอปพลิเคชันเทอร์มินัลของคุณ (xterm? cmd? Terminal? Putty? ขึ้นอยู่กับระบบปฏิบัติการของคุณ) สามารถดูการกดปุ่มของคุณและอาจมีวิธีการแมปการรวมกันของปุ่มควบคุม Backspace กับสิ่งที่ทุบตี


ฉันพบว่าทุบตีของฉันไม่เห็น backspace แต่อาจเป็นไปได้ที่จะทำให้เห็นว่า
Adobe

@adobe คุณหมายถึงอะไร พิมพ์ 'stty' ที่เทอร์มินัลของคุณแล้วอ่านคู่มือเกี่ยวกับมัน หาก ^ H ถูกตั้งค่าให้เป็นอักขระลบคุณสามารถตั้งค่าเป็นอย่างอื่น ... หากคุณมีเหตุผลที่ดี

1
มีตัวอย่างที่ดีของวิธีการทำเช่นนี้เป็นgithub.com/calj/gtconf/blob/master/zsh/zshrc Konsole ให้คุณทำได้ คัดลอกหนึ่งในไฟล์ * .keytab จาก / usr / share / kde4 / apps / konsole / ลงใน ~ / .kde / share / apps / konsole และแก้ไขด้วยคำแนะนำในลิงค์ด้านบนลบบรรทัด "key Backspace" และ เพิ่ม: key Backspace-Shift-Control : "\x7f"และkey Backspace-Shift+Control : "\E[9;3~"เปลี่ยนบรรทัดหัวเรื่องขณะที่คุณอยู่: keyboard "Xfree4 Modlist"ตัวอย่างเช่น จากนั้นคุณสามารถเพิ่ม"\e[9;3~": backward-kill-word"~ / .inputrc
Adam

2

ลองสิ่งนี้:

bind '"\C-_":backward-kill-word'

เพิ่มทางเลือกต่อไปนี้ใน ~ / .inputrc เพื่อให้ถาวร:

"\C-_": backward-kill-word

ใช้งานได้กับทุบตี 4.3.11 ใน Kubuntu 14.04


2
Control-backspace ไม่น่าจะเหมือนกับ Control-underscore
Thomas Dickey

1
จากทุกสิ่งที่ฉันลองในหัวข้อนี้สิ่งนี้ได้ผล! ใช้ "GNU bash รุ่น 4.3.48 (1) - ปล่อย (x86_64-pc-linux-gnu)" บน bash บน windows / WSL
Markus Jevring

นี้ทำงานได้ดีสำหรับฉันใน Cygwin GNU bash, version 4.4.12(3)-release (x86_64-unknown-cygwin)ใช้
zagyi

1

ใน Konsole:

  • คลิก Settings -> Edit current profile
  • คลิกแท็บ 'แป้นพิมพ์' -> [Edit...]
  • คลิก[Add]ปุ่มและอยู่ภายใต้คอลัมน์ชนิดKey Combination Backspace+CtrlในOutputประเภทคอลัมน์0x08(ซึ่งเป็นอักขระ Backspace ตามอัตภาพ)

ตอนนี้คุณน่าจะสามารถแมปกุญแจนั้นbackward-kill-wordผ่านได้

# ~/.bashrc

bind '"\x08":backward-kill-word'

ขอบคุณ ทำงานได้ดีสำหรับฉันใน xfce4-terminal อย่างน้อย
limon

0

สำหรับเทอร์มินัลส่วนใหญ่ CTRL + W ควรลบคำไปข้างหลังแล้ว สิ่งนี้ใช้ได้กับ xterm และฉันคิดว่ามันใช้ได้กับ konsole CTRL + W คือการเชื่อมโยงคีย์มาตรฐานกับโปรแกรมที่ใช้ข้อความซึ่งจะทำงานกับ vim ในโหมดการแทรก emacs และทุกเชลล์


5
ฉันได้กด Ctrl-w กับ "แท็บปิด" ใน Emacs, FireFox, Krusader - ดังนั้นฉันจึงตั้งค่าให้เป็นการรวมแท็บปิดใน Konsole ด้วย
Adobe
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.