แป้นพิมพ์ลัดสำหรับบรรทัดคำสั่งคืออะไร


10

ฉันกำลังพูดถึงแป้นพิมพ์ลัดที่คุณใช้ใน command-line / terminal

ตัวอย่าง: Ctrl+ cที่ฆ่ากระบวนการCtrl+ dออกจากระบบCtrl+ zที่ส่งกระบวนการไปยังพื้นหลัง ... ฯลฯ

ผมได้ทดสอบและพบว่าพวกเขาจะไม่ขั้ว (เช่นgnome-terminal, xterm, konsole) ที่เฉพาะเจาะจงหรือเปลือก (เช่นbash, zsh) ที่เฉพาะเจาะจงที่จะได้ทำงานที่ttys

ดังนั้นฉันต้องการทราบ:

  • ใครเป็นผู้ให้ทางลัดเหล่านี้
  • ฉันจะแสดงและแก้ไข / กำหนดได้อย่างไร?

ลองbind -pทำรายการเช่นเดียวhelp bindกับคนอื่น
Costas

คำตอบ:


10

เทอร์มินัลไดรเวอร์ของเคอร์เนล ( termios) ตีความคีย์พิเศษที่สามารถพิมพ์เพื่อส่งสัญญาณไปยังกระบวนการส่งจุดสิ้นสุดของไฟล์ลบตัวอักษร ฯลฯ นี่คือการทำงานของเคอร์เนล Unix ขั้นพื้นฐานและคล้ายกันมากในการใช้งาน Unix และ Linux

sttyคำสั่งแสดงหรือชุดtermiosตัวอักษรพิเศษเช่นเดียวกับพารามิเตอร์อื่น ๆ สำหรับคนขับรถสายขั้ว

เรียกใช้stty -aเพื่อดูค่าปัจจุบันของอักขระพิเศษและ "การตั้งค่าสายเทอร์มินัล" อื่น ๆ ในตัวอย่างต่อไปนี้คุณจะเห็นว่าintrเป็นCtrl+ C, eofเป็นCtrl+ D, suspเป็น+Ctrl Z(ฉันได้ลบเอาต์พุตอื่นเพื่อแสดงเฉพาะการตั้งค่าอักขระพิเศษ):

stty -a ตัวอักษรพิเศษบน GNU / Linux:

intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;

stty -a อักขระพิเศษใน FreeBSD:

cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = ^@; eol2 = ^@;
        erase = ^?; erase2 = ^H; intr = ^C; kill = ^U; lnext = ^V;
        min = 1; quit = ^\; reprint = ^R; start = ^Q; status = ^T;
        stop = ^S; susp = ^Z; time = 0; werase = ^W;

ในการเปลี่ยนค่าของอักขระพิเศษตัวอย่างเช่นเมื่อต้องการเปลี่ยนอักขระอินเตอร์รัปต์จากCtrl+ Cเป็นCtrl+ Eเรียกใช้sttyเช่นนี้ ( ^Eเป็นอักขระสองตัวอักษรคือ circumflex ( ^) ตามด้วยตัวอักษรE):

stty intr '^E'

สำหรับข้อมูลเพิ่มเติมโปรดดูที่หน้าคนสำหรับและstty termiosใน GNU / Linux คุณสามารถดูที่tty_ioctlหน้า man

หมายเหตุ:

intrสำคัญ ( Ctrl+ Cค่าเริ่มต้น), ไม่จริงฆ่ากระบวนการ แต่ทำให้เกิดเคอร์เนลที่จะส่งสัญญาณขัดจังหวะ ( SIGINT) กับกระบวนการทั้งหมดภายในกลุ่มกระบวนการ กระบวนการอาจจัดให้จับหรือไม่สนใจสัญญาณ แต่กระบวนการส่วนใหญ่จะยุติซึ่งเป็นพฤติกรรมเริ่มต้น

เหตุผลที่Ctrl+ dคุณออกจากระบบเป็นเพราะคนขับรถเทอร์มินัลส่ง EOF (สิ้นสุดไฟล์) บนอินพุตมาตรฐานของเชลล์ เชลล์ออกเมื่อได้รับจุดสิ้นสุดไฟล์บนเป็นอินพุตมาตรฐาน


@Sukminder บน FreeBSD ที่ POSIX ตัวเลือกที่ถูกเพิ่มเข้ามา-a stty
RobertL

ฉันได้ลองstty intr '^E'ใช้งานแล้ว (ชุด) แต่ชั่วคราวและสำหรับเทอร์มินัล / tty ปัจจุบันเท่านั้น ฉันจะเปลี่ยนทั่วโลกอย่างถาวรได้อย่างไร
Pandya

ฉันคิดว่าวิธีที่ดีที่สุดคือการเรียกใช้sttyใน $ HOME / .profile หรือ $ HOME / .bashrc หรือไฟล์การเริ่มต้นเชลล์อื่น ๆ
RobertL

ฉันได้ลอง: มันใช้งานได้กับเทอร์มินัล แต่ไม่มีผลในtty
Pandya

คุณลองทำอะไรคุณเห็นอะไรและคุณหมายถึงttyอะไร บางทีนั่นอาจเป็นคำถามใหม่?
RobertL

15

จากhttp://www.skorks.com/2009/09/bash-shortcuts-for-maximum-productivity/

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

  • 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 (!)

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

  • !! - เรียกใช้คำสั่งสุดท้าย
  • ! blah - เรียกใช้คำสั่งล่าสุดที่เริ่มต้นด้วย 'blah' (เช่น! ls)
  • ! blah: p - พิมพ์คำสั่งที่! blahจะเรียกใช้ (เพิ่มคำสั่งล่าสุดในประวัติคำสั่งด้วย)
  • ! $ - คำสุดท้ายของคำสั่งก่อนหน้า (เช่นเดียวกับAlt +. )
  • ! $: p - พิมพ์คำที่! $จะแทนที่
  • ! * - คำสั่งก่อนหน้ายกเว้นคำสุดท้าย (เช่นถ้าคุณพิมพ์ ' find some_file.txt / ' ดังนั้น! *จะให้ ' find some_file.txt ')
  • ! *: p - พิมพ์อะไร! *จะแทนที่

1
@Sukminder ไม่ Ctrl + S จะหยุดเอาต์พุต ดูเหมือนว่าคุณจะสับสนกับ Ctrl + Z
Gilles 'ดังนั้นหยุดความชั่วร้าย'

ดูเพิ่มเติมที่: Emacs
ริช

ดี! และมีวิธีการเข้าถึง^Uที่stty -aแสดงให้เห็นสำหรับ SIGKILL บน Linux จากทุบตี? ดีกว่าโดยไม่ยกเลิกการกำหนดเนื้อหา readline (อาจผ่านคีย์ตัวแก้ไข / เมตาที่สาม) ฉันถือว่าเป็นเงาเท่านั้นโดยการผูกพัน readline ctrl + u?
nyov
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.