端末の中で仮想端末を管理するtmux(GNU screenの代替)について(コピペとバッファに関する操作・バッファ数上限と後方スクロール行数の変更)
「端末の中で仮想端末を管理するtmux(GNU screenの代替)について(概要・実行・操作)」に続く内容として、ここではtmuxにおけるコピペ/後方スクロールについてを扱う。
コピーモード
既定の割り当てではPrefix-[(既定のPrefixキーはCtrl+b)を押すことにより、内部コマンドcopy-modeが実行され、端末の出力をさかのぼって任意の領域を選択し、これをtmux内部の記憶領域にコピー(記憶)することができ、その後コピーモードを抜けた後でこれを貼り付けることができる。さかのぼれる行数には上限があるが、変更は可能(後述)。
操作
この機能自体はGNU screenと同じ*1で、コピーモードに入った後の操作も- コピーモード中でテキストのコピー(記憶)をせずに抜けるにはq
- 記憶した文字列を貼り付けるにはPrefix-]
となり、これもGNU screenと同様だが、コピーモード内の移動や記憶の操作についてはEmacsモード(既定)とviモードが存在する。
Emacsモードでは選択範囲の端でCtrl+SPACEを押し、反対の端に移動後Ctrl+wもしくはMeta(Alt)+wでその間の文字列(色が付く)をコピー(記憶)してコピーモードを抜ける。Ctrl+SPACEを押した後の選択はCtrl+gで解除できる。
キー移動(Emacsモード)については
- 1行上:Ctrl+p
- 1行下:Ctrl+n
- 1文字右:Ctrl+f
- 1文字左:Ctrl+b
- 行頭:Ctrl+a
- 行末:Ctrl+e
- 1画面上:Meta(Alt)+v
- 1画面下:Ctrl+v
となるが、設定ファイルに以下の設定を記述するとコピー操作も含めてvi風の操作*2にできる。
[一部]ファイル名: ~/.tmux.conf
## コピーモードでvi風の操作にしたい場合(既定値はemacs)
set-window-option -g mode-keys vi
複数のバッファを管理する
コピペ操作でGNU screenと大きく異なるのは、クリップボードマネージャのように複数個のテキストを記憶できること。既定のバッファは0番で、繰り返しコピー操作を行うことで、どんどんバッファは増えていく。上限(後述)に達すると古いものが消える。
(0番のバッファを入力/貼り付け・「-b 0」は省略可で「Prefix - ]」に割り当て済み) $ tmux paste-buffer (1番のバッファを入力/貼り付け) $ tmux paste-buffer -b 1 (バッファ一覧を表示) $ tmux list-buffer (2番のバッファの内容を表示) $ tmux show-buffer -b 2 (1番のバッファを消す) $ tmux delete-buffer -b 1 (2番のバッファをファイルに書き出す) $ tmux save-buffer -b 2 [出力ファイルの場所] (ファイルの内容を1番のバッファに記憶) $ tmux load-buffer -b 1 [入力ファイルの場所] (2番のバッファを新しい内容で書き換える) $ tmux show-buffer -b 2 [新しい文字列] (2番のバッファを0番にコピー) $ tmux copy-buffer -a 2 -b 0 [新しい文字列]
これらの操作における注意点は、存在しないバッファには書き込めないこと。
もちろん、これらのコマンドは設定ファイルでキーに割り当てられる他、プロンプト*3に「list-buffer」のように内部コマンド部分のみを入力する形で実行することもできる。
:list-buffer
この場合、出力の表示を抜けるにはqを押す。
バッファ上限数と後方にさかのぼれる行数の指定
上限のバッファ数は設定項目「buffer-limit」により指定可能。下は32にする設定例。
[一部]ファイル名: ~/.tmux.conf
## バッファ上限数(既定値は9で0番-8番)
set-option -g buffer-limit 32
後方にさかのぼれる行数は同様に「history-limit」で指定可能。
下は4096行にする設定例だが、既定値の2000行でも十分多いような気がするので、不足に感じる場合にのみ増やすのが良さそう。
[一部]ファイル名: ~/.tmux.conf
## 後方スクロール行数(既定値は2000)
set-option -g history-limit 4096
使用したバージョン:
- tmux 1.1
*1:tmuxでは、GNU screenと異なり、どこまでさかのぼれるかと現在位置(上に何行スクロールしたか)が右上に表示される
*2:具体的な操作はここでは扱わない・manページには書かれている
*3:内部コマンド名はcommand-prompt・既定ではPrefix-: