私はtmuxをviキーで使用しています。テキストの1行を選択している場合、またはウィンドウが1つしかない場合は、コピー/貼り付けで問題なく動作します。テキストのブロック(複数行ですが全幅ではない)を選択したい場合、問題が発生します。複数のvimウィンドウを開いている場合、すべてのvimウィンドウからテキストが選択されます。必要なのは、1つのウィンドウからのみテキストを選択することです。つまり、vimでの視覚的な選択と同じです。
これは可能ですか?
.tmux.confファイルに入力する必要のあるバインディングについて、この投稿の下部を必ず確認してください。
私はあなたのプレフィックスキーがC-aだと仮定しています:
Tmuxで(1,1)から(2,2)までのテキストの長方形選択を行うには:
space 長方形の選択に必要です。
通常のように行を選択するには、コピーモードに切り替えてvを押し、jkhlキーで選択してyを押します。
私の.tmux.confには次のバインディングがあります。
setw -g mode-keys vi
bind-key -t vi-copy 'v' begin-selection # Begin selection in copy mode.
bind-key -t vi-copy 'C-v' rectangle-toggle # Begin selection in copy mode.
bind-key -t vi-copy 'y' copy-selection # Yank selection in copy mode.
バージョン2.4 の後:
setw -g mode-keys vi
bind-key -T copy-mode-vi 'v' send -X begin-selection # Begin selection in copy mode.
bind-key -T copy-mode-vi 'C-v' send -X rectangle-toggle # Begin selection in copy mode.
bind-key -T copy-mode-vi 'y' send -X copy-selection # Yank selection in copy mode.
デフォルトの四角形トグルバインディングをバインド解除することが重要です。
unbind-key -t vi-copy v # Prior to version 2.4
unbind-key -T copy-mode-vi v
そうでない場合、新しい「C-v」バインディングは機能しません。
注:単一の.tmux.conf
これはバージョン間で機能します。 この質問 を参照してください。
Viと同じようにビジュアルブロックを選択できます。選択を開始する前にv
と入力します。マンページでは、これは「長方形トグル」と呼ばれます。
Larsが指摘するように、v
は実際には、長方形モードと全行選択モードを切り替えることで、求めていることを実行します。 space
とenter
は、それぞれ新しい選択を開始してコピーするために使用されます。接頭辞に[
を付けてコピーモードに入り、]
を使用してコピーした選択内容をtmuxウィンドウに貼り付けます
選択を開始するためにv
がtmuxで行うようにspace
がvimで機能するため、これも混乱しました。
Tmuxで:list-keys -t vi-copy
を発行すると、コピーモードのコマンドの完全な表が表示されます。
bind-key -t vi-copy C-b page-up
bind-key -t vi-copy C-c cancel
bind-key -t vi-copy C-e scroll-down
bind-key -t vi-copy C-f page-down
bind-key -t vi-copy C-h cursor-left
bind-key -t vi-copy Enter copy-selection
bind-key -t vi-copy C-y scroll-up
bind-key -t vi-copy Escape clear-selection
bind-key -t vi-copy Space begin-selection
bind-key -t vi-copy $ end-of-line
bind-key -t vi-copy , jump-reverse
bind-key -t vi-copy / search-forward
bind-key -t vi-copy 0 start-of-line
bind-key -t vi-copy 1 start-number-prefix
bind-key -t vi-copy 2 start-number-prefix
bind-key -t vi-copy 3 start-number-prefix
bind-key -t vi-copy 4 start-number-prefix
bind-key -t vi-copy 5 start-number-prefix
bind-key -t vi-copy 6 start-number-prefix
bind-key -t vi-copy 7 start-number-prefix
bind-key -t vi-copy 8 start-number-prefix
bind-key -t vi-copy 9 start-number-prefix
bind-key -t vi-copy : goto-line
bind-key -t vi-copy ; jump-again
bind-key -t vi-copy ? search-backward
bind-key -t vi-copy B previous-space
bind-key -t vi-copy D copy-end-of-line
bind-key -t vi-copy E next-space-end
bind-key -t vi-copy F jump-backward
bind-key -t vi-copy G history-bottom
bind-key -t vi-copy H top-line
bind-key -t vi-copy J scroll-down
bind-key -t vi-copy K scroll-up
bind-key -t vi-copy L bottom-line
bind-key -t vi-copy M middle-line
bind-key -t vi-copy N search-reverse
bind-key -t vi-copy T jump-to-backward
bind-key -t vi-copy W next-space
bind-key -t vi-copy ^ back-to-indentation
bind-key -t vi-copy b previous-Word
bind-key -t vi-copy e next-Word-end
bind-key -t vi-copy f jump-forward
bind-key -t vi-copy g history-top
bind-key -t vi-copy h cursor-left
bind-key -t vi-copy j cursor-down
bind-key -t vi-copy k cursor-up
bind-key -t vi-copy l cursor-right
bind-key -t vi-copy n search-again
bind-key -t vi-copy q cancel
bind-key -t vi-copy t jump-to-forward
bind-key -t vi-copy v rectangle-toggle
bind-key -t vi-copy w next-Word
bind-key -t vi-copy BSpace cursor-left
bind-key -t vi-copy NPage page-down
bind-key -t vi-copy PPage page-up
bind-key -t vi-copy Up cursor-up
bind-key -t vi-copy Down cursor-down
bind-key -t vi-copy Left cursor-left
bind-key -t vi-copy Right cursor-right
bind-key -t vi-copy C-Up scroll-up
bind-key -t vi-copy C-Down scroll-down
他の答えはどれも問題の最適な解決策を提供しないため、私はネクロマンシーを超えていません。
スペースを押さなくても、Vimと同じようにブロック選択を機能させる方法があります。シンプルなCtrl-Vで、筋肉の記憶に染み込みます。
.tmux.confを編集する必要があります(ただし、viモードを使用すると既に編集できます)。それがtmux <2.4で機能するかどうかはわかりません。
これを.tmux.confに追加して、Vimの選択とヤンクバインディングを複製します。
# set vi-mode
set-window-option -g mode-keys vi
# keybindings
bind-key -T copy-mode-vi v send-keys -X begin-selection
bind-key -T copy-mode-vi C-v send-keys -X rectangle-toggle \; send -X begin-selection
bind-key -T copy-mode-vi y send-keys -X copy-selection-and-cancel
# comment the preceding line and uncomment the following to yank to X clipboard
# bind-key -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "xclip -in -selection clipboard"
選択モードに入り、選択を開始する場所に移動します。現在、v
は通常の(文字ごと、行ごとの)選択を開始し、<C-v>
はブロック選択を開始し、V
(shift-v)は行選択を開始します。選択のタイプに関係なく、y
はtmuxペーストバッファ(またはXクリップボード。上記のコードコメントを参照)にヤンクします。
Vimと同じです。
編集:ソースコードを確認した後、私は自分の答えを完全に書き直しました。
これを機能させることができなかったため、これは不可能だと当初は思っていましたが、v
が正しいキーであることについての他の答えは正しいですが、これを使用する方法は明らかではありません。 vimに使用されます。
また、v
をbegin-selection
にバインドしていたので、私にとってはうまくいきませんでした。キャラクターの選択を開始するためのvimの方法を模倣するには、このアイデアを他の場所から盲目的にコピーしたに違いないと思います。それを知らないと、ブロック選択でさらに問題が発生します。
$ tmux -V
tmux 1.9a
$ tmux list-keys -t vi-copy | grep " v "
bind-key -t vi-copy v begin-selection # suppressed my block selection mode
(.tmux.conf
の行をコメント化してtmuxを再起動することにより)このバインディングを削除すると、動作し始めましたが、vimとまったく同じではないため、依然として混乱しています。
デフォルトのバインディングでは、次のように機能します。
setw -g mode-keys vi
で.tmux.conf
を使用してtmuxを展開していることを確認してください。C-a [
と入力して、コピーモードを開始しますv
Space
と入力して、選択を開始しますv
を押すと、選択を文字単位の選択に戻すか、またはその逆に切り替えることができます。v
を押す前にSpace
を入力する必要はありません。最初にSpace
で文字単位の選択を開始し、その後v
を押して長方形選択モードに切り替えることができます。
Tmuxでは、長方形選択モードに入るにはSpace
とv
の2つの文字を入力する必要があるという点でvimとは大きく異なります。 vimではCtrl-V
と入力するだけです。
また、vimではv
はブロックではなく文字単位の選択を開始します。
悲しいことに、tmuxには行単位の選択モードがないようです(vimではShift-v
)。
編集:Tmuxバージョン2.0はShift-v
で行単位の選択モードを提供しているようです(ただし、まだ試していません!)