ทำไม ^ C, ^ V ฯลฯ ปรากฏในเทอร์มินัลเมื่อฉันใช้แป้นพิมพ์ลัด Ctrl + อักขระ?


26

บางครั้งเมื่อคัดลอกวางข้อความจากผลของคำสั่งที่ฉันจะตั้งใจใช้Ctrl+ cแทนCtrl+ +Shiftc

ดังนั้นบรรทัดคำสั่งตีความมันเป็น^C...

ทำไมนี้ ทำไมบรรทัดคำสั่งตีความcontrolการป้อนข้อมูลเป็น^?

คำตอบ:


35

ไม่ได้แทรกลำดับอักขระ "^ C" จริง ๆ นี่เป็นเพียงการแสดงสำหรับอักขระควบคุม ASCII ที่ไม่สามารถพิมพ์ได้เช่น:

  • ^C → ETX (สิ้นสุดข้อความส่งสัญญาณ kill), ASCII 0x03
  • ^D → EOT (สิ้นสุดการส่งสัญญาณ, ยุติอินพุต), ASCII 0x04
  • ^H→ BS (Backspace, \b), ASCII 0x08
  • ^J→ LF (ป้อนบรรทัด\n), ASCII 0x0A
  • ^L → FF (ฟีดฟอร์มหน้าใหม่ล้างเทอร์มินัล) ASCII 0x0C
  • ^M→ CR (Carriage return, \r), ASCII 0x0D

นี่เป็นเพียงตัวแยกขนาดเล็กของอักขระควบคุม ASCII ที่เป็นไปได้ที่สามารถแทรกโดยใช้แป้นพิมพ์ คุณสามารถค้นหารายการเต็มรูปแบบที่นี่

ผมคิดว่าคนที่สำคัญที่สุดที่ต้องจำไว้เป็นCtrl+ C, Ctrl+ Dและ+CtrlL


การใช้เครื่องหมายรูปหมวก^เป็นสัญลักษณ์สำหรับ "การควบคุม" ย้อนหลังไปถึงยุคก่อนกราฟิกเมื่อเทอร์มินัลเป็นข้อความเท่านั้นและฉันเชื่อว่าแม้กระทั่งก่อนหน้านั้นเมื่อเรามีการ์ดและกระดาษ ฉันชอบที่จะรู้ว่าทำไมเครื่องหมายรูปหมวกจึงถูกเลือกให้เป็นสัญลักษณ์
Paddy Landau

8

เนื่องจากCTRL+ KEYคอมโบถูกตีความโดยเทอร์มินัลว่าเป็นอักขระ ASCII ที่ไม่สามารถพิมพ์ได้และการที่ไม่สามารถพิมพ์ได้คุณจำเป็นต้องมีวิธีในการแสดง

การประชุมกั้นจากขั้ว VT ด้วยการสนับสนุน ANSIคือการเป็นตัวแทนของCTRL+ KEYคำสั่งผสมที่เป็นตัวแทนCTRLที่มีเครื่องหมาย ( ^) และมีKEYKEY


5

เมื่อคัดลอกและวางไปยัง / จากเทอร์มินัลวิธีที่ดีที่สุดคือใช้ทางลัดCtrl+ InsertและShift+ Insertตามลำดับ

สิ่งเหล่านี้เป็นทางลัดแบบดั้งเดิมสำหรับการใช้เทอร์มินัลแม้ว่าคุณจะทราบว่าในสภาพแวดล้อมแบบกราฟิก X Ctrl+ InsertและShift+ Insertจะเชื่อมโยงกับCtrl+ CและCtrl+ Vเดียวกัน

ในเทอร์มินัลส่วนใหญ่Ctrl+ C(แสดงโดย^C) ถูกใช้เพื่อหยุดการดำเนินการของกระบวนการดังนั้นการวางด้วยการลัดสั้น ๆ นั้นจะไม่ทำงาน

สำหรับการคัดลอกและวางอย่างรวดเร็วคุณสามารถใช้บัฟเฟอร์หลักของ X โดยเน้นข้อความที่คุณต้องการคัดลอกแล้วคลิกกลางที่คุณต้องการวาง ไม่ต้องใช้แป้นพิมพ์


2
ขออภัยคุณเข้าใจผิดคำถาม OP ต้องการทราบว่าทำไมสตริง^Cหรือสตริงที่คล้ายกันปรากฏขึ้นเมื่อกด CTRL + C (หรือ CTRL + ตัวอักษรอื่น) มันไม่เกี่ยวกับวิธีการคัดลอกและวางข้อมูลในเทอร์มินัลอย่างถูกต้องซึ่งคำตอบของคุณจะยอดเยี่ยม
ผู้บัญชาการ Byte

