Ctrl + L di terminal

41

Saya tidak sengaja mengetik ctrl+ Ldi terminal dan jendela terminal saya melonjak satu ukuran 'penuh layar'. Saya melihat pintasan keyboard di "Edit" -> "Pintasan keyboard" dan tidak menemukan pintasan itu.

Apa yang dilakukan ctrl+ Ldan di mana + itu didefinisikan?

Parto
sumber

Jawaban:

58

ctrl+ Lcukup hapus layar terminal.

Ini setara dengan pintasan keyboard dari perintah clear -x. ref

Ini milik bash, jadi Anda tidak menemukannya di bawah pintasan keyboard di terminal gnome Anda. Dari 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.

Lihat daftar detail Bash Keyboard Shortcuts .

souravc
sumber
Oh, itu menjelaskannya.
Parto
3
Bukan hanya bash; Ctrl-L adalah karakter form-feed. Ini tidak begitu umum, tetapi kadang-kadang Anda akan melihat ^ L dalam kode sumber yang memisahkan "halaman" kode. Lebih masuk akal ketika printer akan menafsirkannya sebagai karakter kontrol.
Joshua Taylor
@ JoshuaTaylor Anda benar. Artikel wiki terkait di Page break
souravc
1
^ L adalah karakter form-feed dalam tabel ascii, tetapi itu tidak melakukan apa-apa kecuali diterima oleh program yang memperlakukannya sesuai (baik bash atau terminal emulator, dalam konteks ini).
alexis
1
Perhatikan bahwa tidak setara dengan perintah default clear, karena tidak menghapus sejarah terminal Anda, sementara perintah cleartidak, kecuali jika Anda menambahkan -xargumen, seperti: clear -x.
jirislav
18

Jika shell yang Anda gunakan tidak mencegatnya, Anda mengetik karakter "Form-feed" di terminal Anda. Jika aplikasi terminal tidak mencegat atau menggunakan penekanan tombol dalam beberapa cara, Ctrl+ Surat diterjemahkan ke kode ASCII dari huruf minus 64 (1). 65 adalah kode ASCII 'A', 'L' adalah huruf 12 -> kode 76. Jika shell tidak tahu apa yang harus dilakukan dari kode, ia mencetaknya.

Mencetak char FF menghasilkan halaman baru pada printer garis dan layar yang jelas pada terminal (ya, saya menggunakan VT-52 saat itu, pada 300 baud).

Jadi Ctrl+ Ladalah 12 yang merupakan FF. Dengan cara yang sama, Ctrl+ Iadalah TAB, dan Ctrl+ Gmembunyikan bel --- jika terminal atau shell tidak mencegatnya, seperti Ctrl+ Cmisalnya.

Perhatikan dari jawaban yang lain: tampaknya bash melakukan intersepsi CTRL- Ldan melakukan a clear. Sentuhan yang bagus bahwa bashpenulis menghubungkan kunci dengan perintah yang akan melakukan kurang lebih sama dengan yang dilakukan kode ASCII pada terminal lama!

Di sisi lain, dalam zshkombinasi saya CTRL- Iberfungsi sebagai TABdan CTRL- Hsebagai Backspace(2).

ASCII bagus yang lama ... (perhatikan bahwa huruf L ada di kolom 4, baris 12, memiliki kode ASCII 4 * 16 + 12 = 76).

Gambar dari Wikimedia commons

Gambar asli di sini , dari artikel wikipedia di ASCII .


Catatan kaki:

(1) Ctrlbenar-benar digunakan untuk menghapus bit 7.

(2) ini adalah sumber dari "gagal menghapus kata" bercanda Anda kadang-kadang menemukan seperti misalnya "ini adalah buruk ^ H ^ H ^ Tidak begitu ide bagus" ... (dengan biasanya kata lebih kuat dari buruk!)

Rmano
sumber
1
Bagus. Bagaimana cara saya menggunakan bagan ini? Saya dapat melihat bahwa huruf L ada di baris 12 dan kolom 4. Apakah saya hanya minus 32 dari 124 atau bagaimana Anda menghitung kode ASCII?
Parto
@AvatarParto, tulis 32 bukan 65. Jawabannya diperbaiki. Tabelnya adalah biner, jadi kodenya adalah kolom * 16 + baris.
Rmano
1
Memasukkan huruf ^Hs atau ^Ws adalah hal yang baik ketika Anda tidak dapat menggunakan coret. :)
Blacklight Shining
8

Control-Ldicegat dan ditafsirkan oleh bash (sebenarnya oleh para readlinelibrary , yang menangani editing interaktif pada baris perintah). Ini terikat pada clear-screenfungsi, seperti yang ditulis oleh @souravc.

Catatan tentang arti Control-L: Ini didefinisikan sebagai Umpan Bentuk dalam tabel karakter ASCII, tetapi ini tidak berarti apa-apa kecuali beberapa program menafsirkannya sesuai. Terminal tidak menghapus layar ketika melihat umpan formulir, karena Anda dapat memverifikasi dengan menyimpan ^ L dalam file dan mencetak file dengan cat. Saat bash/readlinemelihatnya ^L, ia menjalankan clear-screenfungsinya. Ini mengirimkan urutan karakter yang dipahami oleh emulator terminal Anda (seperti yang dijelaskan oleh termcap atau terminfo), dan memiliki efek membersihkan layar.

Pada printer yang sangat lama, a ^Lakan memajukan kertas mulai mencetak pada lembar berikutnya, maka nama "form feed". Tetapi terminal modern dan emulator terminal mengikuti standar ANSI yang lebih baru, di mana perintah kontrol adalah "kode pelarian" multi-karakter yang dimulai dengan ^[(escape). Ketika bash melihat Anda ^L, mungkin mengirimkan urutan dua perintah ESC [ H ESC [ J, yang bergerak ke kiri atas layar dan menghapus semua yang ada di bawahnya (maka seluruh layar).

Alexis
sumber
Sebenarnya, urutan ESC [ ESC [ Jjuga membersihkan sejarah perintah, sedangkan CTRL + L urutan tidak. Urutan dikirim ke terminal agak ESC [ H ESC [ 2 J, pergi ke depan sebuah mencobanya sendiri dengan perintah ini: printf "\033[H\033[2J".
jirislav
0

Karena semua orang sudah menjelaskan dengan baik apa Ctrl+ Litu dan apa yang dilakukan, tetapi tidak ada yang menjelaskan cara "membalikkan" perintah, berikut beberapa perintah yang bisa Anda ketik untuk mengembalikan Anda ke apa yang Anda lakukan:

history

akan memberi Anda 20 perintah terakhir yang Anda ketikkan.

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

akan memberi Anda 20 baris terakhir output dari setiap instalasi paket yang Anda lakukan

Fabby
sumber