tmux での1行コピー または man tmux に載っていないコマンド

screen から tmux に乗り換えて2ヶ月ほど立ちますが、不便なことが4つありました。

  1. copy した文字列を直接ファイルやプログラムに渡せない
  2. 2ストロークの key bind が定義できない
  3. cdd が動かない
  4. copy mode で1行コピーがない

(1), (2) は未だに未解決ですが、
(3) は 「cdd を tmux, bash, multi session +α に対応した」で解決、
今回は先日解決した (4) について書こうと思います。


先日 .tmux.conf を整理しようと man tmux を眺めていたんですが、どこからかコピペしてきた begin-selectioncopy-selection が man に載ってないことに気づきました。どうやら key-table を指定した際に使用可能なコマンドは基本的に載っていないようです。

そこでソースを検索してみたところ、mode-key.c に見たことのないコマンドが大量あり、copy-line といういかにもそれっぽいコマンドを見つけました。

例えば、

bind-key -t vi-copy Y copy-line

で vim や screen と同じように Y で1行コピーが出来るようになります。(tmux 1.5 以上)


最後に tmux 1.6 の mode-key.c からコマンド一覧を以下に抜粋しておきます。
それぞれの使い方についてはまとまった説明は見つけられなかったので、名前から推測するか、検索するか、ソースを読むのが良いと思います。

key-bind -t vi-edit/emacs-edit で使えるコマンド

backspace cancel complete cursor-left
cursor-right delete delete-line delete-end-of-line
delete-word end-of-line enter history-down
history-up next-space next-space-end next-word
next-word-end paste previous-space previous-word
start-of-line switch-mode switch-mode-append transpose-chars

key-bind -t vi-choice/emacs-choice で使えるコマンド

cancel choose down page-down
page-up scroll-down scroll-up up

key-bind -t vi-copy/emacs-copy で使えるコマンド

back-to-indentation bottom-line cancel clear-selection
copy-line copy-end-of-line copy-selection cursor-down
end-of-line goto-line history-bottom history-top
jump-forward jump-again jump-reverse jump-backward
jump-to-forward jump-to-backward cursor-left rectangle-toggle
middle-line page-down next-space next-space-end
next-word next-word-end page-up previous-space
previous-word cursor-right scroll-down scroll-up
search-again search-forward search-reverse search-backward
select-line start-number-prefix start-of-line begin-selection
top-line cursor-up