Como rolar no tmux?


1293

Comecei a usar o tmux e gosto muito dele, mas preciso poder rolar dentro dos buffers / painéis / janelas que abri. Não me importo se funciona com o mouse ou não. Quando procuro na página de manual do tmux, encontro apenas duas instâncias da palavra "scroll" sendo exibidas e ambas têm a ver com o modo de cópia. Existe uma maneira de rolar sem toda a sobrecarga de entrar no modo de cópia?


8
Com que sobrecarga você está preocupado? copy-modeé a maneira de visualizar o histórico (e opcionalmente copiar coisas dele).
31910 Chris Chrissen

2
para mim você pode pressionar F7 para o modo de rolagem e q para sair
JohnMerlino

7
set -g mode-mouse onpor resposta de @ chaiyachaiya foi o vencedor para mim
Peter Berg

Respostas:


1569

Ctrl- bentão [você pode usar as teclas de navegação normais para rolar (por exemplo, Up Arrowou PgDn). Pressione qpara sair do modo de rolagem.

Como alternativa, você pode pressionar Ctrl- b PgUppara entrar diretamente no modo de cópia e rolar uma página para cima (é o que parece que você deseja na maioria das vezes)

No vimodo (veja abaixo), você também pode rolar a página para cima / para baixo linha por linha usando Shift- ke Shift- j(se você já estiver no modo de rolagem). Sem mudar, o cursor se move em vez da página.

Trechos da página do manual :

O tmux pode ser controlado a partir de um cliente conectado usando uma combinação de teclas de prefixo, 'C-b' (Ctrl-b) por padrão, seguida por uma tecla de comando.

 The default command key bindings are:

[           Enter copy mode to copy text or view the history.

Function                     vi              emacs
--------                     --              -----
Half page down               C-d             M-Down
Half page up                 C-u             M-Up
Next page                    C-f             Page down
Previous page                C-b             Page up
Scroll down                  C-Down or C-e   C-Down
Scroll up                    C-Up or C-y     C-Up
Search again                 n               n
Search again in reverse      N               N
Search backward              ?               C-r
Search forward               /               C-s

Mais um monte mais. Observe que você deve pressionar C-bduas vezes se usar isso para paginar, pois C-bestá vinculado como a tecla de comando. Consulte a página do manual para obter informações sobre como preceder um comando no modo de cópia com uma contagem de repetição.

Você pode definir o modo de encadernação de teclas usando Ctrl- b, depois

:set-window-option mode-keys emacs

ou vi.


14
Eu acho que C-b =é choose-bufferpor padrão. Você quis dizer C-b [(que é copy-modepor padrão)? Também é possível usar C-b PageUppara iniciar o modo de cópia diretamente na página anterior (muito útil quando você sabe o que deseja exibir / copiar já saiu da página atual).
31710 Chris Chrissen

4
Correto, meu tmux não tem modo de rolagem. É necessário C-b [entrar no modo de cópia e, em seguida, usar as combinações de teclas emacs ou vi para rolar. Isso parece ter várias etapas apenas para rolar, mas os benefícios do tmux ainda superam esses aborrecimentos. Estou em um macbook e não há chave PageUp: - \. (Além disso, como eu faço chaves com remarcação como você fez, Dennis?)
chadoh

44
@chadoh: Experimente estes no seu Macbook: Home: fn-LeftArrow; Fim: fn-RightArrow; Page Up: fn-UpArrow; Page Down: fn-DownArrow. Para fazer keycaps:<kbd>Ctrl</kbd>
Dennis Williamson

5
no MacBook, o fn + se vai direto ao aplicativo terminal e nunca bate tmux
Tyler

15
Em um macbook, se você estiver no modo de rolagem, poderá usar fn + Shift + LeftArrow para rolar uma página para cima.
Nick Hammond

306

Bem, você deve considerar a maneira correta de definir a rolagem: adicione seu tmux.conf

set -g mouse on        #For tmux version 2.1 and up

ou

set -g mode-mouse on   #For tmux versions < 2.1

Funcionou para mim em janelas e painéis. Agora, o tmux é perfeito.

O tmux prático tem mais informações sobre os arquivos tmux.conf.


5
Quando faço isso, cliques e rolagens do mouse fazem com que caracteres sem sentido sejam impressos na área de prompt do terminal que estou usando com o tmux. Alguma ideia?
Ely

22
Usuários futuros de mouse tmux: para poupar a necessidade de rolar para baixo novamente antes de digitar, você pode pressionar qpara sair do modo de rolagem.
precisa saber é o seguinte

15
A rolagem do mouse funciona bem com isso, mas infelizmente não posso mais usar o mouse para selecionar o texto. Usando Tilda e tmux.
Friederbluemle 17/03/2015

27
Observe que no tmux 2.1 e superior, isso é substituído por set -g mouse on, e a rolagem não entra automaticamente no modo de cópia, como antes.
thrnio

25
Nota importante: Essa configuração interrompe o destaque e a cópia de texto. Use shift + clique para manter essa funcionalidade.
Shadoninja 4/16

141

Do meu .tmux.conf:

# Sane scrolling
set -g terminal-overrides 'xterm*:smcup@:rmcup@'

Isso permite a rolagem xterm nativa.


28
Você pode explicar exatamente o que isso faz?
Ivo

11
Não sei o que faz, mas é pura genialidade. Finalmente, a rolagem do tmux funciona, yay!
si mesmo

5
Isso não funciona para mim no OS X ...
Nick


6
Verifique isso se estiver confuso com a resposta do togdon: superuser.com/questions/310251/… IMO, se você tiver apenas um painel, essa solução funcionará melhor que a resposta aceita.
Thameera

57

Para o mais recente tmux 2.1, para rolar com o mouse com segurança, esta é a resposta certa:

set -g mouse on
" sane scrolling:
bind -n WheelUpPane if-shell -F -t = "#{mouse_any_flag}" "send-keys -M" "if -Ft= '#{pane_in_mode}' 'send-keys -M' 'copy-mode -e; send-keys -M'"

não basta recarregar o arquivo .tmux.conf, você precisa reiniciar o tmux, por exemplo tmux kill-server && tmux

extraído de https://github.com/tmux/tmux/issues/145


1
Como essa não é a resposta aceita?
Marcel

2
a observação nesta resposta sobre "não ser suficiente para simplesmente recarregar .tmux.conf ajudou" e sair de todas as sessões do tmux para mim (talvez o kill-server funcionasse) ajudou!
Colin D

1
você poderia elaborar como isso funciona?
Oligofren

Parece encaminhar eventos do mouse quando o mouse é clicado / rolado / etc. se o painel estiver em um estado indireto / em buffer (apenas modo de cópia?) e o mouse estiver pressionando um botão, rolando etc. A última parte aborda a rolagem no modo direto, alternando primeiro para o modo indireto. Se não for para esses controles, o terminal poderá interpretar os eventos como rolagem do histórico, se houver. Com isso dito, não sei se consegui fazer com que meu pager e Vim rolassem corretamente ao mesmo tempo e tentei vários trechos por aí.
John P

2
@chefarov - por um comentário em outra resposta, você pode fazer isso Shift+clickquando estiver com o mouse ativado .
Brendan Moore

14

No meu caso, apenas opt+ UpArrowe opt+ DownArrowno OSX.


@ fixer1234 A questão não menciona o Linux. tmuxtambém pode ser usado no OS X.
slhck

@ slhck: Obrigado. Olhos muito turvos; o astigmatismo entrou em cena. Eu tinha interpretado mal a tag tmux como uma tag linux.
fixer1234

11

Foi assim que fiz funcionar e as razões pelas quais acho que é melhor do que o padrão.

Para experimentá-lo, insira todas as seções de código ~/.tmux.conf.

Etapa 1. Altere a chave do prefixo para não precisar chegar um pouco. Aparentemente, 'B' é uma tecla próxima, mas está no meio dos dois dedos indicadores (em 'F' e 'J', respectivamente). Como esse atalho é essencial no tmux, o Cj é muito melhor, pois envolve o movimento zero das mãos (além de pressionar a tecla).

set -g prefix C-j
unbind C-b
bind C-j send-prefix

A etapa 2. 'S' (para entrar no modo de cópia) é: 1) fechar (pelo mesmo motivo acima), 2) envolve a outra mão (compare: o 1-2 no boxe ou o lscomando para exibir arquivos em um diretório ) e 3) pode ser considerado mnemônico para "rolagem" (embora o modo de cópia não seja apenas rolagem).

bind s copy-mode

Etapa 3. A última parte, a rolagem real. 'P' e 'N' são familiares para esse fim para os usuários do Emacs. Eles são próximos, intuitivos ('P' está acima de 'N' no teclado) e mnemônicos ("anterior" e "próximo"). Se você fez alguma rolagem no Emacs e depois foi para o tmux, faz sentido ter esses atalhos.

No entanto, descobri que 'eu' e 'K' são ainda melhores - eles são ainda mais próximos que 'P' e 'N' e intuitivos (pelo mesmo motivo); quanto aos mnemônicos - como rolagem é uma coisa tão comum, os mnemônicos não importam, pois os atalhos logo desviarão seu cérebro e entrarão na memória muscular.

bind -t emacs-copy 'p' scroll-up
bind -t emacs-copy 'n' scroll-down
bind -t emacs-copy 'i' scroll-up
bind -t emacs-copy 'k' scroll-down

7

Pesquisei bastante isso e a melhor solução para mim funciona conforme mencionado neste guia detalhado: http://tangledhelix.com/blog/2012/07/16/tmux-and-mouse-mode/

Adicione essas ligações no ~ / .tmux.conf:

set -g mode-mouse on

unbind +
bind + \
  new-window -d -n tmux-zoom 'clear && echo TMUX ZOOM && read' \;\
  swap-pane -s tmux-zoom.0 \;\
  select-window -t tmux-zoom

unbind -
bind - \
  last-window \;\
  swap-pane -s tmux-zoom.0 \;\
  kill-window -t tmux-zoom

Com a abordagem acima implementada, você também pode copiar dos painéis de uma janela, ampliando primeiro cada painel usando o Prefixo + .

Um detalhe importante que estava faltando no modo mouse é pressionar Shift antes de selecionar uma área para copiar. Isso o copiará para o buffer do terminal tradicional, em vez do buffer de cópia do tmux. ( https://wiki.archlinux.org/index.php/Tmux#Scrolling_issues )


7

Eu recomendo tentar o plugin tmux-better-mouse-mode para resolver a maioria dos problemas relacionados ao mouse tmux.

É compatível com o Tmux 2.1+ e com a nova set-option -g mouse onabordagem.


1
Obrigado, esta é a melhor solução para mim. Ele cobre todas as ligações da roda do mouse que eu adicionei manualmente (para que eu não precise mais delas), e existem dois recursos que eu queria muito: scroll-without-changing-paneem combinação com scroll-without-changing-panee emulate-scroll-for-no-mouse-alternate-buffer. Agora, minha experiência de uso do tmux é muito, muito melhor.
Selurvedu

6

A única coisa que funciona para mim é colocar o seguinte em ~/.tmux.conf

# Allow xterm titles in terminal window, terminal scrolling with scrollbar, and setting overrides of C-Up, C-Down, C-Left, C-Right
set -g terminal-overrides "xterm*:XT:smcup@:rmcup@:kUP5=\eOA:kDN5=\eOB:kLFT5=\eOD:kRIT5=\eOC"

(pode ser necessário reiniciar para que isso entre em vigor)

Atualizar:

Descobri que se você alterar a configuração em Putty Connection> Data> Terminal-type para "putty" (usado para corrigir alguns problemas de formatação) de "xterm", essa solução deixará de funcionar.

Atualização 2:

Use isso se desejar "massa" como o seu tipo de terminal: set -g terminal-overrides "putty*:XT:smcup@:rmcup@:kUP5=\eOA:kDN5=\eOB:kLFT5=\eOD:kRIT5=\eOC"


2
Este também resolve meu problema de rolagem no aplicativo para iPhone.
NataliailCapital

A última vez que tentei isso não estava mais funcionando, mas funcionou. Estranho. set -ga terminal-overrides ',xterm*:smcup@:rmcup@'
phocks

4

Isso funcionou para mim:

vim ~/.tmux.conf
set -g mode-mouse on      ###Insert this setting with vim, then source the file.
tmux source-file ~/.tmux.conf

2
Desde a versão 2.1 (18 de outubro de 2015) a opção deve serset -g mouse on
naoko 27/12/18

+1 por fornecer o caminho completo para o arquivo de configuração. A resposta de @ chaiyachaiya seria perfeita caso contrário.
John McFarlane

1

FWIW, em um macbook / OSX Mojave, depois de ctrl+[fazer:

  • up arrow para alinhar
  • down arrow para linha para baixo
  • fn + up arrow para paginar
  • fn + down arrow para página abaixo
  • q para sair do modo de visualização

0

A única coisa que funcionou para mim foi o vim ~ / .tmux.conf set -g mode-mouse em ### Insira essa configuração no vim e depois forneça o arquivo. arquivo-fonte tmux ~ / .tmux.conf


Você poderia usar alguma formatação para deixar isso mais claro? Use o botão EDITAR e verifique as opções disponíveis no editor para adicionar os formatos úteis.
music2myear 23/04

-2
  • Ctrl+ A- para começar a rolar
  • Ctrl+ C- para parar de rolar

3
Esta postagem é muito curta para ser útil para responder à pergunta. Acrescenta muito pouca informação nova às respostas já postadas; não diz nada sobre como rolar (apenas como mudar para dentro e para fora do modo de cópia). Além disso, a combinação de teclas de prefixo de comando padrão é Ctrl-B( Ctrl-Aé o padrão para a tela GNU).
Anthony Geoghegan 26/10

1
Não tenho certeza se o autor desta resposta sequer entendeu a pergunta. É inútil e errado.
Vik

2
Eu estive procurando como parar de rolar por tanto tempo, obrigado por apontar!
PERR0_HUNTER
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.