私はviキーでtmuxを使用していますが、1行のテキストを選択している場合、またはウィンドウが1つしかない場合、コピー/貼り付けは正常に機能します。テキストのブロック(複数行、ただし全幅ではない)を選択したい場合、問題が発生します。複数のvimウィンドウを開いている場合、すべてのvimウィンドウからテキストを選択します。1つのウィンドウからのみテキストを選択する必要があります。つまり、vimでの視覚的な選択と同じです。
これは可能ですか?
私はviキーでtmuxを使用していますが、1行のテキストを選択している場合、またはウィンドウが1つしかない場合、コピー/貼り付けは正常に機能します。テキストのブロック(複数行、ただし全幅ではない)を選択したい場合、問題が発生します。複数のvimウィンドウを開いている場合、すべてのvimウィンドウからテキストを選択します。1つのウィンドウからのみテキストを選択する必要があります。つまり、vimでの視覚的な選択と同じです。
これは可能ですか?
回答:
.tmux.confファイルに入れる必要があるバインディングについては、この投稿の下部を確認してください。
私はあなたのプレフィックスキーがCaであると仮定しています:
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
そうしないと、新しい「Cv」バインディングは機能しません。
注:.tmux.conf
バージョン間で機能するシングルを使用するには、この質問を参照してください。
send
とはsend-keys
。私が見るにsuperuser.com/questions/196060/selecting-text-in-tmux-copy-mode send-key
使用されています。また、引用符は重要ですか?
viと同じようにビジュアルブロックを選択できますv
。選択を開始する前に入力します。マンページでは、これは「長方形トグル」と呼ばれます。
Larsが指摘しているように、v
実際には、長方形モードと全行選択モードを切り替えることで、求めていることを実行します。 space
およびenter
は、それぞれ新しい選択を開始してコピーするために使用されます。プレフィックスを使用してコピーモードに入り、次に[
コピーした選択を任意のtmuxウィンドウに貼り付けます。]
tmuxのv
ようにvim でも機能しspace
て選択を開始するので、これも私を混乱させました。
:list-keys -t vi-copy
tmuxで発行すると、コピーモードでコマンドの完全なテーブルが表示されます。
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
。C-a [
してコピーモードを開始しますv
Space
して選択を開始しますv
もう一度押すと、選択を文字単位の選択に戻すか、その逆に切り替えることができます。v
を押す前にを入力する必要はありませんSpace
。Space
最初に文字単位の選択を開始し、v
その後でを押して、長方形選択モードに切り替えます。
:tmuxの中であなたは2つの文字を入力する必要がその中でそれはvimのとは全く違うSpace
とv
、矩形選択モードに入るために。vimでは、入力するだけCtrl-V
です。
また、vim v
では、ブロックではなく文字単位の選択を開始します。
悲しいことに、tmux(Shift-v
vim)には行ごとの選択モードはないようです。
編集:Tmuxバージョン2.0には、行単位の選択モードが用意されているようですShift-v
(まだ試していません!)
Shift-v
2015年3月リリース2.0で)Tmuxに追加されたのは、確かに私の回答の後であり、元の回答のずっと後だったため、信じられないほどです。おそらく、あなたと私は、行ごとの選択について話すとき、2つの異なることについて話しているのでしょう。VIMの3つの選択モード(とv
、Shift-v
およびCtrl-v
)と比較してください。
v
選択はキャラクターごとです。バージョン1.9aを使用していますが、vimのような行単位の選択はありません。それで、バージョン2.0では、vimが持っている正確な3つのモードがtmuxでも可能ですよね?