ฉันจะแก้ไขบรรทัดก่อนหน้าในคำสั่งหลายบรรทัดใน Bash ได้อย่างไร


24

เมื่อป้อนคำสั่งที่ครอบคลุมหลายบรรทัดใน Bash ฉันจะแก้ไขบรรทัดก่อนหน้าได้อย่างไร ฉันเป็นผู้ใช้ Linux Mint (Lisa) โดยใช้เทอร์มินัล GNOME

ตัวอย่างเช่นฉันพิมพ์:

$ echo "foo bar
> baz
>

และเมื่อฉันกำลังจะพิมพ์บรรทัดที่สามของคำสั่งทันใดนั้นฉันก็รู้ว่าฉันต้องการ "foo" และ "bar" เพื่อแยกบรรทัด ฉันจะเปลี่ยนตำแหน่งเคอร์เซอร์ของฉันระหว่าง "foo" และ "bar" อย่างที่ฉันสามารถกด enter และวางไว้ในบรรทัดแยกกันได้อย่างไร

(มันไม่ง่ายอย่างที่คุณคิดว่าลูกศรขึ้นใช้งานไม่ได้และ Ctrl-P ไม่ได้โปรดลองก่อนโพสต์ขอบคุณ!)


คำตอบที่ยอมรับบอกว่าไม่มีวิธีแก้ปัญหา แต่มี ดูด้านล่าง
cdosborn

คำตอบ:


16

น่าเสียดายที่มันไม่ได้ขึ้นอยู่กับbashขั้ว ตัวเลือกของคุณคือ:

  1. ใช้เครื่องหมายอัฒภาคแทนการขึ้นบรรทัดใหม่แม้ว่าคุณจะไม่สามารถเลื่อนขึ้นบรรทัดหน้าจอได้ในแต่ละครั้ง แต่ต้องใช้คำสั่งตัวอักษรหรือการเคลื่อนไหวคำ ( zshอย่างน้อยที่สุดจะช่วยให้คุณสามารถย้ายภายในคำสั่งผสมเมื่อแก้ไขประวัติ แต่ไม่ได้อยู่ในคำสั่งปัจจุบัน ) บางครั้งfc(ซึ่งโยนคุณลงในโปรแกรมแก้ไขด้วยคำสั่งก่อนหน้า) เป็นวิธีที่ง่ายที่สุดในการจัดการคำสั่งผสม

  2. หากคุณกำลังใช้ Bash ให้ใช้คีย์ผสมต่อไปนี้:

    ctrl x e

    มันจะเปิดคำสั่งที่คุณกำลังทำงานกับการใช้โปรแกรมแก้ไขข้อความของคุณ บันทึกไฟล์และออกจาก (ฉันพบคำสั่งในการนำเสนอของ Shell Hater ) ผู้ใช้ Zsh มีทางเลือกนี้


1
หน้า bash man อธิบายวิธีเปลี่ยนโปรแกรมแก้ไขที่ใช้: edit-and-execute-command (C-xC-e) - เรียกใช้โปรแกรมแก้ไขบนบรรทัดคำสั่งปัจจุบันและเรียกใช้ผลลัพธ์เป็นคำสั่งเชลล์ Bash พยายามเรียกใช้ $ VISUAL, $ EDITOR และ emacs เป็นตัวแก้ไขตามลำดับนั้น
Matthew

มีวิธีแก้ไขโดยไม่ต้องเปิดโปรแกรมแก้ไข
cdosborn

ในทางเทคนิคแล้วมันไม่ได้ขึ้นอยู่กับการทุบตี - แต่ไปที่ไลบรารี "readline" ที่ทุบตีใช้เพื่อรับอินพุต
Christian Herenz

11

วิธีแก้ไขคืออย่าป้อนคำสั่งจนกว่ามัลติไลน์จะถูกต้องเพียงพิมพ์: CtrlvCtrlj เมื่อคุณต้องการไปที่บรรทัดถัดไป Metabเพื่อย้อนกลับคำ

วิธีการแก้

ให้เครดิตกับคำตอบของ @ rici


4

สนุกพอCtrl+Cคือสิ่งที่คุณกำลังมองหา

เมื่อคุณอยู่

$ echo "foo bar
> baz
>

เพียงกดCtrl+C(บรรทัดคำสั่งที่แก้ไขจะระงับ) และกดUp(ประวัติก่อนหน้า) ข้อความแจ้งของคุณจะเป็น: (สังเกตว่าไม่มี>)

$ echo "foo bar
baz

ตอนนี้คุณสามารถเคลื่อนที่ไปLeft Rightได้ด้วยการกระโดดข้ามเส้น

มีเพียงหนึ่งมุมแหลมคือคุณจะต้องอยู่ในตัวอักษรตัวสุดท้ายที่จะเพิ่มสายอื่นเพื่อย้ายไปรอบ ๆ เพื่อแก้ไขสายที่มีอยู่ (ไปที่เริ่มต้นด้วยCtrl+A) กดEnter ถ้าว่าพอหรือจุดสิ้นสุดโกโตะ ( Ctrl+E) Enterเพื่อเพิ่มสายมากขึ้นด้วย ข้อเสียเปรียบอีกประการหนึ่งคือCtrl+_(ยกเลิก) จะคืนค่าการเปลี่ยนแปลงจากครั้งล่าสุดเท่านั้นCtrl+C


-2

คัดลอกคำสั่งและวางในแผ่นจดบันทึกแล้วจัดรูปแบบจากที่นั่น หลังจากนั้นคุณสามารถคัดลอกคำสั่งของคุณกลับไปที่เทอร์มินัล

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