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


39

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

これは可能ですか?


tmuxでViキーバインドを有効にするにはどうすればよいですか?
ロメイン

あなたの〜/ .tmux.confに「セット・ウィンドウ・オプション-gモードキーのvi」を追加
SrećkoToroman

1
ビジュアルブロックモードを使用するというあなたの質問には答えが得られていないようです。独自のソリューションを見つけましたか?
dmonopoly

いいえ、まだ解決策はありません。
SrećkoToroman

実際、解決策があります。
SrećkoToroman

回答:


46

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

私はあなたのプレフィックスキーがCaであると仮定しています:

  • Caの意味:Ctrl+を押すA
  • Ca [意味:Ctrl+ Aを押してから[

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

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

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

そうしないと、新しい「Cv」バインディングは機能しません。

注:.tmux.confバージョン間で機能するシングルを使用するには、この質問を参照してください。


1
どうもありがとうございます。tmux.confに重点が置かれています-回答を編集して、最初にbind-key -t vi-copy 'Cv'四角形トグルを含めることができます。
SrećkoToroman

元の質問は、「mode-keys vi」で動作する長方形の選択を取得する方法を尋ねます。この質問に答えるためにキーを再バインドする必要はありません。他の回答をご覧ください。選択モードからの「v」と「スペース」だけです。
Lqueryvg

これは、jkhlが機能しないという事実以外に機能します。矢印キーを使用して移動する必要がありますが、これを変更する方法はありますか?
最大

違いは何であるsendとはsend-keys。私が見るにsuperuser.com/questions/196060/selecting-text-in-tmux-copy-mode send-key使用されています。また、引用符は重要ですか?
user2442366

15

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


2
それはまさに私が使用しているものです。しかし、それには上で説明した問題があります。長方形は常に全幅です。VIMのような長方形(x1、y1)-(x2、y2)が必要です:)
SrećkoToroman

1
@SrećkoToroman全幅とはどういう意味ですか?
gitaarik

9

Larsが指摘しているように、v実際には、長方形モードと全行選択モードを切り替えることで、求めていることを実行します。 spaceおよびenterは、それぞれ新しい選択を開始してコピーするために使用されます。プレフィックスを使用してコピーモードに入り、次に[コピーした選択を任意のtmuxウィンドウに貼り付けます。]

tmuxのvようにvim でも機能しspaceて選択を開始するので、これも私を混乱させました。

:list-keys -t vi-copytmuxで発行すると、コピーモードでコマンドの完全なテーブルが表示されます。

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ウィンドウがある場合、最初の分割でのみ長方形を選択するにはどうすればよいですか?この場合、複数行の長方形は常に完全なTmuxペインをラップします。Vimブロックの選択とは異なります。私はtmux 1.5を使用していますが、バージョンによって異なる場合がありますか?
SrećkoToroman

ええ、ここで、vはbegin-selectionにマップされます。四角形の切り替えは未定義です。だから私はあなたの両方が正しいと思う、私はちょうど私のクライアントを更新する必要がありますか?
スレッコトロマン

分割されたvimウィンドウを単一のtmuxペインで開いている場合、vimのヤンクアンドペースト機能を使用できませんか?一方、2つのtmuxペインがあり、それぞれに独自のvimウィンドウがある場合、tmux select / copyはペインの端で折り返すことができるはずです。私はtmux 1.7を使用してい
ます

6

他の答えはどれも問題の最適な解決策を与えないので、私は壊死を超えていません。

ブロック選択を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)行選択を開始します。選択のタイプに関係なく、ytmuxペーストバッファー(またはXクリップボード。上記のコードコメントを参照)にヤンクします。

Vimと同じ。


私のために働いて、あなたのネコマンシーに賛成票を投じてください👏👏👏– mahemoff 18
1

2

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

私はこれを機能させることができなかったため、これは不可能だと当初思っていましたが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.conftmuxを再起動することで)このバインディングを削除すると、動作し始めましたが、vimとはまったく異なるため、依然としてかなり混乱しています。

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

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

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

:tmuxの中であなたは2つの文字を入力する必要がその中でそれはvimのとは全く違うSpacev、矩形選択モードに入るために。vimでは、入力するだけCtrl-Vです。

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

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


「v」を押すと、行を選択できます。スペースは必要ありません。
アミールH.サドギ

1
@ AmirH.Sadoughi、これは(あなたの答えに従って)デフォルトを変更し、「v」をバインドして「space」ではなく選択を開始したためです。空の.tmux.confで開始すると、説明した動作が正しいことがわかります。「スペース」を押して選択を開始する必要があります。
Lqueryvg

1
修正してくれてありがとう。あなたの最後の文(行選択について)に対処するために、私は私の設定で、cvスペースでブロック選択を行うことができ、vで行選択を行うことができると言っていました「行を選択できます。
アミールH.サドギ

行単位の選択が最近(Shift-v2015年3月リリース2.0で)Tmuxに追加されたのは、確かに私の回答の後であり、元の回答のずっと後だったため、信じられないほどです。おそらく、あなたと私は、行ごとの選択について話すとき、2つの異なることについて話しているのでしょう。VIMの3つの選択モード(とvShift-vおよびCtrl-v)と比較してください。
Lqueryvg

あなたは正しい、私はちょうどそれをテストしました。私のv選択はキャラクターごとです。バージョン1.9aを使用していますが、vimのような行単位の選択はありません。それで、バージョン2.0では、vimが持っている正確な3つのモードがtmuxでも可能ですよね?
アミールH.サドギ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.