Ctrl + L ในเทอร์มินัล


41

ฉันพิมพ์ctrl+ Lในเทอร์มินัลโดยไม่ตั้งใจและหน้าต่างเทอร์มินัลของฉันเพิ่มขนาด 'หน้าจอ' หนึ่งอัน ฉันดูแป้นพิมพ์ลัดใน "แก้ไข" -> "แป้นพิมพ์ลัด" และไม่พบทางลัดนั้น

อะไรctrl+ Lทำและมันเป็นที่ที่กำหนด?

คำตอบ:


58

ctrl+ Lเพียงแค่ล้างหน้าจอเทอร์มินัล

clear -xมันเป็นเทียบเท่าแป้นพิมพ์ลัดของคำสั่ง อ้าง

มันเป็นคุณสมบัติของbashดังนั้นคุณจึงไม่พบมันภายใต้แป้นพิมพ์ลัดใน gnome-terminal ของคุณ จากman bash:

clear-screen (C-l)
          Clear the screen leaving the current line  at  the  top  of  the
          screen.   With  an  argument,  refresh  the current line without
          clearing the screen.

ดูรายการรายละเอียดของทุบตีแป้นพิมพ์ลัด


โอ้นั่นอธิบายได้
Parto

3
มันไม่ใช่แค่ทุบตี แต่; Ctrl-L เป็นอักขระป้อนกระดาษ มันไม่ธรรมดา แต่บางครั้งคุณจะเห็น ^ L ในซอร์สโค้ดที่แยก "หน้า" ของโค้ด มันสมเหตุสมผลมากขึ้นเมื่อเครื่องพิมพ์จะตีความว่ามันเป็นตัวควบคุม
Joshua Taylor

@JoshuaTaylor คุณถูกต้อง บทความ wiki ที่เกี่ยวข้องเกี่ยวกับตัวแบ่งหน้า
souravc

1
^ L เป็นอักขระป้อนกระดาษในตาราง ascii แต่นั่นไม่ได้ทำอะไรนอกจากจะได้รับโดยโปรแกรมที่ปฏิบัติตาม (ทั้งทุบตีหรือเทอร์มินัลอีมูเลเตอร์ในบริบทนี้)
alexis

1
หมายเหตุว่ามันจะไม่เทียบเท่าของคำสั่งเริ่มต้นclearเพราะมันไม่ได้ลบประวัติการ terminal ของคุณในขณะที่คำสั่งclearไม่เว้นแต่คุณจะเพิ่มข้อโต้แย้งเช่นดังนั้น:-x clear -x
jirislav

18

หากเชลล์ที่คุณใช้ไม่ถูกดักคุณกำลังพิมพ์อักขระ "ฟีดฟอร์ม" ในเทอร์มินัลของคุณ หากแอปพลิเคชั่นเครื่องเทอร์มินัลไม่ขัดขวางหรือใช้การกดแป้นในบางวิธีCtrl+ จดหมายจะถูกแปลเป็นรหัส ASCII ของตัวอักษรลบ 64 (1) 65 คือรหัส ASCII ของ 'A', 'L' คือตัวอักษรที่ 12 -> รหัส 76 ถ้าเชลล์ไม่ทราบว่าต้องทำอะไรของรหัสมันพิมพ์ออกมา

การพิมพ์ FF char ส่งผลให้เกิดหน้าใหม่บนเครื่องพิมพ์บรรทัดและหน้าจอที่ชัดเจนบนเทอร์มินัล (ใช่ฉันใช้VT-52ย้อนกลับไปที่ 300 baud)

ดังนั้นCtrl+ Lคือ 12 ซึ่งก็คือ FF ในทำนองเดียวกันCtrl+ Iคือ TAB และCtrl+ Gจะกดกริ่ง --- ถ้าเทอร์มินัลหรือเชลล์ไม่ได้ดักมันเช่นCtrl+ Cตัวอย่างเช่น

สังเกตได้จากคำตอบอื่น ๆ : ดูเหมือนว่าทุบตีทำตัดCTRL- และทำL clearเยี่ยมมากที่bashผู้เขียนเชื่อมโยงคีย์กับคำสั่งซึ่งจะทำมากกว่าหรือน้อยกว่ารหัส ASCII ที่ทำกับเทอร์มินัลเก่า!

ในอีกทางหนึ่งในzshการรวมกันของฉันCTRL- Iทำงานเป็นTABและCTRL- Hเป็นBackspace(2)

ASCII ที่ดีเก่า ... (โปรดสังเกตว่าตัวอักษร L อยู่ที่คอลัมน์ 4 แถว 12 มีรหัส ASCII 4 * 16 + 12 = 76)

