จะข้ามกลับไปที่อักขระแรกในบรรทัดคำสั่ง * nix ได้อย่างไร


17

เมื่อเขียนคำสั่งแบบยาวในบรรทัดคำสั่ง * nix และต้องกลับไปที่อักขระตัวแรกเพื่อเพิ่มบางอย่างที่จุดเริ่มต้น (ตัวอย่างเช่นnohupเมื่อคุณรู้ว่ากระบวนการจะเป็นแบบยาวหรือsudoเมื่อคุณ ตระหนักดีว่าคุณต้องได้รับอนุญาตรูท) มันอาจใช้เวลานานกว่าที่เคอร์เซอร์จะกลับไปหาตัวอักษรแรก ...

มีทางลัดที่ช่วยให้คุณกระโดดตรงนั้นได้หรือไม่?

ฉันกำลังใช้ Mac ดังนั้นจึงHomeไม่ใช่ตัวเลือก


2
หากคุณใช้แล็ปท็อปของ Apple Fn + ซ้าย / ขวานั้นเทียบเท่ากับ Home / End (และที่เกี่ยวข้อง Fn + ขึ้น / ลงเป็น PageUp / Down)
duskwuff -inactive-

2
สำหรับผู้ที่อ่านคำถามนี้จะมีผลบังคับใช้เกี่ยวกับเชลล์โดยเฉพาะการแก้ไขบรรทัดคำสั่งในเชลล์ คำตอบ Ctrl-A ก่อนคือทุบตี (ส่วนใหญ่) ด้วยการแก้ไขสไตล์ Emacs เริ่มต้น
Rich Homolka

4
ทางเลือกถ้าคุณเพียงแค่ต้องเพิ่มเป็นประเภทsudo ได้รับการแทนที่ด้วยคำสั่งก่อนหน้า sudo !!!!
Matthew Crumley

คำตอบ:


29

Ctrl+Aควรทำงาน. Ctrl+Eสอดคล้องกับจุดสิ้นสุดของบรรทัดคำสั่ง


1
ที่ดี! มันทำงานได้อย่างสมบูรณ์บน mac!
clami219

1
นอกจากนี้ยังนำไปใช้กับโปรแกรมแก้ไขโค้ดจำนวนมาก
Jwosty

2
@ clami219: ใช้งานได้จริงในบริบทข้อความส่วนใหญ่ใน OSX การผูก Emacs เป็นสิ่งที่ยอดเยี่ยม ...
tommyo

ขอบคุณมันใช้งานได้บน Linux เช่นกัน
Gideon Babu

10

ขึ้นอยู่กับเชลล์ที่มีปัญหา

เชลล์บางตัว (เช่น AT&T ksh88) ไม่มีการแก้ไขบรรทัดอินพุต

ในเชลล์ที่ใช้การviแก้ไขโหมด (คุณอาจต้องเปิดใช้งานสิ่งนี้ด้วยset -o vi) สิ่งนี้ทำได้โดยการกดEsc(เพื่อสลับจากโหมดแทรก) ตามด้วย0เพื่อข้ามไปยังจุดเริ่มต้นของบรรทัดหรือ$เพื่อข้ามไปยังจุดสิ้นสุดของบรรทัด จากนั้นเข้าสู่โหมดแทรกอีกครั้งโดยการกดi- เคอร์เซอร์จะอยู่ในตำแหน่งเดิม - หรือa- เคอร์เซอร์จะเลื่อนไปทางขวาหนึ่งครั้งเพื่อต่อท้ายข้อความ

vi การแก้ไขโหมดเมื่อเร็ว ๆ นี้ได้รับคำสั่งจากมาตรฐาน POSIX

การแก้ไขโหมดทั่วไปที่มากขึ้น emacs (ขอบคุณพระเจ้าไม่มีส่วนเกี่ยวข้องใด ๆ กับระบบปฏิบัติการ Slash-slash-operating-Emacs) ที่ใช้Ctrl-Aเพื่อข้ามไปที่จุดเริ่มต้นของบรรทัดและCtrl-Eข้ามไปยังจุดสิ้นสุดของบรรทัด โหมดนี้ต้องการให้คุณทำงานset -o emacsกับเชลล์จำนวนมาก (ส่วนใหญ่เด่นชัด AT&T ksh93) แต่เปิดใช้งานโดยค่าเริ่มต้นในmkshและ GNU ทุบตี

