เป็นไปได้ไหมที่จะกำหนดค่า ctrl-w (ลบคำ)?


40

โดยปกติCtrl+ Wลบกลับไปที่ช่องว่างสุดท้าย

เป็นไปได้หรือไม่ที่จะกำหนดค่าให้ใช้อักขระเพิ่มเติมเช่น/?

แก้ไข: เพื่อให้ชัดเจนยิ่งขึ้น: ฉันไม่ต้องการกำหนดค่าคีย์ให้ฉันต้องการหยุดการลบด้วย/เช่นกัน

ตัวอย่าง:

vim /foo/bar^W
vim /foo/

คำตอบ:


29

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

stty werase undef
bind '\C-w:unix-filename-rubout'

คุณต้องการบรรทัด undef มิฉะนั้น bash จะข้ามการโยงใหม่ของคุณ C-w


3
ควรสังเกตว่าstty werase undefจะหยุดคุณจากการใช้ Cw ในโปรแกรมใด ๆ (ผูกจะช่วยให้คุณสามารถใช้ใน readline)
0fnt

24

คุณควรจะสามารถใช้ Esc จากนั้นย้อนกลับเพื่อลบคำที่คั่นด้วยเครื่องหมายทับ

คุณสามารถเปลี่ยนแปลงสิ่งนี้ได้โดยใส่สิ่งนี้ลงในตัวคุณ. bashrc:

bind '\C-f:unix-filename-rubout'

ตอนนี้ใช้Ctrl+f ทำสิ่งที่คุณต้องการ


1
ขอบคุณนั่นคือคำสั่งที่ใช้งานได้ มีวิธีการเขียนทับคำสั่งของ Cw หรือไม่ หากฉันเปลี่ยนC-w:...เป็นพฤติกรรมเริ่มต้นของการลบช่องว่างถัดไปยังคงอยู่ในคีย์อื่น (เช่น F) ถ้าใช้งานได้ดี
SkaveRat

ฉันไม่คิดว่า ctrl-w จะจัดการโดยเชลล์เพียงอย่างเดียว มันอาจถูกจัดการโดย tty ด้วย การตั้งค่า tty ของคุณแสดงด้วยstty -aอะไร? คุณมีการควบคุม -w เป็นถ่านเริ่มต้นสำหรับ werase? หากคุณลบการตั้งค่านั้นออกจาก tty ด้วย Comman stty werase undefแล้วทุบตีทำงานตามที่คาดไว้หรือไม่
eppesuig

23

สำหรับปัญหาเฉพาะนี้คุณยังสามารถใช้:

Alt + Backspace

$ cd /home/me/test/a_dir/    # Alt + Backspace
$ cd /home/me/test/          # Alt + Backspace
$ cd /home/me/               # ...

การอ้างอิงที่ดี: การผจญภัยด้วยการลบคำของ bash


2
! น่ากลัว คำตอบอื่น ๆ ส่วนใหญ่แนะนำให้ rebinding Ctrl+wหรือ Ctrl + B หรือบางสิ่งบางอย่างunix-filename-ruboutแต่ก็มากดีที่มีในตัวที่มีผลผูกพัน: M-Backspace (Alt + Backspace หรือกด Esc Backspace)
โคลินเบนเน็ตต์ D

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

@ananjyx โอ้ ฉันกำลังทำงานกับ GNU ทุบตี คุณยังอยู่ในรสชาตินี้หรือไม่?
fedorqui

7

ด้วย bash คุณสามารถรับเอฟเฟกต์ที่ต้องการได้โดยใส่ต่อไปนี้ในไฟล์ ~ / .bashrc ของคุณ:

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

กดCTRL+Vปุ่มและคีย์ผสมของคุณเพื่อดูว่าเครื่องจำลองเทอร์มินัลของคุณมีลักษณะอย่างไร ยกตัวอย่างเช่นCTRL+bkspสามารถตีความแตกต่างกันในขั้วที่แตกต่างกันเช่นหรือ^H ตัวละครที่เป็นเช่นเดียวกับ^?^CTRL


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

การใช้ backward-kill-word เชื่อมโยงกับ \ Cw มันจะลบย้อนกลับไปที่เครื่องหมายทับสุดท้ายที่กำหนดถ้ามีอยู่ในคำหนึ่งและจะลบคำที่คั่นด้วยช่องว่าง นี่ไม่ใช่สิ่งที่คุณต้องการ?

ระบบของฉันใช้^F- แต่การใช้"\^F"ในสคริปต์ด้านบนไม่ทำงาน
SkaveRat

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