ภาพจาก Wikimedia Commons

ภาพต้นฉบับที่นี่จากบทความวิกิพีเดีย ASCII


เชิงอรรถ:

(1) Ctrlเคยใช้เพื่อล้างบิต 7

(2) นี่คือที่มาของ "ล้มเหลวในการลบคำ" ตลกบางครั้งคุณพบเช่น "นี่คือไม่ดี ^ H ^ H ^ Hnot ความคิดที่ดีมาก" ... (ปกติแล้วคำที่แข็งแกร่งกว่าเลว!)


1
ดี ฉันจะใช้แผนภูมินี้อย่างไร? ฉันเห็นตัวอักษร L อยู่ที่แถว 12 และคอลัมน์ 4 ฉันจะลบ 32 จาก 124 หรือคุณคำนวณรหัส ASCII ได้อย่างไร
Parto

@AvatarParto ups เขียน 32 แทน 65 คำตอบถูกแก้ไข ตารางเป็นเลขฐานสองดังนั้นรหัสคือคอลัมน์ * 16 + แถว
Rmano

1
การแทรกตัวอักษร^Hหรือ^Ws นั้นดีเมื่อคุณไม่สามารถใช้ขีดกลาง :)
Blacklight Shining

8

Control-Lถูกดักและตีความโดยทุบตี (จริงโดยห้องสมุดซึ่งจัดการแก้ไขแบบโต้ตอบบนบรรทัดคำสั่ง) มันถูกผูกไว้กับฟังก์ชั่นตามที่ @ souravc เขียนreadlineclear-screen

หมายเหตุเกี่ยวกับความหมายของControl-L:มันถูกกำหนดให้เป็นแบบฟอร์มฟีดในตารางอักขระ ASCII แต่สิ่งนี้ไม่มีความหมายอะไรเว้นแต่บางโปรแกรมจะตีความตามนั้น ขั้วไม่ได้ล้างหน้าจอเมื่อเห็นฟีดรูปแบบตามที่คุณสามารถตรวจสอบได้โดยโดยประหยัด ^ L catในแฟ้มและการพิมพ์ไฟล์ด้วย เมื่อbash/readlineเห็น^Lมันจะดำเนินการclear-screenฟังก์ชั่น สิ่งนี้จะส่งลำดับของตัวละครที่เทอร์มินัลอีมูเลเตอร์ของคุณเข้าใจ (ดังอธิบายโดย termcap หรือ terminfo) และมีผลในการล้างหน้าจอ

ในเครื่องพิมพ์เก่ามาก a ^Lจะเลื่อนกระดาษเริ่มพิมพ์บนแผ่นถัดไปดังนั้นจึงมีชื่อ "ป้อนกระดาษ" แต่เทอร์มินัลที่ทันสมัยและเทอร์มินัลอีมูเลเตอร์นั้นเป็นไปตามมาตรฐาน ANSI ที่ใหม่กว่าซึ่งคำสั่งควบคุมนั้นเป็น"รหัสการหลบหนี"แบบหลายตัวอักษรที่ขึ้นต้นด้วย^[(Escape) เมื่อ bash เห็นของคุณ^Lก็อาจส่งลำดับสองคำสั่งESC [ H ESC [ Jซึ่งย้ายไปที่ด้านบนซ้ายของหน้าจอและล้างทุกอย่างที่อยู่ด้านล่าง (ดังนั้นทั้งหน้าจอ)


ที่จริงแล้วลำดับESC [ ESC [ Jยังล้างประวัติคำสั่งในขณะที่CTRL + L ลำดับไม่ได้ ลำดับส่งไปยังสถานีค่อนข้างไปข้างหน้าความพยายามที่มันเองกับคำสั่งนี้:ESC [ H ESC [ 2 J printf "\033[H\033[2J"
jirislav

0

เมื่อทุกคนอธิบายแล้วว่าCtrl+ Lและทำอะไรได้ดี แต่ไม่มีใครอธิบายวิธี "ย้อนกลับ" คำสั่งต่อไปนี้เป็นคำสั่งบางอย่างที่คุณสามารถพิมพ์เพื่อให้คุณได้รับสิ่งที่คุณกำลังทำอยู่:

history

จะให้คำสั่ง 20 คำสั่งสุดท้ายที่คุณพิมพ์

tail --lines=20 /var/log/dpkg.log

จะให้ผลลัพธ์ 20 บรรทัดล่าสุดของการติดตั้งแพ็กเกจใด ๆ ที่คุณทำ

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