จะข้ามคำในเทอร์มินัล OS X ได้อย่างไร


11

สมมติว่าฉันเขียนคำสั่งยาวในเทอร์มินัล Mac OSX เช่น

say "Hello, how are you? I am good thank you. How is it going with you? Fine, thanks"

และตอนนี้ฉันต้องการที่จะเปลี่ยนคำไปHelloHi

ในการทำเช่นนั้นตอนนี้ฉันต้องกด (หรือค้างไว้) แป้นคีย์บอร์ดด้านซ้ายค้างไว้จนกระทั่ง "เคอร์เซอร์" ถึงท้ายคำHelloแล้วจึงลบ เทคนิค 'ตัวเลือกการกดค้าง' ตามปกติไม่สามารถใช้งานได้ในแอปพลิเคชัน OS X ส่วนใหญ่

มีวิธีที่จะข้ามคำในแต่ละครั้งแทน (หรือวิธีที่สั้นกว่าอื่น ๆ ของการเคอร์เซอร์ที่นั่น)?

คำตอบ:


19

แก้ไขบรรทัดคำสั่งเป็นฟังก์ชั่นของเปลือกของคุณไม่ใช่ของเทอร์มิ อาจเชลล์ของคุณเป็นทุบตีและสไตล์การแก้ไขบรรทัดคำสั่งอาจถูกตั้งค่าเป็น "emacs"

ต่อไปนี้เป็นชุดของแป้นแบบ Emacs ที่คุณอาจพบว่ามีประโยชน์:

  • Ca: beginning-of-line
  • Ce: end-of-line
  • Mf: forward-word
  • Mb: backward-word
  • cd: delete-char
  • Md: kill-word(ลบ 'คำ' ถัดไป)
  • M-DEL: backward-kill-word

C- xหมายถึงControl+ xดังนั้น Ca เป็น+Controla

M- xหมายถึงMeta+ xแต่อาจไม่มีคีย์ Meta บนแป้นพิมพ์ของคุณ ดังนั้นคุณสามารถใช้ ESC x (เช่นEscapeนั้นx) เทอร์มินัลมีการตั้งค่าให้ส่ง ESC โดยอัตโนมัติก่อนกดปุ่มค้างOptionไว้ การใช้คุณสมบัตินี้จะปิดใช้งานการจัดการอักขระแบบขยายที่ Mac OS X มักจะมีให้เมื่อใช้ตัวเลือกปรับปรุง ดังนั้นหากคุณใช้อักขระเพิ่มเติมจำนวนน้อยและต้องการให้Option+ xส่ง ESC xคุณสามารถเปิดใช้งานตัวเลือกเทอร์มินัลนี้ได้

มีหลายวิธีในการย้ายไปที่“ Hello” ในตัวอย่างของคุณ:

  • ค้นหา“ Hello”: Cr H ello Cj (หรือ ESC)
    • ใน Emacs ปกติคุณเพียงแค่ใช้ RET ( Return) เพื่อสิ้นสุดการค้นหาที่ตำแหน่งปัจจุบันและกลับสู่การแก้ไข แต่ในbashการเชื่อมโยงเริ่มต้นทำให้ RET (เช่น Cm) รันบรรทัดปัจจุบันเสมอแม้ว่าการค้นหาแบบเพิ่มจะทำงาน ดังนั้นส่วน Cj / ESC คือส่วนเบี่ยงเบนจาก Emacs ปกติ
  • ข้ามไปที่จุดเริ่มต้นของบรรทัดและก้าวไปข้างหน้า: Ca Mf Cf (หรือ)
  • ข้ามไปยังจุดเริ่มต้นของบรรทัดจากนั้นเลื่อนไปตามคำ: Ca Mf Mf Mb
  • ใช้ Mb มาก (ทำได้จริง ๆ เท่านั้นถ้าคุณแมปตัวเลือกกับ Meta)

นอกจากนี้ยังมีหลายวิธีในการเปลี่ยนทดแทนที่คุณต้องการ:

  • ลบคำและแทนที่: Md H i
  • ลบตัวอักษรและแทนที่: Cd Cd Cd Cd H i
  • เลื่อนผ่าน“ H” แล้วลบงานต่อไปนี้แทนที่: Cf Md i
  • เลื่อนผ่าน“ H” และลบอักขระที่เหลือแทนที่: Cf Cd Cd Cd Cd i

หากคุณหยุดที่ท้ายคำ (อาจผ่าน Ca Mf Mf) คุณสามารถใช้ M-DEL H i

คุณอาจทำสิ่งที่ต้องการbind -P | lessค้นหาการผูกที่น่าสนใจอื่น ๆ ศึกษาส่วนreadlineของหน้าbash man (หรือส่วน readline ของหน้าข้อมูลbash ) สำหรับรายละเอียด


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

1
@นาย. ผู้ชาย: ใช้<kbd>องค์ประกอบ ย่อยของ HTML ได้รับอนุญาตในมาร์กอัปที่นี่ ลักษณะที่ปรากฏนั้นเกิดจากการกำหนดแท็ก (พื้นหลัง, สีขอบ, ลักษณะขอบ, ความกว้างของเส้นขอบ ฯลฯ ) คุณสามารถตรวจสอบมาร์กอัปแหล่งที่มาของโพสต์ของฉัน (“ ดูแหล่งที่มา” ในหน้านี้ ) ดูmeta.stackexchange.com/questions/5527แม้ว่าสไตล์แฟนซีจะถูกปิดใช้งานบน MSO: meta.stackexchange.com/questions/1939/#23571
Chris Johnsen

ฉันไม่แน่ใจว่านี่ชัดเจนหรือไม่ฉันใช้เวลาหนึ่งนาทีในการคิด แต่ฉันใช้ MBP ที่ไม่มีเมตาคีย์และฉันใช้การกำหนดค่าเริ่มต้นของเทอร์มินัล หากต้องการเลื่อนไปข้างหน้าและข้างหลังคำฉันสามารถกด Esc แล้ว F หรือ Esc แล้ว B. เพียงต้องการพูดถึงว่าเพราะวิธีที่อธิบายไว้ข้างต้นทำให้ฉันลองและกด Esc + x แล้ว f หรือ b ...
cwd

มีวิธีการเปลี่ยนสภาพแวดล้อมหรือเปลือกเพื่อให้ฉันสามารถทำ ctrl หรือ fn + ปุ่มลูกศรเพื่อให้ตรงกับ IDE ของฉัน
codecowboy

1
คุณสามารถใช้การเชื่อม vi โดยเพิ่มset -o viใน. bashrc ของคุณ! gnu.org/software/bash/manual/html_node/…
Will Munn

2

ค่าเริ่มต้นการโยง readline สำหรับforward-wordคือ Meta-F ( bash(1)หน้าคน, ส่วนREADLINE , คำสั่งสำหรับการย้ายส่วนย่อย) ฉันไม่แน่ใจว่า Meta แปลว่าอะไรใน OS X ตัวเลือกบางที


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