ส่วนใหญ่เปลือกหอยที่ทันสมัยรองรับทั้งemacsและviโหมด (โหมดทั้งสองนี้ต้องใช้ TTY เพื่อทำงาน)

ในเชลล์จำนวนมากคุณสามารถปรับแต่งการโยงคีย์ โดยปกติแล้วสำหรับemacsโหมดแม้ว่าบางเชลล์จะอนุญาตให้ปรับแต่งการเชื่อมโยงคีย์สำหรับviโหมด หากคุณมีความสำคัญที่คุณควรมีนี้ผูกไว้กับคุณต้องคิดออกคีย์ลำดับที่มันผลิต (ตัวอย่างเช่นในระบบของฉัน, Alt-CursorLeftผลิตEsc+[+1+;+3+D( ^[[1;3D; ^Xเป็นCtrl-Xและ^[เป็นEsc) ดังนั้นฉันสามารถพิมพ์สิ่งที่ต้องการ

bind '^[[1;3D=beginning-of-line'
bind '"\e[1;3D":beginning-of-line'

และจะมีการเปลี่ยนแปลงการผูกกุญแจนี้ขึ้นอยู่กับเปลือก คุณมักจะสามารถยังคงมีอยู่ให้พวกเขาทั้งในไฟล์เริ่มต้น ( ~/.mkshrc, ~/.kshrc) หรือสำหรับ GNU ~/.inputrcทุบตีใน โปรดทราบว่าเปลือกบางส่วนนั้นไม่สนับสนุนการผูกคีย์ทั้งหมดในทุกรุ่น

โดยปกติคุณสามารถค้นหาว่าคีย์ใดที่สร้างตัวอักษรโดยการรันcatบนเชลล์พิมพ์คีย์และดู จากนั้นกดปุ่ม^C( Ctrl-C) catเพื่อยกเลิก


ฉันชอบที่จะใช้ ^ D ตัวละคร Unix end-line เพื่อวาง cat ในใจของฉันมันคือ ^ D เพราะกระแสข้อความ "เสร็จแล้ว"
Aaron Hall

@AaronHall: มันจะไม่ทำงานหากมีบางอย่างในสายอยู่แล้ว นอกจากนี้เราต้องการยกเลิกไม่จบ ;-) แต่ใช่ในกรณีปกติคุณพูดถูก แต่นี่เป็นกรณีพิเศษ
mirabilos

เทอร์มินัลอาจทำการแก้ไขบรรทัดเช่นกัน
Samuel Edwin Ward

@mirabilos หากต้องการส่ง EOF โดยไม่ขึ้นบรรทัดใหม่ให้ทำ ^ D ^ D (เช่นกด D สองครั้ง)
Potatoswatter

@Potatoswatter ใช่ (สนุกฉันไม่รู้ว่าตัวเอง) แต่ฉันต้องการยกเลิกที่นี่โดยเฉพาะ เมื่อส่ง^D^Dฉันยังได้รับ“ ขยะ” ดังก้อง…
mirabilos

2

คุณได้ลองใช้รหัสบ้านแล้วหรือยัง? ฉันใช้ MobXterm เพื่อเชื่อมต่อกับกล่อง linux และใช้ทั้งปุ่ม Home และ End บนแป้นพิมพ์เพื่อไปที่อักขระตัวแรกหรือตัวสุดท้ายของคำสั่ง


คุณพูดถูก! ฉันต้องระบุว่าฉันใช้ mac ...
clami219

2

หากคุณเปลี่ยนไปviโหมดใช้set -o viคุณสามารถกดEscและทั้งIหรือAการป้อนข้อความที่เริ่มต้นหรือจุดสิ้นสุดของเส้น หรือถ้าคุณเพียงต้องการเพื่อเลื่อนเคอร์เซอร์มันและ^$


โหมด vi ของเชลล์อะไร?
David Richerby

2

ในโหมด emacs (เปลี่ยนโดย:) set -o emacsโดยกด:

  • Ctrl+A และ Ctrl+E
  • Home และ End
  • Esc+bและEsc+f(เลื่อนเคอร์เซอร์ไปข้างหลังและไปข้างหน้าของคำปัจจุบัน)

ในโหมด vi (เปลี่ยนโดย:) set -o viเมื่ออยู่ในโหมดคำสั่ง ( Esc) โดยกด:

  • 0/ ^และ$(มันจะอยู่ในโหมดคำสั่ง)
  • IและA(มันจะเปลี่ยนเป็นโหมดแก้ไข)

ดูสิ่งนี้ด้วย:

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