ฉันพิมพ์ctrl+ Lในเทอร์มินัลโดยไม่ตั้งใจและหน้าต่างเทอร์มินัลของฉันเพิ่มขนาด 'หน้าจอ' หนึ่งอัน ฉันดูแป้นพิมพ์ลัดใน "แก้ไข" -> "แป้นพิมพ์ลัด" และไม่พบทางลัดนั้น
อะไรctrl+ Lทำและมันเป็นที่ที่กำหนด?
ฉันพิมพ์ctrl+ Lในเทอร์มินัลโดยไม่ตั้งใจและหน้าต่างเทอร์มินัลของฉันเพิ่มขนาด 'หน้าจอ' หนึ่งอัน ฉันดูแป้นพิมพ์ลัดใน "แก้ไข" -> "แป้นพิมพ์ลัด" และไม่พบทางลัดนั้น
อะไรctrl+ Lทำและมันเป็นที่ที่กำหนด?
คำตอบ:
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.
clear
เพราะมันไม่ได้ลบประวัติการ terminal ของคุณในขณะที่คำสั่งclear
ไม่เว้นแต่คุณจะเพิ่มข้อโต้แย้งเช่นดังนั้น:-x
clear -x
หากเชลล์ที่คุณใช้ไม่ถูกดักคุณกำลังพิมพ์อักขระ "ฟีดฟอร์ม" ในเทอร์มินัลของคุณ หากแอปพลิเคชั่นเครื่องเทอร์มินัลไม่ขัดขวางหรือใช้การกดแป้นในบางวิธี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)
ภาพต้นฉบับที่นี่จากบทความวิกิพีเดีย ASCII
(1) Ctrlเคยใช้เพื่อล้างบิต 7
(2) นี่คือที่มาของ "ล้มเหลวในการลบคำ" ตลกบางครั้งคุณพบเช่น "นี่คือไม่ดี ^ H ^ H ^ Hnot ความคิดที่ดีมาก" ... (ปกติแล้วคำที่แข็งแกร่งกว่าเลว!)
^H
หรือ^W
s นั้นดีเมื่อคุณไม่สามารถใช้ขีดกลาง :)
Control-L
ถูกดักและตีความโดยทุบตี (จริงโดยห้องสมุดซึ่งจัดการแก้ไขแบบโต้ตอบบนบรรทัดคำสั่ง) มันถูกผูกไว้กับฟังก์ชั่นตามที่ @ souravc เขียนreadline
clear-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"
เมื่อทุกคนอธิบายแล้วว่าCtrl+ Lและทำอะไรได้ดี แต่ไม่มีใครอธิบายวิธี "ย้อนกลับ" คำสั่งต่อไปนี้เป็นคำสั่งบางอย่างที่คุณสามารถพิมพ์เพื่อให้คุณได้รับสิ่งที่คุณกำลังทำอยู่:
history
จะให้คำสั่ง 20 คำสั่งสุดท้ายที่คุณพิมพ์
tail --lines=20 /var/log/dpkg.log
จะให้ผลลัพธ์ 20 บรรทัดล่าสุดของการติดตั้งแพ็กเกจใด ๆ ที่คุณทำ