tmux では、tmux を使わずにシェルを実行した場合(Gnome Terminal)と同じようにマウススクロールが動作しません。tmuxは上下キーを押したときのようにマウスのスクロールイベントを送っているようです。しかし、シェルの出力履歴をスクロールさせたいのです。tmuxをこのように動作させる方法はありますか?
注:私はキーボードでスクロールする方法を知っています(別の質問ここのおかげで)
2つのバージョンのtmuxでマウススクロールを試してみました
- 0.8-5hardy1 (Ubuntu 8.04 (Hardy Heron)上)
- 1.3-1 (Ubuntu 10.10 (Maverick Meerkat)上)
288 user31494 2010-11-12
出力の履歴をスクロールするには ^b
+ [
を使います。本当の PgUp と PgDown が使えるかどうかはわかりませんが。私の端末はこれらのキーを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
では、前述のトリックのおかげで、マウススクロールでもそれができるようになりました
つまり、tmux
はless
と同じように端末の「キャプチャ」を行い、gnome-terminal
と同じメカニズムが働くのだと思います: マウスのスクロールは上下矢印キーの押下に変換されます
プロフィール設定でこの機能をオフにして、どんな状況でも通常のスクロールを取得することができます。スクロール」タブの最後のチェックボックスのチェックを外すだけです。
3 ulidtko 2010-12-07
新しい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