1つのtmuxペインから別のペインにテキストをコピー(vimを使用)


133

vimで2つのファイルを開き、それぞれ1つのtmuxペインで開きます。あるファイルから別のファイルに10行をコピーしたいとします。

マウスのCopy-> を使用せずにこれを達成するにはどうすればよいPasteですか?


2
tmuxを使用することもできますが、一般に簡単な方法があります。両方のVimインスタンスは同じ(ローカル?)マシンにありますか?通常、私はちょうどそれのために一時ファイルを使用します(つまり、視覚的に行を選択し、:w /tmp/linesし、:r /tmp/lines他のインスタンスで)。または、Vimがシステムクリップボードと通信する方法を知っている場合は、+またはを使用し*て一時ファイルを回避できます。
クリスジョンセン

回答:


193

tmuxショートカットを使用する必要があります。tmuxコマンドのショートカットがデフォルトであると仮定すると:Ctrl+ b、その後:

  1. Ctrl+ b[copy(?)モードに入ります。

  2. テキストの先頭/末尾に移動して強調表示します。

  3. Ctrlspace

    テキストの強調表示を開始します(Arch Linuxの場合)。OSXや他のLinuxのソースからtmuxをコンパイルすると、Space通常はそれだけで機能します。選択したテキストの色が変わるため、コマンドが機能したかどうかがわかります。

  4. コピーするテキストの反対側に移動します。

  5. Alt+ w選択したテキストをtmuxクリップボードにコピーします。(MacではEsc+を使用しますw。)

  6. カーソルを反対側のtmuxペイン、またはまったく異なるtmuxウィンドウに移動します。コピーしたテキストを貼り付ける場所にカーソルを置きます。

  7. Ctrl+ b]tmuxクリップボードからコピーしたテキストを貼り付けます。

tmuxは、コマンドをカスタムキーボードショートカットにマッピングするのに非常に優れています。

参照してくださいCtrl+ b?セットのキーボードショートカットの完全なリストについて。


4
ありがとう。単なるサイドノード:Alt + wはMacでは機能しませんでした。AltはデフォルトでEscにマップされていました。したがって、Esc + wです。
カラン

11
screenショートカットを使用する場合:(Ctrl + A [コピーモードに入る)、Space(強調表示を開始する)、Enter(強調表示を終了する)、Ctrl + A ](貼り付け)。
jfs

11
「enter」が機能するのに対し、alt + wは機能しないことに注意してください。
イライジャ・リン

3
awhan.wordpress.com/2010/06/20/copy-paste-in-tmuxに記載されているように、viキーバインディングがある場合は、ステップ5をEnterキーに置き換える必要があります。
英熊

3
コピーしてテキストエディターに貼り付ける必要がある場合はどうなりますか?何らかの理由で、テキストを選択した後に「Enter」を押した後でも、選択したテキストをピックアップしないようです。
17

34

残念ながら、Alex Leachの回答にまだコメントを追加できないので、ここにMac OS Xユーザー向けの補遺を含めます。

  1. Enter 選択したテキストをコピーします

1
ありがとう!私はUbuntu Xenialで、すべてのデフォルト設定でbyobu/ tmuxを使用していますが、これは機能しましたが、Alt + wは機能しませんでした。
アンドレアゾンカ

1
これは、tmux 2.0を搭載したOS X Yosemiteでは機能せず、alt + wもesc + wも機能しません。(
weberc2

Zoc端末を使用するWindowsでも動作します。
jdhao

15

macOSでvimとtmuxを使用している場合(macOS 10.12.2、tmux 2.3でテスト済み):

(tmuxのプレフィックスキーの組み合わせはであると仮定しますprefix。デフォルトでは、プレフィックスはctrl+ bです。)

  • コピー:
    1. prefix+ [を押してコピーモードに入ります。
    2. 矢印キーを使用して、テキスト選択の開始/終了に移動します。
    3. ctrl+を押しspaceます(プレフィックスとしてctrl+ spaceを設定している場合は、代わりにctrl+ space+ spaceを押します)
    4. 矢印キーを使用して、選択の反対側に移動します。
    5. ctrl+を押しwます。
  • ペースト:
    1. 挿入モードでprefix+ ]を押します。

8

ZOCターミナル sshクライアントを使用して、Windowsマシン上のCentOSサーバーに接続しています。ここに私のために働くものがあります:

  • コピーモードに入る:<prefix>+[
  • コピーを開始: <Space>
  • テキストをコピー: <Enter>
  • テキストの貼り付け:<prefix>+]

2

通常のyとpの代わりに、「* yと "* p」を使用してシステムクリップボードを使用できます。


1
システムクリップボードを使用するには、"+2yy2行をX11クリップボードにコピーします– X11クリップボードに"+dd行をカットします– X11クリップボードを"+p貼り付けます
Patryk

これらのコマンドを使用する前に何か入力する必要がありますか?
トーマスエール

2ys(Y)に続いて、プラス(+)が続く@ThomasAhle ..その文字通り二重引用符( ")なしでは、あなたが通常モードであることを確認します。あなたが通常モードである場合は、あなたが使用することができるはずh,j,k,lへまた、ubuntu VMで「+」レジスタが消える場合もありますが、理由は不明です。+レジスタがあること:regを確認するには"+、最初の列に文字列が入力されているかどうかを確認します
alpha_989

はい、これです、これが答えです。他の提案(tmuxのコピー/貼り付けを使用)よりもはるかに単純であり、これは行番号を混乱させません。あなたは、標準の再マッピングた場合、これはすべての問題を引き起こすyp"+y"+p
ライアン

1

vim開いている場合は、vim copy pasteを使用してテキストをコピーすることをお勧めします。

Tmuxのコピーペーストは機能しますが、いくつかの欠点があります。

まず、複数行のテキストをコピーする場合、複数行を選択する必要があります。Tmuxコピーペーストは、通常、vim行番号があるか、vimガターにマークがある(相対番号/絶対番号など)ことを理解しません。その結果、それらもコピーされます。

次に、テキストに特定の言語固有の書式設定があり、tmuxを使用してvimに直接貼り付けてコピーしようとすると、書式設定が台無しになることがわかりました。これはを使用して回避できますset paste!。ただし、これにはさらに多くの作業が必要です。

使用する"+yコピーすると、"+p貼り付けます

Vim"+yまたはを使用して、vimバッファーとシステムクリップボードの間で貼り付けをコピーする方法をネイティブで提供します"*y。次に"+pまたはを使用して貼り付け"*pます。これにより、Vimに関係のないガターまたはその他のランダムマークの相対番号のコピーを回避できます。


0

tmuxショートカットシーケンスが少し長く、覚えにくいので、vimを使用するためのいくつかのオプション

上記の回答のように、とを使用"+y"*yてコピーしてから"+p"*pそれぞれ貼り付けることができます。vimがデフォルトでクリップボードを使用するようにしたい場合は、y/pそのまま直接使用できます。

set clipboard=unamed "sets the default copy register to be *
set clipboard=unamedplus "sets the default copy register to be +

クリップボードコマンドのソース:https : //vi.stackexchange.com/questions/84/how-can-i-copy-text-to-the-system-clipboard-from-vim

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.