Terminal Mac OS X: ตัวเลือกแผนที่ + ลบเป็น“ ลบคำย้อนหลัง”


232

พยายามแมปจากค่ากำหนด -> การตั้งค่า -> แป้นพิมพ์ แต่กล่องคำสั่งผสม "คีย์" มี "ลบไปข้างหน้า" เท่านั้น แต่ไม่มี "ลบ" แป้นพิมพ์ของฉันมีเพียง "ลบ" และไม่มี "ลบไปข้างหน้า" เท่านั้น!

มีวิธีอื่นที่จะทำยกเว้นจากการตั้งค่าหรือไม่


โดย "backward delete word" คุณหมายถึงปุ่ม backspace หรือไม่ ฉันไม่ทราบว่าแป้นพิมพ์ Apple ตัวใดที่มีคีย์ลบ
Sören Kuklau

โดย "ย้อนหลังลบคำ" ฉันหมายถึงอย่างนั้น - เพื่อลบคำทั้งหมดที่เริ่มต้นจากเคอร์เซอร์ไปข้างหลัง :) Macbook ตัวสุดท้ายมีคีย์ชื่อ "ลบ" แต่ทำหน้าที่เป็น backspace
ibz

ฉันกำลังเผชิญกับปัญหาเดียวกัน แป้นพิมพ์มีการลบย้อนหลัง แต่ไม่สามารถใช้เป็นการรวมใน Terminal.app
knoopx

สำหรับฉันแล้วคำถามของคุณควรได้รับการสนับสนุนเป็นอย่างมาก มันช่วยฉันได้มาก ก่อนหน้านี้ฉันเป็น Ubuntu ตอนนี้ทำให้ชีวิตของฉันง่ายขึ้นใน Mac OS ด้วย ขอบคุณ
doptimusprime

คำตอบ:


424

เปิดใช้งานคีย์ตัวเลือกเป็นคีย์เมตา

  1. ไปTerminal> Preferences> Profiles>Keyboard
  2. Use option key as meta keyตรวจสอบ

ภาพ

บน macOS High Sierra 10.13.6 ถูกจับเมื่อวันที่ 23 ตุลาคม 2018

ภาพประกอบของหน้าต่างเพื่อสลับคีย์ตัวเลือกเป็นคีย์เมตา

หมายเหตุ

แอปพลิเคชั่นจำนวนมาก (รวมถึง bash และ tcsh) ปฏิบัติกับ Meta-Delete ในฐานะ


32
อยู่ภายใต้การตั้งค่าเทอร์มินัล> การตั้งค่า> แป้นพิมพ์ด้านล่างขวา
Jon

16
ทำไมถึงไม่เป็นค่าเริ่มต้น!
Ross Hambrick

8
บน Yosemite การตั้งค่านี้อยู่ภายใต้การตั้งค่า -> โปรไฟล์ -> คีย์บอร์ด ดูเหมือนว่าคุณจะต้องเปลี่ยน / ตั้งค่าสำหรับแต่ละโปรไฟล์
palimpsestor

6
สำหรับแป้นพิมพ์ที่ไม่ใช่ของสหรัฐอเมริกาจำเป็นต้องใช้ปุ่มตัวเลือกเพื่อให้ได้อักขระบางตัว (เช่นไปป์ '|' เป็นสิ่งสำคัญที่เชลล์) ในกรณีนั้น <Esc> b และ <Esc> f ที่กล่าวถึงในคำตอบอื่น ๆ น่าจะเป็นทางออกที่ดีที่สุด?
Touko

