FYI, saya menggunakan Tmux melalui aplikasi Terminal Mac OS X.
FYI, saya menggunakan Tmux melalui aplikasi Terminal Mac OS X.
Jawaban:
Pertanyaan yang sama ini telah mengganggu saya selama beberapa waktu. Inilah yang terbaik yang saya hasilkan. Masukkan ini ke file .tmux.conf Anda:
bind -n C-k clear-history
Ini mengikat ctrl-k ke perintah tmux clear-history. The -n setelah bind membuatnya jadi Anda tidak perlu mengeluarkan awalan perintah tmux (ctrl-b secara default). Saya menggunakan bash, jadi ctrl-l sudah melakukan yang setara dengan mengetik "clear" di baris perintah. Dengan dua tombol ini saya mendapatkan kombinasi ctrl-l, ctrl-k yang bagus, yang memindahkan semua buffer gulir dari layar ("hapus") dan kemudian menghapus semua riwayat itu (perintah tmux "hapus-riwayat").
Ini tidak sebagus kombo 1-kunci Terminal, iTerm, atau Konsole untuk membersihkannya, tapi ini adalah dunia yang lebih baik daripada mengetikkan sejarah yang jelas sepanjang waktu.
bind k send-keys "clear"\; send-keys "Enter"
bagian kliring, tetapi menggunakan built-in ctrl+l
lebih sederhana, dan clear-history
untuk menyingkirkan riwayat scrollback adalah tambahan yang bagus.
Seperti yang dinyatakan dengan benar @ juanpaco, clear-history
adalah perintah untuk menghapus buffer scrollback.
Saya akan menambahkan bahwa saya juga ingin menghapus apa yang ada di layar dalam perintah yang sama. Menerbitkan send-keys -R
ulang (membersihkan) layar, jadi saya menggunakan yang berikut ini di.tmux.conf
bind-key b send-keys -R \; clear-history
Ini membersihkan layar DAN buffer scrollback.
send-keys
: "Bendera -R menyebabkan status terminal diatur ulang." Anda mungkin hanya perlu memperbarui.
bind -n C-l send-keys C-l \; clear-history
clear-history
perintah, tekan Ctrl+B
, lalu mulai perintah dengan titik dua ( :
).
send-keys -R C-l \; clear-history
.
Setiap jawaban di sini berbicara tentang menambahkan ikatan kunci baru.
Jika Anda hanya ingin melakukannya sesekali Anda tidak perlu pemetaan sama sekali ...
Awalan default ke <Ctrl-b>
Cukup ketik <prefix>:
panel yang relevan dan kemudian ketik clear-history
dan tekan enter.
Salah satu hal keren tentang tmux adalah Anda bisa menjalankan perintah seperti itu ... atau menjalankannya di shell / membuat skrip seperti tmux command
... atau membuat pintasan keyboard untuknya.
cle
, dan kemudian autocomplete dengan <tab>
pada saat pertama, kemudian pada kedua kalinya digunakan <up arrow>
untuk mengakses entri sebelumnya. Cara ini cukup cepat.
<Ctrl-b> the
tombol c` diatur untuk membuat jendela baru.
:
itu memberi Anda prompt interaktif - di situlah Anda akan mengetikkan 'c'
Jika Anda ingin menggabungkan CTRL-L
plus riwayat yang jelas, tambahkan ini ke ~/.tmux.conf
:
bind u send-keys C-l \; run-shell "sleep .3s" \; clear-history
Ini bahkan berfungsi jika Anda berada di shell MySQL misalnya.
tail -f some.log
, kan? Apakah ada cara untuk menggabungkan ctrl-Z
ini? Tampaknya bisa melakukannya dengan benar.
Saya menemukan menggunakan send-keys -R
sedikit lambat - di sini ada cara lain untuk menghapus layar dan sejarah dengan satu perintah
bind-key C send-keys "clear && tmux clear-history" \; send-keys "Enter"
Panggilan tmux bersarang digunakan sebagai yang lebih jelas
bind-key C send-keys "clear" \; send-keys "Enter" \; clear-history
gagal menghapus teks layar saat ini dari histori - perintah clear-history tampaknya dijalankan di utas terpisah untuk mengirim-kunci.
bind-key E send-keys "C-k" \; send-keys "C-u" \; send-keys "clear" \; send-keys "Enter" \; run-shell "sleep .3s; tmux clear-history"
Jauh lebih sederhana daripada kebanyakan, saya baru saja membuat skrip shell bernama cls
, dan menjalankannya setiap kali saya ingin menghapus layar saya dan buffer scrollback.
Semua ini adalah ini:
cls
clear;
tmux clear-history;
Menemukan ini bekerja paling baik di TMUX 2.6, membersihkan layar, scrollback, tetapi menjaga prompt ditampilkan setelah.
Gunakan Ctrl-L
bind-key -n C-l send-keys C-l \; send-keys -R \; clear-history
Ctrl-L digunakan dalam aplikasi konsol untuk menggambar ulang layar. Saya menemukan bahwa ketika terikatsend-keys -R
akan menyebabkan tombol panah tidak lagi berfungsi dengan benar di beberapa aplikasi (misalnya vim, mc).
Untuk mempertahankan fungsi redraw di aplikasi konsol, saya menggunakan:
bind-key -n C-l if-shell -F '#{alternate_on}' 'send-keys C-l' 'send-keys -R C-l; clear-history'
Ini mengharuskan opsi tmux alternate-screen
diaktifkan (yang secara default).
Saya telah menggunakan beberapa sumber di atas ditambah sumber-sumber lain untuk menghasilkan:
bind k send-keys C-u \; send-keys C-k \; send-keys " clear && tmux clear-history" \; send-keys "Enter" \; run-shell "sleep .3s" \; send-keys "Up" \; send-keys C-u
Ruang terdepan dalam "clear && tmux clear-history" mencegah perintah agar tidak ditulis ke file histori (asalkan Anda memiliki pengaturan shell untuk memperlakukan spasi terdepan dengan cara ini; google "hist diabaikan ruang" + nama shell Anda untuk lebih info). Saya suka perintah ini tidak muncul dalam riwayat saya karena ini lebih sesuai dengan ctrl-k di Terminal.
Tombol kirim pertama Cu dan tombol kirim Ck akan menghapus apa pun yang saat ini diketik di prompt untuk memastikan "clear && tmux clear-history" berhasil (misalnya, jika Anda mengetik "ABCDEFG" di prompt dan memiliki kursor Anda antara D dan E, ini memastikan bahwa "ABCD clear && tmux clear-historyEFG" tidak dikirim ke shell, yang akan gagal).
Tombol kirim "Atas" dan tombol kirim terakhir Cu menghapus item terakhir dari riwayat internal cangkang Anda. Bahkan dengan spasi tambahan yang disebutkan di atas, riwayat internal shell akan menyertakan baris "clear ...". Mengirim dan Ctrl-u menghilangkan ini.
Terakhir, di iTerm saya mengatur ctrl-k untuk memetakan ke ctrl-a k (saya memiliki awalan tmux saya diatur ke ctrl-a), jadi saya bisa mengetikkan ctrl-k yang merupakan apa yang ingin dilakukan tangan saya selama bertahun-tahun melakukan begitu. Saya melakukan ini, dengan masuk ke iTerm> Preferences> Profiles> Keys dan menambahkan pintasan untuk mengirim kode hex "0x01 0x6B". Ada artikel bagus di sini yang memberikan informasi lebih lanjut tentang penggunaan kode hex dengan tmux dan iTerm: http://tangledhelix.com/blog/2012/04/28/iterm2-keymaps-for-tmux/
Cukup banyak memberi saya ctrl-k dengan tmux. Satu-satunya hal yang masih agak mengganggu saya adalah bahwa ctrl-k nyata tanpa tmux tidak memiliki masalah jika saat ini Anda memiliki sesuatu yang diketik di prompt dan akan mempertahankan apa yang Anda ketikkan saat membersihkan layar. Seperti yang disebutkan, pendekatan ini perlu menghapus apa yang diketik sehingga perintah "hapus ..." tidak gagal. Tapi itu sangat dekat!
kenapa tidak? bind -n C-l send-keys C-l
-n C-l
pada dasarnya mengatakan 'tangkap ini', dan kemudian Anda segera melewati hal yang sama. (Yaitu ini adalah no-op.) ... Kedua, niat Anda tidak aktif, karena ⌃L
membersihkan layar , bukan scroll kembali: jika Anda menekan ⌃B [
dan kemudian menggulir ke atas, Anda akan melihat bahwa semua scrollback masih direkam; tujuan dari pertanyaan ini adalah untuk menghapus bahwa scrollback (tmux ini), tidak terminal terlihat.
Setelah banyak penelitian dan menghabiskan waktu. Saya telah menemukan cara terbaik untuk saya di zsh dan terminal.app
Saya menggunakan prefix-c
untuk menghapus layar dan prefix-C
untuk menghapus histori dan buffer gulir dan tidak meninggalkan garis di atas karena saya merasa menjengkelkan.
# clear screen
bind c send-keys 'C-l'
# clear screen and history
bind C send-keys -R \; send-keys C-l \; clear-history \; send-keys
# check if the pane is running vim
is_vim="ps -o state= -o comm= -t '#{pane_tty}' \ | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?)(diff)?$'"
# clear screen
bind c if-shell "$is_vim" "send-keys c" "send-keys 'C-l'"
# clear screen and history
bind C send-keys -R \; send-keys C-l \; clear-history \; send-keys
Jadi, saya sudah menggunakan pendekatan plu dari atas untuk sementara waktu, tapi saya muak dengan keterbatasannya (pada dasarnya, ⌃L
melewati itu tidak ada artinya kecuali disalurkan ke program yang memahaminya.)
Jadi saya telah memperbaiki berbagai pendekatan dalam jawaban berbeda untuk utas ini; Meskipun rumit, pendekatan ini berfungsi dengan shell dan perintah lainnya :
# ⌃K: Clears the current pane (from <https://stackoverflow.com/a/34162098>)
bind-key -n C-k \
if-shell "test \"$(printf '#{pane_current_command}' | tail -c 2)\" = sh" \
"send-keys C-l ; run-shell 'sleep .3s' ; clear-history" \
"split-window -vp 100 ; clear-history -t ! ; kill-pane"
Cobalah tail -f /private/var/log/system.log
atau apalah!
Ada satu catatan penting di sini: ini secara tidak terlihat mengubah ukuran panel yang sedang dibersihkan, jika itu bukan shell. Ini dapat memicu mengubah ukuran perilaku di beberapa aplikasi baris perintah mendengarkan untuk SIGWINCH
es; tapi alasan saya adalah bahwa ini bukan masalah besar, karena mereka adalah program yang Anda sangat mungkin tidak akan mencoba untuk 'jelas' pula .
Selain itu, situasi shell-quoting sudah berantakan, dan dapat dengan mudah menjadi lebih dari satu ketika menanamkan #{pane_current_command}
, jadi berhati-hatilah, Anda mungkin harus memodifikasi ini berdasarkan default-command
pengaturan Anda .
Hal yang sama berlaku untuk pengujian saya pada akhir dari pencocokan perintah itu "sh"
; jika Anda memiliki default-command
sesuatu seperti /bin/bash --login
atau sesuatu yang rumit yang melibatkan exec
, perintah yang sebenarnya mungkin tidak berakhir dengan "sh"
; gunakan ⌃B :
untuk mengeksekusi display-message '#{pane_current_command}'
jika Anda ingin melihat apa yang sedang diuji terhadap.