@ ByteCommander ใช่มั้ย! คำขอโทษของฉันฉันจะทิ้งคำตอบของฉันตามที่ดูเหมือนว่าคำถามได้รับคำตอบอย่างถูกต้องแล้ว :) บางคนอาจสะดุดในเรื่องนี้และพบสิ่งที่ฉันเขียนมีประโยชน์
Keefer Rourke

-2

คุณควรใช้Ctrl+ Cไม่ใช่Shift+ Ctrl+ Cเพราะบนบรรทัดคำสั่งพวกเขาทำสิ่งเดียวกัน (และCtrl+ Cง่ายกว่าShift+ Ctrl+ C) นั่นอาจไม่เป็นจริงในสภาพแวดล้อมแบบกราฟิกบางอย่างที่ GUI จับการกดแป้นบางตัวและทำสิ่งที่พิเศษ แต่ถ้าการกดแป้นถูกส่งไปยังบรรทัดคำสั่งอย่างแท้จริงจะไม่มีความแตกต่าง นี่คือเหตุผลที่การกดCtrl+ Cอาจแสดง ^ C เป็นตัวพิมพ์ใหญ่ C แทนตัวพิมพ์เล็ก C บรรทัดคำสั่งทำให้ไม่มีความแตกต่างกับสิ่งที่คุณกด นี่เป็นเรื่องจริงสำหรับตัวอักษร สำหรับตัวละครอื่น ๆShiftอาจมีผลกระทบ)

การกดCtrl- Cส่งรหัส ASCII ที่อยู่ต่ำกว่าตำแหน่งอักษรตัวพิมพ์ใหญ่ 64 ตัวในตาราง ASCII (และน้อยกว่าตำแหน่งอักษรตัวพิมพ์เล็ก 96 ตัวในตาราง ASCII) ดังนั้นการกดCtrl- c(ตัวพิมพ์เล็ก) จะส่งรหัส ASCII 3 (ซึ่งเป็น 64 น้อยกว่าCรหัส ASCII ของทุนที่ 67) ในหลาย ๆ สภาพแวดล้อมคุณสามารถAltกดค้างไว้แล้วกดปุ่ม3บนแป้นตัวเลข (จากนั้นปล่อย3แป้นแล้วปล่อยAltแป้น) และคุณอาจได้รับผลกระทบเดียวกัน

สำหรับ ^ C ^ เป็นเพียงชวเลขที่รู้จักกันดีสำหรับCtrlคีย์ "" ในทำนองเดียวกัน M- เป็นชวเลขสำหรับAltคีย์ "" เอ่อใช่ M ย่อมาจากคำว่า "Meta" ซึ่งสามารถป้อนได้โดยAltการกดและกดอะไรก็ตามที่เกิดขึ้นถัดไปหรือบางครั้งก็กดEsc(และปล่อยEsc) แล้วกดอะไรก็ตามที่เข้ามา บทความของ Wikipedia ในหัวข้อ "คีย์ควบคุม": "สัญลักษณ์"อธิบายถึงสิ่งนี้ว่า "สัญลักษณ์ดั้งเดิม" สิ่งนี้เป็นที่รู้จักกันในชื่อ Caret Notation ( บทความ Wikipedia เกี่ยวกับสัญกรณ์ Caret , Unix StackExchange: คำถามของ ryvnf เกี่ยวกับ Caret Notation )

เกี่ยวกับคำถามสุดท้ายเชลล์คำสั่งไม่ใช่ "ตีความ" สิ่งใด ๆ ที่เป็นคาเร็ต กล่าวอีกนัยหนึ่งเชลล์ไม่ได้อ่านอะไรเลยและเชื่อว่ามันเป็นคาเร็ต สิ่งที่เกิดขึ้นคือเชลล์ใช้เครื่องหมายรูปหมวกที่รู้จักกันดีในการส่งออก เป็นอีกตัวอย่างหนึ่งคุณสามารถดูเพจเจอร์ที่รู้จักกันดี "น้อยลง" ใช้เครื่องหมายรูปหมวกด้วยการรัน:dd if=/dev/zero bs=64 count=1 | less

(โปรแกรมแก้ไขข้อความ "นาโน" ยังใช้เครื่องหมายรูปหมวกในการช่วยเหลือแบบออนไลน์รวมถึงหน้าจอเต็มรูปแบบของวิธีใช้ออนไลน์ที่แสดงหลังจากกด ^ G, aka Ctrl- g.)


4
DevRobot ถามถึงการใช้ Ctrl-C (หรือ Shift-Ctrl-C) ในบริบทของการคัดลอกและวางซึ่งหมายถึงเทอร์มินัล GUI คุณไม่จำเป็นต้องไม่ถูกต้อง แต่คำอธิบายของคุณนั้นทำให้สับสนสำหรับคนที่มาจากมุมมองผู้ใช้ GUI
RM
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.