FYI, Mac OS X Terminal uygulaması aracılığıyla Tmux kullanıyorum.
FYI, Mac OS X Terminal uygulaması aracılığıyla Tmux kullanıyorum.
Yanıtlar:
Aynı soru oldukça uzun süredir beni rahatsız ediyor. İşte en iyi bulduğum. Bunu .tmux.conf dosyanıza koyun:
bind -n C-k clear-history
Bu, ctrl-k'yi tmux clear-history komutuna bağlar. -N after bind bunu yapar, böylece tmux komut önekini (varsayılan olarak ctrl-b) vermenize gerek kalmaz. Ben bash kullanıyorum, bu yüzden ctrl-l zaten komut satırında "clear" yazmanın eşdeğerini yapıyor. Bu iki tuşla güzel bir ctrl-l, ctrl-k combo'yu alıyorum.
Terminal, iTerm veya Konsole'nın 1 tuşlu komboları temizlemek için o kadar güzel değil, ama her zaman açık bir tarih yazmaktan daha iyi bir dünya.
bind k send-keys "clear"\; send-keys "Enter"
temizleme kısmı için yapıyorum , ama yerleşik kullanmak ctrl+l
daha basit ve clear-history
kaydırma geçmişinden kurtulmak için iyi bir ektir.
@Juanpaco doğru şekilde belirtildiği gibi, clear-history
geri kaydırma arabelleğini temizleme komutudur.
Aynı komutta ekranda ne olduğunu temizlemeyi sevdiğimi de ekleyeceğim. Bir Düzenleyen send-keys -R
Ben aşağıdaki kullanmak, böylece sıfırlanır (temizler) ekranını benim.tmux.conf
bind-key b send-keys -R \; clear-history
Bu, ekranı VE aşağı kaydırma arabelleğini temizler.
send-keys
: "-R bayrağı terminal durumunun sıfırlanmasına neden olur." Muhtemelen güncellemeniz gerekiyor.
bind -n C-l send-keys C-l \; clear-history
clear-history
komuta girmek üzere duruma gelmek için tuşuna basın Ctrl+B
ve ardından iki nokta üst üste ( :
) ile komutu başlatın .
send-keys -R C-l \; clear-history
.
Buradaki her cevap yeni anahtar bağlar eklemekten bahsediyor.
Sadece ara sıra yapmak istiyorsanız, bir haritaya ihtiyacınız yok ...
Önek varsayılan olarak <Ctrl-b>
Sadece yazın <prefix>:
, ilgili bölmesinde ve sonra yazın clear-history
ve enter tuşuna basın.
Tmux ile ilgili harika şeylerden biri, bu tür komutları herhangi bir şekilde çalıştırabilmeniz ... veya bunları bir kabukta / komut dosyasında çalıştırabilmeniz ... veya onlar tmux command
için bir klavye kısayolu yapabilmenizdir.
cle
ve sonra <tab>
ilk kez otomatik olarak tamamlamak , daha sonra ikinci <up arrow>
girişte bir önceki girişe erişmek için kullanmak mümkündür . Bu şekilde oldukça hızlı.
<Ctrl-b> the
c` tuşuna bastıktan sonra yazmaya başladığımda yeni bir pencere oluşturmak için ayarlanmış.
:
size interaktif bir bilgi istemi veriyor - 'c'
CTRL-L
Artı açık geçmişi birleştirmek istiyorsanız , bunu aşağıdakilere ekleyin ~/.tmux.conf
:
bind u send-keys C-l \; run-shell "sleep .3s" \; clear-history
Bu, örneğin bir MySQL kabuğundaysanız bile çalışır.
tail -f some.log
, değil mi? Bununla birleştirmenin bir yolu var mı ctrl-Z
? Doğru gibi görünebilir.
send-keys -R
Biraz yavaş kullandığımı gördüm - işte ekranı ve geçmişi tek bir komutla temizlemenin başka bir yolu
bind-key C send-keys "clear && tmux clear-history" \; send-keys "Enter"
İç içe bir tmux çağrısı daha belirgin olarak kullanılır
bind-key C send-keys "clear" \; send-keys "Enter" \; clear-history
başarısız geçmişinden ekranının mevcut metni temizlemek için - açık-tarih komut gönderme-tuşlara ayrı bir konu çalıştırmak için görünür.
bind-key E send-keys "C-k" \; send-keys "C-u" \; send-keys "clear" \; send-keys "Enter" \; run-shell "sleep .3s; tmux clear-history"
Çok daha basit, ben sadece denilen bir kabuk komut dosyası oluşturdum cls
ve ekran ve kaydırma arabelleği temizlemek istediğinizde çalıştırın.
Hepsi bu:
cls
clear;
tmux clear-history;
Bunun en iyi TMUX 2.6'da çalıştığını, ekranı temizlediğini, geri kaydırdığını, ancak daha sonra görüntülenen istemi koruduğunu gördük.
Ctrl-L kullanır
bind-key -n C-l send-keys C-l \; send-keys -R \; clear-history
Ctrl-L konsol uygulamalarında ekranı yeniden çizmek için kullanılır. send-keys -R
Bağlandığımda bazı uygulamalarda (örneğin vim, mc) ok tuşlarının artık düzgün çalışmamasına neden olacağını buldum .
Konsol uygulamalarında yeniden çizim işlevini korumak için şunları kullandım:
bind-key -n C-l if-shell -F '#{alternate_on}' 'send-keys C-l' 'send-keys -R C-l; clear-history'
Bu, tmux seçeneğinin açık olmasını gerektirir alternate-screen
(varsayılan olarak budur).
Yukarıdakilerden bazılarını ve diğer kaynakları kullandım:
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
"Clear && tmux clear-history" içindeki lider alan, komutun geçmiş dosyasına yazılmasını önler (önde gelen boşlukları bu şekilde işlemek için kabuk kurulumunuza sahip olmanızı sağlar; google "hist alanı yoksay" + daha fazla bilgi için kabuğunuzun adı bilgi). Terminalde ctrl-k ile daha satır içi olduğundan, bu komutun geçmişimde görünmemesini istiyorum.
İlk gönderme anahtarları Cu ve gönderme anahtarları Ck, "temizle && tmux açık geçmişi" nin başarılı olmasını sağlamak için istemde şu anda yazılanları temizler (örneğin, istemde "ABCDEFG" yazıp imleciniz D ve E arasındayken, "ABCD clear && tmux clear-historyEFG" öğesinin kabuğa gönderilmemesini sağlar, bu da başarısız olur).
Gönderme tuşları "Yukarı" ve son gönderme tuşları Cu, kabuklarınızın dahili geçmişindeki son öğeleri temizler. Yukarıda belirtilen arka boşlukta bile kabuğun iç geçmişi "açık ..." çizgisini içerecektir. Göndermek ve Ctrl-u bundan kurtulur.
Son olarak, iTerm'de ctrl-k'yi ctrl-a k ile eşleştirmek için ayarladım (tmux önekimi ctrl-a olarak ayarladım), bu yüzden ctrl-k yazabilirim. yani. Bunu, iTerm> Tercihler> Profiller> Tuşlar'a giderek ve onaltılı kodu "0x01 0x6B" göndermek için bir kısayol ekleyerek yaparım. Burada tmux ve iTerm ile hex kodları kullanma hakkında daha fazla bilgi veren harika bir makale var: http://tangledhelix.com/blog/2012/04/28/iterm2-keymaps-for-tmux/
Bu bana tmux ile ctrl-k veriyor. Bana hala nags gibi tek şey, şu anda komut isteminde yazılan bir şey varsa ve ekranı temizlerken yazdıklarınızı koruyacaksa, tmux olmadan gerçek ctrl-k sorun yaşamıyor olmasıdır. Belirtildiği gibi, bu yaklaşımın yazılanları temizlemesi gerekir, böylece "temizle ..." komutu başarısız olmaz. Ama çok yakın!
neden olmasın? bind -n C-l send-keys C-l
-n C-l
temelde 'bunu yakala' der ve sonra hemen aynı şeyi geçirirsiniz. (yani bu bir işlem değildir.)… İkincisi, niyetiniz kapalı, çünkü ekranı geri kaydırmak değil, ekranı⌃L
temizler : vurur ve sonra yukarı kaydırırsanız, tüm geri kaydırmanın hala kaydedildiğini görürsünüz; Bu sorunun amacı temizlemek için o (tmux en) scrollback, görünmez terminali. ⌃B [
Yani, kullanarak oldum PLU yaklaşımını yukarıdan bir süre, ama ben beslenen-up bunların sınırlamalar var (temelde, ⌃L
geçirilmiş borulu sürece bunu anlayan bir programa anlamsızdır.)
Bu yüzden bu konuya farklı cevaplarda çeşitli yaklaşımlar geliştirdim; Karmaşık rağmen, bu yaklaşım ile çalışır hem kabukları ve diğer komutlar :
# ⌃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"
Deneyin tail -f /private/var/log/system.log
ya da bir şey!
Burada önemli bir not var: bu, kabuk değilse, temizlenen bölmenin görünmez bir şekilde yeniden boyutlandırılmasıdır . Bu, SIGWINCH
es dinleyen bazı komut satırı uygulamalarında yeniden boyutlandırma davranışını tetikleyebilir ; ama benim akıl yürütmem bu büyük bir sorun değil, çünkü bunlar zaten 'temizlemeye' çalışamayacağınız programlar .
Buna ek olarak, kabuk alıntı durumu zaten bir karışıklıktır ve gömme sırasında kolayca bir tane daha olabilir #{pane_current_command}
, bu yüzden dikkatli olun, bunu default-command
ayarınıza göre değiştirmeniz gerekebilir .
Aynı şey, bu komut eşleşmesinin sonunu test etmem için de geçerlidir "sh"
; Eğer default-command
buna benzer /bin/bash --login
veya karmaşık bir şey varsa exec
, gerçek komut bitmeyebilir "sh"
; neye karşı test edildiğini görmek istiyorsanız ⌃B :
yürütmek için kullanın display-message '#{pane_current_command}'
.
Çok fazla araştırma ve zaman harcadıktan sonra. Zsh ve terminal.app'de benim için en iyi yolu buldum
Ben kullanıyorum prefix-c
ekranı temizlemek için ve prefix-C
geçmişini temizlemek için ve tampon kaydırma ve bunu rahatsız edici buluyorum, çünkü yukarıda hiçbir çizgiler bırakarak.
# 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