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.
Agradável. Venho fazendo bind k send-keys "clear"\; send-keys "Enter"a parte de limpeza, mas usar o built-in ctrl+lé mais simples, e clear-historylivrar-me do histórico de rolagem é uma boa adição.
21412 Henrik N
1
essa ligação aparafusa meus painéis, removendo todo o texto de todos os painéis e remove as bordas ao redor deles! Alguma idéia sobre o que há com isso?
Ian Vaughan
Caramba. Qual programa shell você usa? Por acaso, já possui algum comportamento definido para ctrl + k?
juanpaco
iTerm2. Acabei de ver que o ctrl + k já faz isso sem o conjunto de ligações tmux, portanto deve ser um mapeamento do iTerm2.
Ian Vaughan
Esquisito. Eu uso o iTerm2 também. Não o atualizo há algum tempo, portanto pode haver uma diferença de versão. Também não uso mais o Ck, porque isso causou problemas com minhas ligações ao vim. Eu uso o Cn agora.
juanpaco
58
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 -Rredefine (limpa) a tela, então eu uso o seguinte no meu.tmux.conf
Diretamente da documentação do tmux em send-keys: "O sinalizador -R faz com que o estado do terminal seja redefinido." Você provavelmente só precisa atualizar.
Z5h 13/10/12
20
A desvantagem de usar -R é que sua linha de entrada atual fica oculta, diferentemente de quando você limpa seu terminal com Ctrl + l. O que eu fiz ébind -n C-l send-keys C-l \; clear-history
volpato 26/03
6
Para aqueles de vocês que não sabem (como eu não sabia), para chegar ao estado para inserir o clear-historycomando, pressione Ctrl+Be inicie o comando com dois pontos ( :).
Palswim 19/05
1
@ volpato Gosto da sua abordagem, mas acho que ainda deixa uma 'tela' do buffer na rolagem de volta. Não faço ideia do porquê. -R apaga o prompt, mas eu o 'resolvi' adicionando um Cm extra no final (mas isso o coloca na segunda linha).
Gdogg
2
Você pode condensar isso para send-keys -R C-l \; clear-history.
ivan
35
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 ...
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.
É possível digitar os três primeiros caracteres clee, 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.
BCT
1
Isso não funciona para mim, porque quando começo a digitar após pressionar a <Ctrl-b> the tecla c` é definido para criar uma nova janela.
fraxture 01/04
@fraxture Eu acho que você entendeu errado - depois de pressionar <Ctrl-b> e depois pressionar, :ele fornece um prompt interativo - é aí que você digita 'c'
JonnyRaa
21
Se você deseja combinar CTRL-Lmais 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.
há uma ressalva nessa abordagem e é que ela funciona apenas em shells locais, porque envia o histórico claro do tmux como string para ser gravado no painel ativo. Eu o adaptei para: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
Muito mais simples que a maioria, eu apenas criei um script de shell chamado clse o executo sempre que quiser limpar minha tela e o buffer de rolagem.
Mas e se você não tiver acesso à linha de comando. Por exemplo, quando um servidor está em execução e você está assistindo os logs.
Zudduz 27/10/16
de onde você estaria assistindo os logs? Sobre um servidor web? Se sim, então eu não entendo por que o tmux está envolvido?
Brad Parks
1
É bom poder assistir os logs do servidor e o seu editor vim simultaneamente.
Zudduz 28/10/16
Você usa divisões tmux? Caso contrário, apenas divida sua janela em 2 e visualize seus logs em um, e use o vim no outro, executando o `tmux split" dentro da sua sessão do tmux ... Mas talvez eu não esteja entendendo o que você está fazendo?
Brad Parks
10
Concluiu que isso funciona melhor no TMUX 2.6, limpando a tela, rolando, mas mantendo o prompt exibido depois.
Ctrl-L é usado em aplicativos de console para redesenhar a tela. Eu descobri que, quando ligado a send-keys -Rele, 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:
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!
Gostaria de saber também se há um motivo para não recomendar isso.
Gaston Sanchez
2
Primeiro de tudo, isso não é necessário: -n C-lbasicamente 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 ⌃Llimpa 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.
ELLIOTTCABLE
2
Depois de muita pesquisa e tempo gasto. Encontrei o melhor caminho para mim no zsh e no terminal.app
Estou usando prefix-cpara limpar a tela e prefix-Climpar o histórico e o buffer de rolagem, sem deixar linhas acima porque acho isso irritante.
Sem 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
Com o 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
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 :
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 SIGWINCHes; 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-commandconfiguração.
O mesmo se aplica ao meu teste do final dessa correspondência de comando "sh"; se você tem default-commandalgo parecido /bin/bash --loginou 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.
Respostas:
Essa mesma pergunta me atormenta há algum tempo. Aqui está o melhor que eu propus. Coloque isso no seu arquivo .tmux.conf:
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.
fonte
bind k send-keys "clear"\; send-keys "Enter"
a parte de limpeza, mas usar o built-inctrl+l
é mais simples, eclear-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.
fonte
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, pressioneCtrl+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, digiteclear-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.fonte
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
:Isso funciona mesmo se você estiver em um shell MySQL, por exemplo.
fonte
tail -f some.log
, certo? Existe uma maneira de combinarctrl-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 comandoUma 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.
fonte
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
fonte
Concluiu que isso funciona melhor no TMUX 2.6, limpando a tela, rolando, mas mantendo o prompt exibido depois.
Usa Ctrl-L
fonte
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:
Isso requer que a opção tmux
alternate-screen
esteja ativada (que é por padrão).fonte
Eu usei algumas das opções acima e outras fontes para criar:
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!
fonte
Por que não?
bind -n C-l send-keys C-l
fonte
-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 eprefix-C
limpar o histórico e o buffer de rolagem, sem deixar linhas acima porque acho isso irritante.Sem Vim
Com o Vim
fonte
Para uma solução rápida para limpar painéis tmux individuais, você pode configurar um alias ...
fonte
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 :
Experimente
tail -f /private/var/log/system.log
ou algo assim!Ressalvas:
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 suadefault-command
configuração.O mesmo se aplica ao meu teste do final dessa correspondência de comando
"sh"
; se você temdefault-command
algo parecido/bin/bash --login
ou complicadoexec
, o comando real pode não terminar com"sh"
; use⌃B :
para executardisplay-message '#{pane_current_command}'
se você quiser ver o que está sendo testado.fonte