Saat menggunakan Terminal.app, Anda dapat menghapus layar dengan menggunakan shell builtin clear
atau dengan menekan ^+ L(Control-L).
Namun, semua ini dilakukan adalah mendorong konten layar saat ini kembali satu ketinggian layar dan mengatur ulang kursor / input di baris pertama. Berarti Anda masih dapat menggulir ke belakang dan melihatnya.
Apa yang Anda juga dapat lakukan, adalah mengatur ulang seluruh scrollback Anda dengan menekan ⌘+ K(Command-K).
Setelah melakukan ini, Anda tidak dapat menggulir kembali sama sekali.
Dalam situasi tertentu (terutama, sebelum menjalankan screen
atau vim
), saya ingin mengatur ulang gulir kembali sebelum perintah benar-benar dijalankan.
Apakah ada perintah (seperti clear
) yang diterapkan di OS X yang memungkinkan saya untuk melakukan ini? Mengingat keberadaan pbcopy
dan pbpaste
, saya berpikir mungkin ada sesuatu yang serupa yang akan memungkinkan saya untuk melakukan ini.
sumber
clear && printf '\e[3J'
(Anda telah memilih jawaban yang salah sebagai jawaban yang benar!)Jawaban:
Terminal mendukung ekstensi dari urutan pelepasan ED (Erase in Display) untuk menghapus scroll-back. Ini juga didukung oleh xterm. Perintah ED, yang dijelaskan dalam manual VT100 , menerima nilai-nilai ini untuk parameter Ps:
Terminal ( dan xterm ) menambahkan:
Perhatikan bahwa ini hanya menghapus scroll-back, bukan layar. Ini memungkinkan Anda untuk menghapus satu atau yang lain, atau keduanya dengan mengirimkan dua urutan pelarian.
Misalnya, Anda dapat menghapus layar dan scroll-back dengan perintah shell berikut:
clear && printf '\e[3J'
(
clear
Perintah mencari urutan yang sesuai untuk membersihkan layar untuk terminal saat ini, tetapi urutan melarikan diri "hapus gulir-kembali" adalah adat dan harus dikodekan dengan keras. Jika Anda memasukkan ini ke dalam skrip shell yang tidak Anda ketahui pasti akan hanya pernah dijalankan dengan Terminal, Anda harus memeriksa bahwa$TERM_PROGRAM
adalahApple_Terminal
sebelum mengirimnya.)sumber
alias clear="clear && printf '\e[3J'"
echo $'#!/usr/bin/env bash\n/usr/bin/clear\nprintf \'\\e[3J\'' >clr; chmod +x clr
⌘K, pintas ke “View> Clear scrollback”.
PEMBARUAN : Ini dapat diotomatisasi dengan AppleScript dengan perintah berikut:
... yang tentunya
alias
dapat Anda lakukan untuk apa pun yang Anda inginkan, atau simpan dalam suatu fungsi di~/.profile
skrip login Anda :)Sebagai pengamanan, untuk dapat menggunakan ini bahkan di latar belakang tanpa risiko mengeluarkan keystroke ke aplikasi depan yang salah, saya menyarankan mengatasinya dengan tes berikut:
... yang memberi kita kode berikut:
... yang pada gilirannya, lolos dan
alias
diedit dengan benar , berakhir dengan:Dan ini baru Anda
clear
! :)sumber
vim
), shell mengeksekusi "scrollback reset" sebelum menjalankan vim. Programatis, bukan interaktif.clear
; Yaitu, itu membersihkan layar, tapi saya masih bisa menggulir ke belakang. MemukulCommand
K
berfungsi normal.Berikut kode yang berfungsi untuk Terminal macOS, dan iTerm2. Tidak perlu jendela berada di latar depan, baik.
Bagaimana itu bekerja
Ini adalah komposisi dari 3 urutan pelarian ANSI , khususnya perintah "Control Sequence Introducer" .
\033
adalah urutan pelarian yang menyandikan titik kode untuk karakter yang diwakilinya. Pelopor0
menunjukkan bahwa sisa urutan mengkodekan nilai oktal, dalam hal ini,33
dalam oktal. Nilai desimalnya adalah27
(3 * 8^1 + 3 * 8^0
=3 * 8 + 3
=24 + 3
=27
). Dalam ASCII, titik kode27
adalah karakter "ESC" (escape).CSI
perintah mulai denganESC [
, alias\033[
. Mengetahui hal ini, kita dapat membagi string menjadi 3 bagian.CSI 2 J
CSI n J
n
nilai diatur ke2
dalam kasus ini, yang memanggil varian kedua: "Jika n adalah 2, seluruh layar jelas (dan bergerak kursor ke atas kiri pada DOS ANSI.SYS)."CSI 3 J
:CSI n J
n
nilai diatur ke3
dalam kasus ini, yang memanggil ketiga varian: "Jika n adalah 3, seluruh layar jelas dan menghapus semua baris yang disimpan dalam buffer scrollback (fitur ini telah ditambahkan untuk xterm dan didukung oleh aplikasi terminal lain)."CSI 1 ; 1 H
:CSI n ; m H
n
danm
keduanya diatur ke1
, yang berarti perintah ini memindahkan kursor ke sudut paling kiri atas.sumber
CSI n J
" (di mana n = 2) + "CSI n J
" (di mana n = 3) + "CSI n ; m H
" (di mana n, m = 1, 1), yang diterjemahkan menjadi: "ED - Hapus dalam Tampilan" (varian 2), "ED - Hapus dalam Tampilan" (varian 3), "CUP - Posisi Kursor" (pindah ke 1, 1)