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.
Bagus. Saya sudah melakukan bind k send-keys "clear"\; send-keys "Enter"bagian kliring, tetapi menggunakan built-in ctrl+llebih sederhana, dan clear-historyuntuk menyingkirkan riwayat scrollback adalah tambahan yang bagus.
Henrik N
1
ini mengikat sekrup panel saya ke atas, menghapus semua teks dari semua panel dan menghapus perbatasan di sekitar mereka! Ada ide tentang apa dengan itu?
Ian Vaughan
Astaga. Program shell apa yang Anda gunakan? Apakah secara kebetulan sudah ada beberapa perilaku yang didefinisikan untuk ctrl + k?
juanpaco
iTerm2. Baru saja melihat bahwa ctrl + k sudah melakukan ini tanpa set binding tmux, jadi itu pasti pemetaan iTerm2.
Ian Vaughan
Aneh. Saya menggunakan iTerm2 juga. Saya belum memperbaruinya untuk beberapa waktu, jadi mungkin ada perbedaan versi. Saya juga tidak menggunakan Ck lagi, karena itu menyebabkan masalah dengan binding vim saya. Saya menggunakan Cn sekarang.
juanpaco
58
Seperti yang dinyatakan dengan benar @ juanpaco, clear-historyadalah 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 -Rulang (membersihkan) layar, jadi saya menggunakan yang berikut ini di.tmux.conf
Langsung dari dokumentasi tmux pada send-keys: "Bendera -R menyebabkan status terminal diatur ulang." Anda mungkin hanya perlu memperbarui.
z5h
20
Kelemahan menggunakan -R adalah input-line Anda saat ini tersembunyi, berbeda dari ketika Anda membersihkan terminal Anda dengan Ctrl + l. Apa yang saya lakukan adalahbind -n C-l send-keys C-l \; clear-history
volpato
6
Bagi Anda yang tidak tahu (seperti saya tidak tahu), untuk tiba di negara bagian untuk memasukkan clear-historyperintah, tekan Ctrl+B, lalu mulai perintah dengan titik dua ( :).
palswim
1
@volpato Saya suka pendekatan Anda, tetapi saya merasa masih menyisakan satu 'layar' dari buffer di gulir kembali. Tidak tahu kenapa. -R mengosongkan prompt, tapi saya 'menyelesaikannya' dengan menambahkan Cm ekstra di akhir (tapi kemudian menempatkannya di baris kedua).
Gdogg
2
Anda dapat menyingkat ini menjadi send-keys -R C-l \; clear-history.
ivan
35
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-historydan 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.
Dimungkinkan untuk mengetik tiga karakter pertama cle, dan kemudian autocomplete dengan <tab>pada saat pertama, kemudian pada kedua kalinya digunakan <up arrow>untuk mengakses entri sebelumnya. Cara ini cukup cepat.
bct
1
Ini tidak berfungsi untuk saya karena ketika saya mulai mengetik setelah menekan <Ctrl-b> the tombol c` diatur untuk membuat jendela baru.
Kelemahan
@frase Saya pikir Anda salah paham - setelah Anda menekan <Ctrl-b> lalu tekan :itu memberi Anda prompt interaktif - di situlah Anda akan mengetikkan 'c'
JonnyRaa
21
Jika Anda ingin menggabungkan CTRL-Lplus 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.
Ini sepertinya tidak berfungsi selama, katakanlah tail -f some.log, kan? Apakah ada cara untuk menggabungkan ctrl-Zini? Tampaknya bisa melakukannya dengan benar.
Aaron Gibralter
19
Saya menemukan menggunakan send-keys -Rsedikit 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.
ada satu peringatan dengan pendekatan ini dan itu hanya berfungsi pada shell lokal, karena mengirimkan tmux clear-history sebagai string untuk dituliskan ke panel aktif. Saya telah mengadaptasinya ke:bind-key E send-keys "C-k" \; send-keys "C-u" \; send-keys "clear" \; send-keys "Enter" \; run-shell "sleep .3s; tmux clear-history"
Santi P.
12
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.
Tetapi bagaimana jika Anda tidak memiliki akses ke baris perintah. Seperti ketika server sedang berjalan dan Anda sedang menonton log.
zudduz
dari mana Anda akan menonton log? Melalui server web? Jika demikian, maka saya tidak mengerti mengapa tmux terlibat?
Brad Parks
1
Sangat menyenangkan untuk dapat menonton log server dan editor vim Anda secara bersamaan.
zudduz
Apakah Anda menggunakan splits tmux? Jika tidak, cukup bagi jendela Anda menjadi 2, dan lihat log Anda di satu, dan gunakan vim di yang lain dengan hanya menjalankan `tmux split" di dalam sesi tmux Anda ... Tapi mungkin saya tidak mendapatkan apa yang Anda lakukan?
Brad Parks
10
Menemukan ini bekerja paling baik di TMUX 2.6, membersihkan layar, scrollback, tetapi menjaga prompt ditampilkan setelah.
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:
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!
Saya juga ingin tahu jika ada alasan untuk tidak merekomendasikan ini.
Gaston Sanchez
2
Pertama-tama, itu tidak perlu: -n C-lpada dasarnya mengatakan 'tangkap ini', dan kemudian Anda segera melewati hal yang sama. (Yaitu ini adalah no-op.) ... Kedua, niat Anda tidak aktif, karena ⌃Lmembersihkan 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.
ELLIOTTCABLE
2
Setelah banyak penelitian dan menghabiskan waktu. Saya telah menemukan cara terbaik untuk saya di zsh dan terminal.app
Saya menggunakan prefix-cuntuk menghapus layar dan prefix-Cuntuk menghapus histori dan buffer gulir dan tidak meninggalkan garis di atas karena saya merasa menjengkelkan.
Tanpa Vim
# 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
Dengan Vim
# 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, ⌃Lmelewati 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 :
Cobalah tail -f /private/var/log/system.log atau apalah!
Peringatan:
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 SIGWINCHes; 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-commandpengaturan Anda .
Hal yang sama berlaku untuk pengujian saya pada akhir dari pencocokan perintah itu "sh"; jika Anda memiliki default-commandsesuatu seperti /bin/bash --loginatau 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.
Jawaban:
Pertanyaan yang sama ini telah mengganggu saya selama beberapa waktu. Inilah yang terbaik yang saya hasilkan. Masukkan ini ke file .tmux.conf Anda:
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.
sumber
bind k send-keys "clear"\; send-keys "Enter"
bagian kliring, tetapi menggunakan built-inctrl+l
lebih sederhana, danclear-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.
sumber
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, tekanCtrl+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 ketikclear-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.sumber
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
:Ini bahkan berfungsi jika Anda berada di shell MySQL misalnya.
sumber
tail -f some.log
, kan? Apakah ada cara untuk menggabungkanctrl-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 perintahPanggilan 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.
sumber
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
sumber
Menemukan ini bekerja paling baik di TMUX 2.6, membersihkan layar, scrollback, tetapi menjaga prompt ditampilkan setelah.
Gunakan Ctrl-L
sumber
Ctrl-L digunakan dalam aplikasi konsol untuk menggambar ulang layar. Saya menemukan bahwa ketika terikat
send-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:
Ini mengharuskan opsi tmux
alternate-screen
diaktifkan (yang secara default).sumber
Saya telah menggunakan beberapa sumber di atas ditambah sumber-sumber lain untuk menghasilkan:
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!
sumber
kenapa tidak?
bind -n C-l send-keys C-l
sumber
-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 danprefix-C
untuk menghapus histori dan buffer gulir dan tidak meninggalkan garis di atas karena saya merasa menjengkelkan.Tanpa Vim
Dengan Vim
sumber
Untuk perbaikan cepat untuk menghapus panel tmux individual, Anda dapat mengatur alias ...
sumber
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 :
Cobalah
tail -f /private/var/log/system.log
atau apalah!Peringatan:
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 berdasarkandefault-command
pengaturan Anda .Hal yang sama berlaku untuk pengujian saya pada akhir dari pencocokan perintah itu
"sh"
; jika Anda memilikidefault-command
sesuatu seperti/bin/bash --login
atau sesuatu yang rumit yang melibatkanexec
, perintah yang sebenarnya mungkin tidak berakhir dengan"sh"
; gunakan⌃B :
untuk mengeksekusidisplay-message '#{pane_current_command}'
jika Anda ingin melihat apa yang sedang diuji terhadap.sumber