Tmuxのスクロール問題を解決!上方向へ素早く移動するための実践ガイド
Tmux(名称はTerminal MUltipleXerに由来)は、LinuxディストリビューションやmacOSなどUnix系OS向けに提供されている、最も優れたオープンソースのターミナルマルチプレクサの一つです。Tmuxを使えば、1つのウィンドウ内で複数のターミナルセッションに同時にアクセスでき、複数のコマンドラインスクリプトやプログラムを並行して実行する際に非常に便利です。
しかし、複数のウィンドウが同時に動作するという特性上、一部のユーザーにとってはターミナルウィンドウを上へスクロールするのが難しく感じられることがあります。キーボードでもマウスでも思いどおりに操作できないケースがあり、Unix系OSの種類の多さも相まって、この問題はさらに複雑になっています。
ご安心ください。以下で紹介する方法を使えば、Tmuxでも簡単にスクロールアップできるようになります。
Tmuxのスクロールモードを有効化して使う
次の手順で、Tmuxの画面を上下にスクロールできます。
- Ctrl + B を押した後、[ キーを押します。
これでTmuxのスクロールモードが有効になります。 - 続いて、上下矢印キーやPage Up、Page Downなど、通常のナビゲーションキーを使ってTmuxの画面を移動します。
スクロールが終わったら、Qキーを押せばスクロールモードを終了できます。うまく動作しない場合は、F7キーでスクロールモードに入り、「q」で抜ける方法も試してみてください。
コピーモードを有効化して使う
- Ctrl + B を押した後、PgUp キーを押します。
- ターミナルがTmux内で1ページ分まとめて上に移動します。これで要件を満たせるか確認してみてください。
VIモードを使う
Tmuxがアタッチされたクライアントによって制御されている状態は、Tmuxにおける「VIモード」と呼ばれます。VIモードでは、Shift + K と Shift + J キーでTmuxの画面を1行ずつ移動できます(スクロールモード中の場合)。スクロールモード外でこれらのキーを押しても、カーソルが動くだけなので注意してください。また、C-B(Ctrl+B)を2回押すと1ページ上へ、C-F(Ctrl+F)で1ページ下へスクロールすることもできます。
tmux.confファイルを編集する
上級ユーザーの中には、上記の方法では物足りないと感じる方もいるでしょう。その場合は、tmux.confファイルの編集で問題を解決できる可能性があります。ターミナルで vim ~/.tmux.conf を実行すれば、設定ファイルを開くことができます。
マウススクロールを有効にする
- Tmuxのバージョンに応じて、設定ファイルに以下の行を追加します。
Tmux 2.1以降の場合 set -g mouse on Tmux 2.1未満の場合 set -g mode-mouse on
- マウスでのスクロールが正常に機能しているか確認します。
なお、その後Qキーを押せばスクロールモードを終了できます。また、ターミナル上の内容をコピーしたい場合は、Shift + 左クリックでコピー操作を行えます。
キーバインドでマウススクロールを有効にする
- 設定ファイルに以下の行を追加します。
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'" - 次に、以下のコマンドを実行してTmuxのプロセスを一旦終了します。
tmux kill-server && tmux
- Tmuxを起動し直し、スクロールが期待どおりに機能しているか確認します。
Tmuxのマウスモード中に項目をコピーする必要がある場合も、同様にShiftキー + 左クリックでコピーできます。
それでも解決しない場合は、tmux.confに以下を追加すると改善するかもしれません。
set -g mouse on
bind -n WheelUpPane {
if -F '#{==:#{window_name},nvim}' {
send-keys -M
} {
copy-mode -e
}
}
デフォルトのXtermスクロールを有効にする
- tmux.confファイルに以下の行を追加します。
# Sane scrolling set -g terminal-overrides 'xterm*:smcup@:rmcup@'
- Tmuxのスクロールが期待どおりかどうか確認します。
それでもうまくいかない場合は、以下をTmuxの設定ファイルに追加すると目的の動作になる可能性があります(追加後、システムの再起動が必要な場合があります)。
# Allow xterm titles in the 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"
ただし、ターミナルタイプをPuTTYに変更している場合、上記のコードは機能しないことがあります。PuTTYを使用する必要がある場合は、代わりにTmuxの設定ファイルに以下を追加してください。
set -g terminal-overrides "putty*:XT:smcup@:rmcup@:kUP5=\eOA:kDN5=\eOB:kLFT5=\eOD:kRIT5=\eOC"
さらにそれでも解決しない場合は、設定ファイルに以下を追加すると問題が解決するか確認してみてください。
set -ga terminal-overrides ',xterm*:smcup@:rmcup@'
macOS Mojave以降の場合
macOS Mojave以降を搭載したMacでは、Option + 上矢印キーで上へ、Option + 下矢印キーで下へスクロールできます。
それでも動作しない場合は、以下のキーを押してコピーモードに入ります。
ctrl + b + [
コピーモード中は、上矢印・下矢印キーで1行ずつスクロールできます。1ページ単位で移動したい場合は、fn + 上矢印またはfn + 下矢印キーを使用します。モードを終了するときは、qキーを押すだけでOKです。
プラグインを試す
上記のいずれの方法でも期待どおりの結果が得られない場合は、Tmux-Better-Mouse-Modeのようなプラグインを導入すると、より快適なマウス操作が実現できるかもしれません。GitHubから無料で入手できますので、ぜひ試してみてください。
まとめ
Tmuxでのスクロール問題は、スクロールモードやコピーモードといった標準機能から、tmux.confの編集、プラグインの導入まで、複数のアプローチで解決できます。まずは基本のショートカットを試し、それでも不十分な場合に設定ファイルのカスタマイズへ進むのがおすすめです。自分の環境(Tmuxのバージョン、使用端末、OS)に合った方法を見つけて、快適なターミナル作業環境を構築しましょう。
著者について
Kevin Arrows(ケビン・アローズ)
ケビン・アローズは、10年以上の業界経験を持つテクノロジースペシャリストです。Microsoft Certified Technology Specialist(MCTS)認定資格を保有し、最新の技術動向を追い続けることに強い情熱を注いでいます。ソフトウェア開発、サイバーセキュリティ、クラウドコンピューティングなど、幅広い技術トピックについて多数の記事を執筆しており、その専門性と知識は同業者からも広く認められています。特に、複雑な技術的概念を明確かつ簡潔に説明する能力には定評があります。
-
Linux Wi-Fiをマスターする:ドライバー トラブルシューティング完全ガイド
Linuxでは、Windowsなどの他のOSでは問題なく動作するWi-Fiアダプターでも、ドライバーの設定に手間取ることがあります。無線ネットワークアダプターが自動的に接続されない、あるいはGUI環境で接続アイコンを何度もクリックしなければならない――そんな経験はありませんか?多くの場合、原因はシステムがドライバーを十分な時間ポーリングしていないことにあります。 まずはお使いのハードウェア向けの最新ドライバーがインストールされているかを確認しましょう。それでも改善しない場合は、syslog(システムログ)を調べて異常な動作がないかチェックします。ドライバーが定期的にリセットを繰り返すケースもあ
-
【解決済み】「stdinは端末ではないため、疑似端末は割り当てられません」エラーの対処法
多くの場合、「疑似端末(pseudo-terminal)は割り当てられません。stdinが端末ではないため」という紛らわしいエラーは、スクリプトからSSHコマンドを実行したときにのみ発生します。同じコマンドをコマンドラインから直接実行すれば、問題なく動作することも少なくありません。作業を始める前に、まず公開鍵がSSHエージェントに登録されているか確認し、その上で再度sshコマンドを実行してみてください。単に鍵が不足していたというケースもよくあります。それでも解決しない場合は、スクリプト側のトラブルシューティングが必要になります。方法1:疑似TTYの強制割り当てと無効化コマンドラインオプションを