tmuxで,ひとまずviモードでの話しかしませんが,プレフィックスキー入力からの C-[
でコピーモードに入った場合,Space
で範囲選択を開始し,Enter
で選択範囲をコピーすることが出来るのはよく知られていることだと思います.
tmux使ったことない人は何のことか分からないかもしれませんが,これが出来ると,ターミナル上に表示されている出力を,マウスを触ること無く,コピーしてペーストすることが可能です.詳しいことはtmuxの紹介記事などを参考にしてみて下さい.
※ちなみにこの機能は死ぬほど便利なので全てのターミナル(黒い画面)ユーザは今すぐtmuxを使うべきです.似たソフトにscreenというのもあります.screenをキレイに使うためのbyobuというのもあります.どれでもいいですがtmuxがナウなヤング向けです.
※もしかしたらこういうことが出来るターミナルエミュレータソフトもあるのかもしれません.そういうのを使ってる人は気にしないで下さい.VimやEmacsでなんとか出来るぜ!という人もいるかもしれません.そういう人も気にしないで下さい.
さてそのコピーモードで私が長年不満に感じていたことが,コピーを終えるとコピーモードが終了してしまい,カーソルも普通のプロンプトの場所まで戻ってしまうことでした.遠いところまでスクロールした後や,検索機能でやっと見つけた場所で,複数ヶ所のコピーをしなければならないとき,コピーモードでのカーソルの移動をコピーの度に行わなければなりませんでした.
出来るものなら,範囲選択をしてコピーをしても,コピーモードが終了せず,カーソルがそのままの位置にいてくれればいいのに…と思っていました.
それ,-x
オプションで出来ます.
tmuxの設定ファイルであるところの ~/.tmux.conf
に例えば以下の行を加えます.
bind-key -t vi-copy y copy-selection -x
追記: tmux 2.4からこの設定の仕方ではダメで以下のようにする必要があります
bind-key -Tcopy-mode-vi y send -X copy-selection
そもそも従来の copy-selection
が copy-selection-and-cancel
という名前に変更されており,copy-selection
だけで(-x
オプションとかなしで)望みの挙動が実現されています.
参考
追記おわり
こうしておいて,普段 Enter
でコピーをしていた代わりに,y
を入力します.そうすると,tmuxのバッファにはコピーした情報が入りますがコピーモードは終わらずカーソル位置もそのままです.精神の健康を保ったまま,次の場所のコピーが出来ます.
※もちろん,コピーした内容を都度別のウィンドウなりペインなりで開いているテキストエディタなどにペーストしていく動作は忘れないようにして下さい.ただ,もしかしたらこういう不便も解消する,Vimのレジスタみたいな,名前付きのバッファ機能があったりするかもしれません.何か知ってる方居ましたら教えて頂けると幸いです.
※追記です.プレフィックスキーからの #
で,コピーした履歴が見られます.なので,コピーした都度ペーストして回らなくてもなんとかなるっぽいですね.
参考
- https://twitter.com/kariya_mitsuru/status/803986146896117760
- https://twitter.com/kariya_mitsuru/status/803987120561917952
y
以外に割り当てたい人は,見たまんま,... vi-copy y copy-sel...
と書かれている部分の y
を好きなキーに変えて下さい.
ちなみにtmuxのバージョンは2.3で私は確認しました(tmux -V
コマンドで確認).もっと古いバージョンでも大丈夫かもしれませんし大丈夫じゃないかもしれません.将来のバージョンでは大丈夫じゃないかもしれません.
あと,これだけドヤ顔して書いておいて,「実はデフォルトのキーバインドで出来るよ」ってのがあれば,むしろ教えて下さい.助かります.
References
- tmux での1行コピー または man tmux に載っていないコマンド - @m4i's blog
-
man tmux
してselection-copy
で検索してると出てくる-x
オプションの説明
検索用キーワード
tmux コピー コピーモード 終わらせない 継続