8
น่าเสียดายนี่คือการต่อต้านสำหรับโปรแกรมเมอร์ที่มีคีย์บอร์ดต่างประเทศที่ต้องใช้ปุ่มตัวเลือกเพื่อรับสัญลักษณ์พิเศษเช่น{เพราะมันจะไม่ทำงานเมื่อใช้คีย์ตัวเลือกเป็นเมตาคีย์
Magne

74

เทอร์มินัลของ OS X รัน bash ซึ่งรวมถึงการรองรับ readline ทำตามคำแนะนำของ Glomek และแจ้งให้เทอร์มินัลใช้ตัวเลือกเป็นเมตาคีย์ (หรือใช้แบบอื่นEsc) จากนั้นคุณจะมีตัวเลือกที่สะดวก: Ctrl+ wลบคำก่อนหน้า (เช่นเดียวกับ Meta + ดังที่กล่าวไว้) แต่คุณสามารถใช้ Meta + f และ Meta + b เพื่อเดินไปข้างหน้าและข้างหลังผ่านคำCtrl+ aและCtrl+ eเพื่อเริ่มต้นและสิ้นสุดบรรทัดCtrl+ kลบ (ฆ่า) จากเคอร์เซอร์จนถึงท้ายบรรทัดและอีกมากมาย

ดูhttp://www.bigsmoke.us/readline/shortcutsสำหรับตารางอ้างอิงเล็กน้อย


3
สิ่งนี้มีประโยชน์อย่างไร ระบบที่เหลือใช้deleteกับตัวระบุเพื่อลบคำ
idrougge

เป็นไปได้ไหมที่จะมี "delete line" ด้วย?
Wenbert

1
Readline ยอดเยี่ยม แต่สิ่งนี้ไม่ช่วย OP Ctrl + w ลบ WORD (คั่นด้วยช่องว่าง) ไม่ใช่คำ (คั่นด้วยเครื่องหมายวรรคตอน + ช่องว่าง) ด้วยเคอร์เซอร์ในตอนท้ายของcat .git/refs/headsผล Ctrl-W catใน Meta + ลบผลลัพธ์ในcat .git/refs/
idbrii

@nadafigment, 'a' และ 'e' ย่อมาจากอะไร?
Pacerier

63

ลบคำที่ย้อนกลับ:

Ctr-W


2
หลังจากอ่านข้อความนี้แล้วฉันพบว่า "ลบคำไปข้างหน้า" คือ ctrl + k (โดยการลองผิดลองถูก) ตอนนี้ฉันสงสัยว่าทำไมมีเอกสารเกี่ยวกับเรื่องนี้น้อยมาก
ผู้ชนะ n

8
Ctr-k ลบทั้งหมดข้างหน้าไม่ใช่แค่คำเดียวใช่ไหม?
ไช่

สิ่งนี้ใช้ได้กับ mac ของฉัน มันทำงานบน Ubuntu Linux หรือไม่
user391339

1
Ctrl + w ลบ WORD (คั่นด้วยช่องว่าง) ไม่ใช่คำ (คั่นด้วยเครื่องหมายวรรคตอน + ช่องว่าง) ด้วยเคอร์เซอร์ในตอนท้ายของcat .git/refs/headsผล Ctrl-W catใน Meta + ลบผลลัพธ์ในcat .git/refs/
idbrii

24

โดยค่าเริ่มต้นเมตาสเปซ backward คำกระชากในเปลือกส่วนใหญ่ หากคุณกดหลบหนีจากนั้นกด Backspace นั่นจะทำงานได้ทุกที่


3
เยี่ยมมากที่ไม่ต้องติดตั้งเพิ่มเติม ฉันสังเกตเห็น<Esc> bและ<Esc> fใช้สำหรับการกระโดดถอยหลังหรือส่งต่อหนึ่งคำ
joeytwiddle

1
ฉันชอบ <ALT> + ลูกศรเพิ่มเติม ESC ไม่อนุญาตการคลิกอย่างต่อเนื่องใน b หรือ f
Vitali Pom

1
ฉันใช้ <ALT> + ลูกศรเพื่อย้ายไปรอบ ๆ แต่ฉันพบว่าไม่มีวิธีที่จะลบในลักษณะที่คล้ายกัน วิธีการ CTRL + W ที่กล่าวถึงข้างต้นไม่ได้หยุดอยู่ที่ตัวอักษรที่ไม่ใช่คำเดียวกับที่ <ALT> + ARROW ทำดังนั้นจึงลบทุกอย่างออกไปจนถึงพื้นที่ว่าง วิธีใดก็ตามที่จะลบโดยใช้การตรวจจับขอบเขตที่คล้ายกันเนื่องจาก <ALT> + ARROW จะได้รับการชื่นชม
Rene Wooller

18

⌃W(control + W) ไม่เหมือนกับ meta + delete (ESC + delete หากคุณไม่ได้ตรวจสอบตัวเลือกการใช้งานเป็นคีย์ meta) meta + delete จะถือว่า/ _เป็นตัวคั่นคำที่^Wจะพิจารณาพื้นที่เป็นตัวคั่น

เช่นใช้ ESC + Bakcspace บน (เคอร์เซอร์ท้าย)

rm /dira/dirb/file1

จะช่วยให้

rm /dira/dirb/

ในขณะที่ ^ W บนเดียวกันจะให้

rm

ดังนั้นจะเป็นการดีกว่าถ้าใช้ \ 033 \ 177 แทนที่จะเป็น ^ W เมื่อทำการกำหนดโปรไฟล์เทอร์มินัล ด้วยวิธีนี้คุณจะจับคู่⌥⌫กับสิ่งที่esc⌫ทำอยู่และคุณมี ^ W เพื่อลบคำตามตัวคั่นช่องว่าง

ฉันชอบที่จะสามารถโพสต์ภาพเกี่ยวกับวิธีการทำเช่นนี้ แต่ในฐานะมือใหม่ฉันไม่สามารถ

อ้างถึงความคิดเห็น bouke เพื่อดูวิธีการแก้ไขโปรไฟล์ขั้ว


5
สำหรับผู้ที่ต้องการที่จะทำในเรื่องนี้iterm2คุณสามารถไปที่การตั้งค่า> Keys> เพิ่มแมปที่สำคัญที่จะส่งรหัสฐานสิบหก⌥⌫ 0x1B 0x7F🍻
qix

คุณรู้ได้อย่างไรว่า\033\177เป็นสิ่งที่คุณต้องการสำหรับ "ลบส่วนหนึ่งของคำ"?
อะเดียแบติก

แน่นอนคุณต้องกดลำดับคีย์ที่คุณต้องการในกล่องโต้ตอบการตั้งค่าเทอร์มินัล การตั้งค่า→โปรไฟล์→แท็บแป้นพิมพ์→ปุ่มแล้วเลือกตัวเลือก "ตัวเลือก" และคีย์ "⌫ลบ" จากนั้นเลือกช่องข้อความและกดปุ่ม Escape จากนั้นกดปุ่ม and และคุณเสร็จสิ้น Esc + ⌫ทำสิ่งเดียวกันกับ⌥⌫
Stephane Gasparini

14

ในโปรไฟล์ของเทอร์มินัลคุณสามารถผูก⌥⌫ (ตัวเลือก + ลบ) กับ ⌃W (ควบคุม + W) ดังนั้นมันจึงทำงานคล้ายกับแอพอื่น ๆ

การตั้งค่าคีย์บอร์ดโปรไฟล์เทอร์มินัล


stty ต้องมี ^ w แมปกับ werase (พฤติกรรมเริ่มต้น) เพื่อให้การทำงาน ใช้ stty -a บนบรรทัดรับคำสั่งเพื่อดูวิธีตั้งค่าการแม็พ
natersoz

4

ทางลัดการแก้ไขคำสั่ง

Ctrl + a - ไปที่จุดเริ่มต้นของบรรทัดคำสั่ง

Ctrl + e - ไปที่ท้ายบรรทัดคำสั่ง

Ctrl + k - ลบจากเคอร์เซอร์จนถึงจุดสิ้นสุดของบรรทัดคำสั่ง

Ctrl + u - ลบจากเคอร์เซอร์จนถึงจุดเริ่มต้นของบรรทัดคำสั่ง

Ctrl + w - ลบจากเคอร์เซอร์เพื่อเริ่มต้นคำ (เช่นลบไปข้างหลังหนึ่งคำ)

Ctrl + y - วางคำหรือข้อความที่ถูกตัดโดยใช้ทางลัดทางลบอย่างใดอย่างหนึ่ง (เช่นที่ด้านบน) หลังเคอร์เซอร์

Ctrl + xx - ย้ายระหว่างจุดเริ่มต้นของบรรทัดคำสั่งและตำแหน่งเคอร์เซอร์ปัจจุบัน (และกลับมาอีกครั้ง)

Alt + b - เลื่อนไปข้างหลังหนึ่งคำ (หรือไปที่จุดเริ่มต้นของเคอร์เซอร์ที่เปิดอยู่)

Alt + f - เลื่อนไปข้างหน้าหนึ่งคำ (หรือไปที่ท้ายคำที่เคอร์เซอร์เปิดอยู่)

Alt + d - ลบไปยังจุดสิ้นสุดของคำเริ่มต้นที่เคอร์เซอร์ (ทั้งคำหากเคอร์เซอร์อยู่ที่จุดเริ่มต้นของคำ)

Alt + c - พิมพ์ใหญ่จนจบคำโดยเริ่มที่เคอร์เซอร์ (ทั้งคำหากเคอร์เซอร์อยู่ที่ตอนต้นของคำ)

Alt + u - สร้างตัวพิมพ์ใหญ่จากเคอร์เซอร์จนถึงท้ายคำ

Alt + l - ทำตัวพิมพ์เล็กจากเคอร์เซอร์จนถึงท้ายคำ

Alt + t - สลับคำปัจจุบันกับคำก่อนหน้า

Ctrl + f - เลื่อนไปข้างหน้าหนึ่งอักขระ

Ctrl + b - เลื่อนไปข้างหลังหนึ่งอักขระ

Ctrl + d - ลบอักขระใต้เคอร์เซอร์

Ctrl + h - ลบอักขระหน้าเคอร์เซอร์

Ctrl + t - สลับอักขระภายใต้เคอร์เซอร์ด้วยอักขระก่อนหน้า

ทางลัดเรียกคืนคำสั่ง

Ctrl + r - ค้นหาประวัติย้อนหลัง

Ctrl + g - หลบหนีจากโหมดการค้นหาประวัติ

Ctrl + p - คำสั่งก่อนหน้าในประวัติ (เช่นเดินกลับไปที่ประวัติคำสั่ง)

Ctrl + n - คำสั่งถัดไปในประวัติ (เช่นเดินไปข้างหน้าผ่านประวัติคำสั่ง) Alt + - ใช้คำสุดท้ายของคำสั่งก่อนหน้า

ทางลัดควบคุมคำสั่ง

Ctrl + l - ล้างหน้าจอ

Ctrl + s - หยุดเอาต์พุตไปที่หน้าจอ (สำหรับคำสั่ง verbose ที่รันนาน)

Ctrl + q - อนุญาตให้ส่งออกไปยังหน้าจอ (หากหยุดก่อนหน้านี้โดยใช้คำสั่งด้านบน)

Ctrl + c - ยุติคำสั่ง

Ctrl + z - หยุดชั่วคราว / หยุดคำสั่ง

คำสั่ง Bash Bang (!) Bash ยังมีคุณสมบัติที่ใช้งานง่ายบางอย่างที่ใช้! (bang) เพื่อให้คุณทำสิ่งที่ขี้ขลาดด้วยคำสั่ง bash

!! - เรียกใช้คำสั่งล่าสุด! blah - เรียกใช้คำสั่งล่าสุดที่เริ่มต้นด้วย 'blah' (เช่น! ls)

! blah: p - พิมพ์คำสั่งที่! blah จะทำงาน (รวมถึงเพิ่มเป็นคำสั่งล่าสุดในประวัติคำสั่ง)

! $ - คำสุดท้ายของคำสั่งก่อนหน้า (เหมือนกับ Alt +.)

! $: p - พิมพ์คำที่! $ จะแทนที่

! * - คำสั่งก่อนหน้ายกเว้นคำสุดท้าย (เช่นหากคุณพิมพ์ '_find somefile.txt /' ดังนั้น! * จะให้ '_find somefile.txt')

! : p - พิมพ์อะไรสิ! จะแทนที่


2

ด้วยการNatural Text Editingตั้งค่าล่วงหน้าในโปรไฟล์ -> คีย์ คุณสามารถลบคำ

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