Para sua informação, estou usando o Tmux através do aplicativo Mac OS X Terminal.
Para sua informação, estou usando o Tmux através do aplicativo Mac OS X Terminal.
Respostas:
Essa mesma pergunta me atormenta há algum tempo. Aqui está o melhor que eu propus. Coloque isso no seu arquivo .tmux.conf:
bind -n C-k clear-history
Isso liga ctrl-k ao comando tmux clear-history. O -n after bind faz com que você não precise emitir o prefixo do comando tmux (ctrl-b por padrão). Eu uso o bash, então ctrl-l já faz o equivalente a digitar "clear" na linha de comando. Com essas duas teclas, recebo uma boa combinação de ctrl-l, ctrl-k, que move todo o buffer de rolagem da tela (o "clear") e exclui todo esse histórico (o comando "clear-history" do tmux).
Não é tão bom quanto os combos de 1 tecla do Terminal, do iTerm ou do Konsole para limpá-lo, mas é um mundo melhor do que digitar o histórico claro o tempo todo.
bind k send-keys "clear"\; send-keys "Enter"
a parte de limpeza, mas usar o built-in ctrl+l
é mais simples, e clear-history
livrar-me do histórico de rolagem é uma boa adição.
Como @juanpaco afirmou corretamente, clear-history
é o comando para limpar o buffer de rolagem.
Vou acrescentar que também gosto de limpar o que está na tela no mesmo comando. Emitir um send-keys -R
redefine (limpa) a tela, então eu uso o seguinte no meu.tmux.conf
bind-key b send-keys -R \; clear-history
Isso limpa a tela E o buffer de rolagem.
send-keys
: "O sinalizador -R faz com que o estado do terminal seja redefinido." Você provavelmente só precisa atualizar.
bind -n C-l send-keys C-l \; clear-history
clear-history
comando, pressione Ctrl+B
e inicie o comando com dois pontos ( :
).
send-keys -R C-l \; clear-history
.
Cada resposta aqui fala sobre a adição de novas associações de teclas.
Se você só quer fazê-lo ocasionalmente, não precisa de nenhum mapeamento ...
O prefixo é padronizado como <Ctrl-b>
Basta digitar <prefix>:
no painel relevante, digite clear-history
e pressione enter.
Uma das coisas legais sobre o tmux é que você pode simplesmente executar qualquer um desses comandos ... ou executá-los em um shell / script como tmux command
... ou criar um atalho de teclado para eles.
cle
e, em seguida, preencher automaticamente com <tab>
a primeira vez e, na segunda vez, usar <up arrow>
para acessar a entrada anterior. Desta forma, é bastante rápido.
<Ctrl-b> the
tecla c` é definido para criar uma nova janela.
:
ele fornece um prompt interativo - é aí que você digita 'c'
Se você deseja combinar CTRL-L
mais histórico claro, adicione isso ao seu ~/.tmux.conf
:
bind u send-keys C-l \; run-shell "sleep .3s" \; clear-history
Isso funciona mesmo se você estiver em um shell MySQL, por exemplo.
tail -f some.log
, certo? Existe uma maneira de combinar ctrl-Z
com isso? Pode parecer acertar.
Achei que o uso send-keys -R
era um pouco lento - aqui está outra maneira de limpar a tela e o histórico com um único comando
bind-key C send-keys "clear && tmux clear-history" \; send-keys "Enter"
Uma chamada tmux aninhada é usada como a mais óbvia
bind-key C send-keys "clear" \; send-keys "Enter" \; clear-history
falha ao limpar o texto atual da tela do histórico - o comando limpar histórico parece ser executado em um encadeamento separado para enviar chaves.
bind-key E send-keys "C-k" \; send-keys "C-u" \; send-keys "clear" \; send-keys "Enter" \; run-shell "sleep .3s; tmux clear-history"
Muito mais simples que a maioria, eu apenas criei um script de shell chamado cls
e o executo sempre que quiser limpar minha tela e o buffer de rolagem.
Tudo o que é é isso:
cls
clear;
tmux clear-history;
Concluiu que isso funciona melhor no TMUX 2.6, limpando a tela, rolando, mas mantendo o prompt exibido depois.
Usa Ctrl-L
bind-key -n C-l send-keys C-l \; send-keys -R \; clear-history
Ctrl-L é usado em aplicativos de console para redesenhar a tela. Eu descobri que, quando ligado a send-keys -R
ele, faria com que as teclas de seta deixassem de funcionar corretamente em alguns aplicativos (por exemplo, vim, mc).
Para manter a funcionalidade de redesenho em aplicativos de console, usei:
bind-key -n C-l if-shell -F '#{alternate_on}' 'send-keys C-l' 'send-keys -R C-l; clear-history'
Isso requer que a opção tmux alternate-screen
esteja ativada (que é por padrão).
Eu usei algumas das opções acima e outras fontes para criar:
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
O espaço inicial em "clear && tmux clear-history" impede que o comando seja gravado no arquivo de histórico (desde que você tenha sua configuração de shell para tratar os espaços iniciais desta maneira; google "hist ignore space" + o nome do seu shell para mais info). Eu gostaria que esse comando não aparecesse no meu histórico, pois isso está mais alinhado com o ctrl-k no Terminal.
As primeiras chaves de envio Cu e Ck de chaves de envio limparão o que está digitado no momento no prompt para garantir que o "histórico claro do clear && tmux" seja bem-sucedido (por exemplo, se você digitou "ABCDEFG" no prompt e tiver seu cursor entre o D e o E, isso garante que "ABCD clear && tmux clear-historyEFG" não seja enviado ao shell, o que falharia).
As chaves de envio "Para cima" e as últimas chaves de envio Cu limpam os últimos itens do histórico interno de seus shells. Mesmo com o espaço à direita mencionado acima, o histórico interno do shell incluirá a linha "clear ...". Enviar e Ctrl-u se livra disso.
Por fim, no iTerm, defino ctrl-k para mapear para ctrl-a k (tenho meu prefixo tmux definido como ctrl-a), para que eu possa digitar ctrl-k, que é o que minhas mãos querem fazer com tantos anos de trabalho tão. Eu faço isso acessando o iTerm> Preferências> Perfis> Chaves e adicionando um atalho para enviar o código hexadecimal "0x01 0x6B". Há um ótimo artigo aqui, que fornece mais informações sobre o uso de códigos hexadecimais com tmux e iTerm: http://tangledhelix.com/blog/2012/04/28/iterm2-keymaps-for-tmux/
Isso praticamente me dá o ctrl-k com o tmux. A única coisa que ainda me incomoda é que o verdadeiro ctrl-k sem tmux não terá problemas se você tiver algo digitado no prompt e preservará o que você digitou ao limpar a tela. Como mencionado, essa abordagem precisa limpar o que está digitado para que o comando "clear ..." não falhe. Mas é bem perto!
Por que não? bind -n C-l send-keys C-l
-n C-l
basicamente diz 'pegue isso', e então você passa imediatamente a mesma coisa. (isto é, não é uma operação.)… Segundo, sua intenção está desativada, porque ⌃L
limpa a tela , não a rolagem para trás: se você pressionar ⌃B [
e rolar para cima, verá que toda a rolagem ainda está gravada; o objetivo desta pergunta é esclarecer que o scrollback (tmux), não o terminal visível.
Depois de muita pesquisa e tempo gasto. Encontrei o melhor caminho para mim no zsh e no terminal.app
Estou usando prefix-c
para limpar a tela e prefix-C
limpar o histórico e o buffer de rolagem, sem deixar linhas acima porque acho isso irritante.
# 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
Então, eu uso a abordagem de plu por um bom tempo há um tempo, mas fiquei cansado das limitações (basicamente, a passagem não tem sentido a menos que seja direcionada a um programa que a entenda).⌃L
Então, eu aprimorei as várias abordagens em respostas diferentes para esse segmento; Embora complexa, essa abordagem funciona com shells e outros comandos :
# ⌃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"
Experimente tail -f /private/var/log/system.log
ou algo assim!
Há uma observação importante aqui: isso é redimensionar invisivelmente o painel que está sendo limpo, se não for um shell. Isso pode desencadear o comportamento de redimensionamento em alguns aplicativos de linha de comando que estão ouvindo SIGWINCH
es; mas meu raciocínio é que esse não é um grande problema, porque esses são programas que você provavelmente não tentará "limpar" de qualquer maneira .
Além disso, a situação de citação de shell já é uma bagunça e pode facilmente se tornar mais uma ao incorporar #{pane_current_command}
; portanto, tenha cuidado, talvez seja necessário modificá-lo com base na sua default-command
configuração.
O mesmo se aplica ao meu teste do final dessa correspondência de comando "sh"
; se você tem default-command
algo parecido /bin/bash --login
ou complicado exec
, o comando real pode não terminar com "sh"
; use ⌃B :
para executar display-message '#{pane_current_command}'
se você quiser ver o que está sendo testado.