tmuxでマウスを使用してシェル出力をスクロールする


256

マウスのスクロールは、tmuxで(Gnomeターミナルで)tmuxなしでシェルを実行したときのようにtmuxで機能しません。tmuxは、上/下キーを押したかのようにマウススクロールイベントを送信するようです。しかし、シェルの出力履歴をスクロールしてほしい。tmuxをこのように動作させる方法はありますか?

注:キーボードでスクロールする方法を知っています(ここで別の質問に感謝します)。

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


1
bukzorの答えは、tmux 1.5以降の問題を解決すると思います。
キナン

回答:


252

出力の履歴内をスクロールするには、^b+ [ を使用します。M+ Vを使用してページを上に移動し、^ Vを使用してページを下に移動できます。あなたが本物PgUpを使用できるかどうかはわかりませんPgDownが。私の端末はこれらのキーをtmuxに送信しません。代わりに、tmuxの履歴ではなく、それ自体をスクロールします。

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

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

setw -g mouse on

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

コピーモードに変更すると、マウスを使用してスクロールできるようになりました。必要に応じて、このコマンドを〜/ .tmux.confに配置して、tmuxを実行するたびにロードされるようにすることができます。

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


1
既に実行中のtmuxサーバーがある場合は、構成ファイルを再ロードする必要があることに注意してください。blog.sanctum.geek.nz/reloading-tmux-config tmux source-file〜/ .tmux.conf
アランニエンフイス

7
OS X上で私のために働いていない
アイン

2
@Ain-現在、OS Xには11のメジャーバージョンがあります。正確に言うと、どのバージョンですか。
ラムハウンド

10
tmux> = 2.1については、@ DannyReの答えを参照してください(現在はかなり遠い)。
joelostblom

3
set -g mouse on2.1 tmuxのMacOSの上で私のために働いた
ミゲル・モタ

123

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

  • マウスモードが書き直されました。次のオプションはなくなりました。

    • マウスのサイズ変更ペイン
    • マウス選択ペイン
    • マウス選択ウィンドウ
    • モードマウス

    代わりに、マウスサポートを完全にオンにする「マウス」というオプションが1つあります。

それは

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

6
おかげで、ペインの選択などは機能しますが、スクロールは機能しません。スクロールを再び機能させるには、これを使用します:github.com/NHDaly/tmux-scroll-copy-mode
Mahdi

1
素晴らしい-これはcygwinでも動作します-WINDOWS 7のtmux
GWD

@Mahdiこれはosxでは動作しないようです。ヒントはありますか?
DiTTiD

2
bindtmuxは2.3にもはや必要ではないようです
セロンのLuhn

2
+1 set -g mouse on。前のコメントは正しいです。バインドは不要になりました。
aku

63

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

それはあなたが本当に望む行動です!シェルの代替バッファーをスクロールするだけでなく、コピーモードを有効にするマウススクロール。それがついに、スクリーンからtmuxに切り替えるインセンティブになりました。Shift + PgUpでも同じ動作をさせるオプションはありますか?
キナン

1
@kynan:私は個人的にそれをするために押すだけC-A PgUpです。でページアップキーを直接バインドできますtmux bind-key -n PPage copy-mode -u。ローカル端末からバインドを解除すると、同様のthignがshift + pageupで機能するはずです。
ブクゾール

1
これにより、コマンドラインに戻るとCLIに余分な文字が挿入されるという奇妙な動作が発生し、通常、最初のコマンドの形式が正しくありません。かなり面倒です。
クリスR

ただし、これはマウスでスクロールをトリガーするには正常に機能しますが、ミドルクリックで貼り付けるテキストを選択すると奇妙な動作を引き起こすことに注意してください。トレードオフが受け入れられなかったため、Cb pg-up / down(デフォルト)を優先することになりました。
h7r

@ChrisR私もこれをかなり受けており、一貫性がありません。それは[M [M#[M [M#[M [M#[M [M#[M string of type?
イライジャ・リン

53

あなたの.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から取得


escape-time設定のための+1
Dakusan

不思議な人のために、.tmux.confファイルはホームディレクトリに配置されています。
user2647513

15

誰か(私が失くしたソースから)は、以下を追加することを提案しました~.tmux.conf

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

どのように動作するのか、何をするのかはわかりませんが、これにより、tmuxのコピーモードに入ることなく、tmuxセッション内でマウスホイールを使ってスクロールできるようになりました。ホイールとBAMをスクロールするだけです!できます。terminal.appを使用していることに注意してください。ただし、OPで使用するためにOPが特に答えを与えたことを覚えていますgnome-terminal


1
ジェッド、ありがとう!あなたのアドバイスはgnome-terminalでも機能します。しばらくの間、このセットアップを使用してみます。しかし、これには欠点があります。マウススクロールがで期待どおりに機能しなくなりましたlessless内部にロードするとtmux、マウススクロールはで開かれたファイルをスクロールしませんless。端末全体をスクロールします。奇妙なことに、セットアップではvim内部tmuxで期待どおりに動作します。
user31494

2
tmux 1.5 setw -g mode-mouse onでは、これはマウスホイールを使用してコピーモードのスクロールバックを行うオプションに取って代わられることに注意してください。
kynan

3
説明は、このオプションが端末の代替画面のスクロールロックを無効にすることです。これは、代替画面バッファ(vi、less、tmuxなど)を要求するアプリケーションが独自のスクロール機能を提供するため、ほとんどの場合に望ましいです。tmuxでこのロックを無効にすると、端末の代替画面バッファーをスクロールできますが、これはごく一部の場合を除いて目的の結果になりません。代替画面の説明からの引用については、この回答を参照してくださいman xterm
kynan

残念ながら、これはiTermでは機能しません。
スアン

私はITERM 2でこれに肯定的な結果を持っていた
キース・スマイリー

5

tmux 2.1では、新しいマウスバインドが導入されています。

今日、これらのバインドを作成しました。Vimは未加工のマウスホイールコードを解釈できるため(マウスが上にあるものに応じてスクロールするVimウィンドウを選択するなどの目的で)、Vim以外でマウスホイールを矢印にシームレスにバインドします。

これは、複数のマニュアルページと矢印キーを受け入れる他のものを表示するためだけにマウスを最終的に使用できることを意味します。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"

この新しいホイールバインド機能を使用すると、マウスホイールのスクリプトを作成して、必要に応じて状況依存の動作を実行できます。


私は今、ペイン境界上のマウスホイールに何か面白いことをさせるというアイデアをいじっているだけです。おそらく、境界線上にホイールをマップするのではなく、ステータスライン上でtmuxウィンドウを循環させるようにマップします。
スティーブンルー

Githubへのリンクは何ですか?あなたの努力に遅れないようにしたいです!私が探しているもう1つの機能は、Tmuxの外部で行うように、ダブルクリックして単語をXクリップボードにコピーすることです。
-joeytwiddle

@joeytwiddle私は非常にお勧めgithub.com/NHDaly/tmux-better-mouse-modeを、私の他の回答を参照
スティーブン・呂

3

Gnome-terminalは、「通常の」スクロールが制限されている状態で、マウススクロールイベントを上下の矢印キーに変換する巧妙なトリックを実行します。あなたが使用して、いくつかのテキストを表示する場合たとえば、less(あなたが男を読んでいるとき、これは特に起こる)、あなたが使用してコンテンツをスクロールすることができjkおよび矢印キーを。しかし、また、を使用gnome-terminalすると、前述のトリックのおかげで、マウススクロールでそれを行うことができます。

したがってtmux、端末の「キャプチャ」は、次のように行わlessれます。gnome-terminalキックの同じメカニズム:マウスのスクロールは、上/下矢印キーの押下に変換されます。

プロファイル設定でこの機能をオフにして、どんな状況でも通常のスクロールを取得できます。[スクロール]タブの最後のチェックボックスをオフにしますチェックボックス


説明ありがとう、uldtko!しかし、マウスのスクロールの問題には役立ちません。はい。オプションをオフにgnome-terminalすると、トリプルの送信^[[A^[[Bマウススクロールが停止します。それはでよりよいですtmux(なし醜い^[[A^[[A^[[Aいくつかのプログラムでは、無醜いコマンド履歴スクロール)が、今lessマウスのスクロールにスクロールを停止します。
user31494

1
ウクライナ人?(iキャラクターによる推測)
-dotancohen

1

https://github.com/NHDaly/tmux-better-mouse-mode

新しいtmuxのマウスコントロールの構成可能な機能豊富な実装。強くお勧めします。

おそらく使いたい

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

それも。


これをインストールしましたが、マウスでテキストを強調表示およびコピーできなくなりました。これはできますか?
ジョナサン・キング

はい、競合する他のマウス関連のtmux構成が存在する可能性があります。
スティーブンルー

0

他の回答のバインディングアイデアを組み合わせて、かなり満足のいくスクロール動作を得ることができます。ターミナルで自動的にコピーモードへのvimの変更を行い、最下部に到達すると終了しますが、マウスホイールをman、less、およびjournalctlで使用できます。

私のコード:

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

すでにtmuxセッションにいる場合は、コマンドを実行できます

set mouse on

注意:コマンドを実行するには、プレフィックスを使用してからを使用します:

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.