Bash readline จะถูกลบไปจนถึงเครื่องหมายทับก่อนหน้า


15

ในโหมดทุบตี emacs มีวิธีลบต่อไปจนถึงอักขระเครื่องหมายทับก่อนหน้าหรือไม่ ตัวอย่างเช่นหากฉันป้อนคำสั่งcp /usr/local/bin/reallylongincorrectfolder /home/myname/reallylong_and_correct_pathและต้องการเพียงลบreallylongincorrectfolder. มีทางลัดใด ๆ หรือไม่ นี่เป็นสถานการณ์ที่คอมมอนมากสำหรับฉันในทุบตี มีบางอย่างที่เหมือนdF<char>ใน vi?

คำตอบ:


9
bind -P |grep unix-filename-rubout

เพื่อทดสอบการล็อคปุ่มกดด้วยเช่น Ctrl- b:

bind \\C-b:unix-filename-rubout

สำหรับการใช้งานถาวรเพิ่มไปยัง ~/.inputrc


2
เพิ่มไปยังเพิ่มบรรทัดเช่นนี้ไปยังแฟ้มที่:~/.inputrc "\C-b": unix-filename-ruboutหากต้องการดูเอฟเฟกต์คุณจะต้องเริ่มเชลล์ bash ใหม่ (หรือเรียกใช้โปรแกรมอื่นที่ใช้ไลบรารี readline ของ GNU)
Croad Langshan

11

Alt- BackspaceและCtrl- wถูกแมปทั่วไปbackward-kill-wordซึ่งทำเช่นนั้น หากคุณต้องการที่จะหาสิ่งที่มันแมปไปในระบบของคุณ (ถ้ามีอะไร) bind -P | grep '^backward-kill-word'การทำงาน

ตามที่อธิบายโดย@Barmarสิ่งนี้จะแตกต่างจากunix-word-ruboutซึ่งจะนำไปสู่ขอบเขตพื้นที่ก่อนหน้า


แต่นั่นจะฆ่าทั้งคำ .. ฉันต้องการจะฆ่าจนกว่าจะถึงฟันสุดท้าย
Woodstok

มันจะลบเฉพาะกับเครื่องหมายสแลชสุดท้ายที่นี่ Slash เป็นหนึ่งในตัวคั่นคำเริ่มต้น คุณแน่ใจหรือว่าคุณกำลังใช้ Bash
l0b0

My bad .. Alt-Backspace จะลบมันออกไปจนถึงเครื่องหมายทับสุดท้ายความแตกต่างระหว่าง ALt-BackSpace และ Ctrl-W คืออะไร
woodstok

3
Ctl-w ถูกผูกไว้กับunix-word-rubout: ฆ่าคำหลังจุดโดยใช้ white space เป็นขอบเขตของคำ
Barmar

2
มันไม่ได้ผล "คำประกอบด้วยตัวอักษรและตัวเลข (ตัวอักษรและตัวเลข)" ดังนั้นมันจะหยุดมากกว่าแค่เครื่องหมายทับ ค่าเริ่มต้น - ไม่ผูกunix-filename-ruboutจะดีกว่าเล็กน้อยเนื่องจากมันจะหยุดที่ white space และ slash
Sparhawk

6

ใส่สิ่งนี้ลงในของคุณ.inputrcและเริ่มเชลล์ใหม่:

C-b:unix-filename-rubout

Ctrl- bตอนนี้ลบย้อนกลับไปที่เครื่องหมายทับถัดไป

นิพพาน!

อย่าลืมCtrl- XCtrl- Eจะเปิดตัวแก้ไขของคุณเพื่อให้คุณสามารถแก้ไขบรรทัดคำสั่งที่ซับซ้อนได้อย่างสะดวกสบาย

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