web-dev-qa-db-ja.com

tmuxコピーモード-テキストブロックを選択

私はtmuxをviキーで使用しています。テキストの1行を選択している場合、またはウィンドウが1つしかない場合は、コピー/貼り付けで問題なく動作します。テキストのブロック(複数行ですが全幅ではない)を選択したい場合、問題が発生します。複数のvimウィンドウを開いている場合、すべてのvimウィンドウからテキストが選択されます。必要なのは、1つのウィンドウからのみテキストを選択することです。つまり、vimでの視覚的な選択と同じです。

これは可能ですか?

41
Srećko Toroman

.tmux.confファイルに入力する必要のあるバインディングについて、この投稿の下部を必ず確認してください。

私はあなたのプレフィックスキーがC-aだと仮定しています:

  • C-aの意味:押す CtrlA
  • C-a [意味:押す CtrlA 次に押します [

Tmuxで(1,1)から(2,2)までのテキストの長方形選択を行うには:

  • コピーモードに移動します:C-a [
  • 行の中央を移動する
  • C-vを押す
  • プレススペース
  • Jkhlで選択を移動
  • 選択に満足したら、Enterキーを押します(confファイルにバインディングがある場合はyキーを押します)。
  • 次の方法で最新のコピーバッファを貼り付けることができます:C-a]

 space 長方形の選択に必要です。

通常のように行を選択するには、コピーモードに切り替えてvを押し、jkhlキーで選択してyを押します。

私の.tmux.confには次のバインディングがあります。

バージョン2.4(2017年4月20日)より前

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これはバージョン間で機能します。 この質問 を参照してください。

48

Viと同じようにビジュアルブロックを選択できます。選択を開始する前にvと入力します。マンページでは、これは「長方形トグル」と呼ばれます。

15
Lars Kotthoff

Larsが指摘するように、vは実際には、長方形モードと全行選択モードを切り替えることで、求めていることを実行します。 spaceenterは、それぞれ新しい選択を開始してコピーするために使用されます。接頭辞に[を付けてコピーモードに入り、]を使用してコピーした選択内容を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
9
here

他の答えはどれも問題の最適な解決策を提供しないため、私はネクロマンシーを超えていません。

スペースを押さなくても、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と同じです。

7
andrejr

編集:ソースコードを確認した後、私は自分の答えを完全に書き直しました。

これを機能させることができなかったため、これは不可能だと当初は思っていましたが、vが正しいキーであることについての他の答えは正しいですが、これを使用する方法は明らかではありません。 vimに使用されます。

また、vbegin-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とまったく同じではないため、依然として混乱しています。

デフォルトのバインディングでは、次のように機能します。

  1. setw -g mode-keys vi.tmux.confを使用してtmuxを展開していることを確認してください。
  2. C-a [と入力して、コピーモードを開始します
  3. 選択を開始する場所にカーソルを移動します
  4. タイプv
  5. Spaceと入力して、選択を開始します
  6. カーソルを移動すると、長方形の選択が表示されます
  7. もう一度vを押すと、選択を文字単位の選択に戻すか、またはその逆に切り替えることができます。

vを押す前にSpaceを入力する必要はありません。最初にSpaceで文字単位の選択を開始し、その後vを押して長方形選択モードに切り替えることができます。

Tmuxでは、長方形選択モードに入るにはSpacevの2つの文字を入力する必要があるという点でvimとは大きく異なります。 vimではCtrl-Vと入力するだけです。

また、vimではvはブロックではなく文字単位の選択を開始します。

悲しいことに、tmuxには行単位の選択モードがないようです(vimではShift-v)。
編集:Tmuxバージョン2.0はShift-vで行単位の選択モードを提供しているようです(ただし、まだ試していません!)

2
Lqueryvg