tmux でのマウスによるシェル出力のスクロール

shell tmux

tmux では、tmux を使わずにシェルを実行した場合(Gnome Terminal)と同じようにマウススクロールが動作しません。tmuxは上下キーを押したときのようにマウスのスクロールイベントを送っているようです。しかし、シェルの出力履歴をスクロールさせたいのです。tmuxをこのように動作させる方法はありますか?

注:私はキーボードでスクロールする方法を知っています(別の質問ここのおかげで)

2つのバージョンのtmuxでマウススクロールを試してみました

  288  user31494  2010-11-12


ベストアンサー

出力の履歴をスクロールするには ^b + [ を使います。本当の PgUpPgDown が使えるかどうかはわかりませんが。私の端末はこれらのキーをtmuxに送りません。その代わりに、自分自身をスクロールして、tmuxの履歴を表示しません

コピーモードを終了するには、ESC を押します

このモード(コピーモード)でマウスを使用するには、^b + :を押して、以下のように入力します

setw -g mouse on

注意: tmux < 2.1 では、オプションの名前は mode-mouse であり mouse ではありませんでした

これで、コピーモードに変更したときにマウスでスクロールできるようになりました。このコマンドを ~/.tmux.conf に記述すると、tmux を実行するたびにロードされるようになります

Update: tmux 1.5 では、このオプションにより、スクロールホイールを使用すると自動的にコピーモードに切り替わり、tmux のスクロールバックバッファをスクロールバックするようになりました。最初に Ctrl-B + [ を押す必要はありません。プロンプトまでスクロールバックすると、コピーモードも自動的に終了します

287  Pavlo  2010-12-01


Tmux 2.1ではいくつかの変更点があります

  • マウスモードが書き換えられました。のオプションがなくなりました

    • mouse-resize-pane
    • mouse-select-pane
    • mouse-select-window
    • mode-mouse

    代わりにオプションは1つだけです: ‘mouse’はマウスのサポートを完全にオンにします

それは

set -g mouse on
# to enable mouse scroll, see https://github.com/tmux/tmux/issues/145#issuecomment-150736967
bind -n WheelUpPane if-shell -F -t = "#{mouse_any_flag}" "send-keys -M" "if -Ft= '#{pane_in_mode}' 'send-keys -M' 'copy-mode -e'"

132  DannyRe  2015-10-19


現在のバージョンの tmux (1.5) では、モードマウスオプションをオンにするだけで、マウスホイールでスクロールすることができます

         mode-mouse [on | off]
Mouse state in modes.  If on, the mouse may be used to
enter copy mode and copy a selection by dragging, to
enter copy mode and scroll with the mouse wheel, or to
select an option in choice mode.

私の.tmux.confでは

set-window-option -g mode-mouse on

65  bukzor  2011-11-15


Update:

他の人が言っているように、新しいバージョンのtmuxでは、.tmux.confに以下のように記述する必要があります

setw -g mouse on

tmuxの古いバージョンの以前のおすすめ

.tmux.confでこれを試してみてください

# Make mouse useful in copy mode
setw -g mode-mouse on

# Allow mouse to select which pane to use
set -g mouse-select-pane on

# 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"

# Scroll History
set -g history-limit 30000

# Set ability to capture on start and restore on exit window data when running an application
setw -g alternate-screen on

# Lower escape timing from 500ms to 50ms for quicker response to scroll-buffer access.
set -s escape-time 50

http://brainscraps.wikia.com/wiki/Extreme_Multitasking_with_tmux_and_PuTTY から引用

60  John L. Jegutanis  2012-10-24


誰かが(私が失ったソースから)、~.tmux.confに次のように追加することを提案しました

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

どのように動作するのか、何をするのか見当もつきませんが、これでtmuxのコピーモードに入らなくても、tmuxセッション内でマウスホイールを使ってスクロールできるようになりました。私は terminal.app を使っていますが、OP は特に gnome-terminal で使うための答えを与えたと記憶しています

16  Jed Daniels  2011-06-22


すでに tmux セッションに入っている場合は、コマンドを実行することができます

set mouse on

注意: コマンドを実行するには、:の後にプレフィックスを使用してください

7  Robert  2019-04-23


tmux 2.1に新しいマウスバインドが導入されました

今日、ちょうど今書いたばかりです。Vimは生のマウスホイールのコードを解釈できるので、Vimにいないときはシームレスにマウスホイールと矢印をバインドしています(マウスが上に乗っているかどうかでスクロールするVimウィンドウを選択するなどの目的で)

これは、最終的には複数の man ページを表示するためだけにマウスを使うことができることを意味し、他にも矢印キーを受け入れるものは何でもあります。必要に応じて if ロジックを拡張したり連鎖させたりして、アプリケーションのためのより多くのロジックを実装することができます

bind -n WheelUpPane if "[[ #{pane_current_command} =~ vim ]]" "select-pane -t = ; send-keys -M" "select-pane -t = ; send-keys Up"
bind -n WheelDownPane if "[[ #{pane_current_command} =~ vim ]]" "select-pane -t = ; send-keys -M" "select-pane -t = ; send-keys Down"

この新しいホイールバインディング機能により、マウスホイールをスクリプト化して、好きなようにコンテキストに応じた動作をさせることができます

6  Steven Lu  2015-12-15


Gnome-terminal は、”通常の “スクロールが制限された状態で、マウスのスクロールイベントを上矢印キーと下矢印キーに変換する巧妙な仕掛けをしています。例えば、less を使ってテキストを表示しているとき (これは特に人を読んでいるときに起こります)、j, k, および矢印キーを使って内容をスクロールすることができます。しかし、gnome-terminalでは、前述のトリックのおかげで、マウススクロールでもそれができるようになりました

つまり、tmuxlessと同じように端末の「キャプチャ」を行い、gnome-terminalと同じメカニズムが働くのだと思います: マウスのスクロールは上下矢印キーの押下に変換されます

プロフィール設定でこの機能をオフにして、どんな状況でも通常のスクロールを取得することができます。スクロール」タブの最後のチェックボックスのチェックを外すだけです。the checkbox

3  ulidtko  2010-12-07


GitHub - NHDaly/tmux-better-mouse-mode: A tmux plugin to better manage and configure the mouse.
A tmux plugin to better manage and configure the mouse. - NHDaly/tmux-better-mouse-mode

新しいtmux用の設定可能で機能豊富なマウスコントロールの実装

使いたくなる可能性が高いです

set -g @emulate-scroll-for-no-mouse-alternate-buffer "on"

も一緒に

1  Steven Lu  2018-01-02


他の回答から、かなり満足のいくスクロール動作を得るためにバインディングのアイデアを組み合わせることができます: vimでは、ターミナルで自動的にコピーモードに変更し、あなたが底に到達したときにそれを終了しますが、まだあなたがman、lessと journalctlであなたのマウスホイールを使用することができます

My code:

bind -n WheelUpPane if -t = "test $(echo #{pane_current_command} |grep -e 'man' -e 'less' -e 'journalctl')" "select-pane -t = ; send-keys Up Up Up Up"  "if-shell -F -t = '#{?mouse_any_flag,1,#{pane_in_mode}}' 'send-keys -M' 'select-pane -t = ; copy-mode -e; send-keys -M'"
bind -n WheelDownPane if -t = "test $(echo #{pane_current_command} |grep -e 'man' -e 'less' -e 'journalctl')" "select-pane -t = ; send-keys Down Down Down Down"  "if-shell -F -t = '#{?mouse_any_flag,1,#{pane_in_mode}}' 'send-keys -M' 'select-pane -t = ; copy-mode -e; send-keys -M'"

grep -e ‘man’ の部分で、スクロールに矢印キーを必要とする他のコマンドを追加することができます

送りキーを複数回追加したので、マウスホイールの1ティックで一度に4行スクロールします

0  stealz  2018-02-12


他のどの回答も、それ自体が私にとっては完全に機能していませんでした。私はset -g mouse onを使ってマウスオプションを有効にし、Shift + Mouse Wheelを使ってターミナルをスクロールしなければなりませんでした

0  Zoso  2020-03-22


タイトルとURLをコピーしました