Vimからシステムクリップボードにテキストをコピーするにはどうすればよいですか?


284

テキストのブロックをシステムのクリップボードにコピーする方法はありますか?別のプログラムに貼り付けることができますか?


12
これは既にSOで質問され回答されています。 より多くの異なる情報を見つけることができます。
bsmith89

1
私はこのプラグインをmacvim christoomey / vim-system-copyで使用していますが、本当に気に入っています。それは動きcpipに本当にうまくいきます、cpi{
フィリペ

2
本当に必要なのはEasyClipです。それはちょうどそれとそんなに多くを行います...
スコットウェイド

回答:


322

以下のためにX11ベースのシステム(。つまり、Linuxの他のほとんどのUNIXライクなシステム)互いに独立した2つのクリップボードがあります。

  • プライマリ-これはコピーオンセレクトであり、マウスの中央ボタンで貼り付けることができます。
  • CLIPBOARD-これは(通常)^Cでコピーされ、貼り付けられます^V(MS Windowsに似ています)。

OS XおよびWindowsシステムには、クリップボードが1つしかありません。

X11システムの場合、これらのクリップボードを同期するツールも多数あります。したがって、それらが同じように見える場合は、そのうちの1つを実行している可能性があります。

Vimには、これらのクリップボードに対応する2つの特別なレジスタがあります。

  • *PRIMARYを使用します。ニーモニック:S tarはS elect(copy-on- s elect)
  • +CLIPBOARDを使用します。ニーモニック:CTRL PLUS C(共通キーバインド用)

WindowsとOS X上の差がない+*、これらのシステムは、単一のクリップボードを持っているので、両方のレジスタは(あなたが使用しているかは重要ではありません)同じものを参照してください。

これらのレジスタを任意のレジスタとして使用できます。たとえば*yおよびpコマンドでPRIMARYクリップボードを使用します。

  • "*yy
  • "*p

これをより便利なキーバインドとして使用できます。

noremap <Leader>y "*y
noremap <Leader>p "*p
noremap <Leader>Y "+y
noremap <Leader>P "+p

常に手動で参照するのではなく、システムのクリップボードと「自動的に」インターフェースする場合は、clipboard変数を設定できます。

  • unnamed使用するように設定します*(PRIMARY、選択時に)
  • unnamedplus使用するように設定します+(CLIPBOARD、^C

これで、使用yyするだけでVimの名前のないレジスタの代わりにシステムのクリップボードに移動し、システムのクリップボードpを貼り付けます。

また、これらのレジスタに、次のようにレジスタを割り当てることもできますlet

  • :let @+=42
  • :let @*=42

clipboard設定は、(このようなフィルタを除外するなど)いくつかのより多くのオプションがあります。しかし、これらは基本です。:help 'clipboard'完全なストーリーを参照してください;-)

gVim

gVimを使用している場合、を使用すると、選択時のコピーの動作を取得できます :set guioptions+=a
これはしかし、X11システム(PRIMARYにコピー)にデフォルトで有効になっていない MS WindowsとOSX(任意のテキストを選択すると、あなたのクリップボードをオーバーライドします)に。

いや+clipboard

Vimでは、+clipboardこれらのいずれかが機能するために機能フラグが必要です。あなたはVimが使用してこれを持っているかどうかを確認することができます:echo has('clipboard')(出力がある場合はVimの中から0、それはだ、ではない、それはだ場合、現在1それは、)、または出力チェック vim --versionのために+clipboard

ほとんどのLinuxディストリビューションには、デフォルトでは「最小」のVimビルドが付属していますが、これはありませんが+clipboard、通常はインストールできます。

  • DebianおよびUbuntu:インストールvim-gtkまたはvim-gnome
  • Fedora:をインストールしvim-X11vimx代わりに実行しますvim詳細)。
  • Arch Linux:インストールgvim(これも+clipboard通常vimどおり有効になります)。

、、またはを使用してxclip、テキストをクリップボードにコピーすることもできます。ソリューションについては、次の質問を参照してください。xcopyxsel

SSH

SSHを介したX11転送を有効にすると、リモートマシンでクリップボードを使用することもできます。これはxclip、デスクトップのクリップボードにアクセスするために使用できるため、上記のヒントで特に役立ち ます。ssh-ingするマシンのVimにはまだ+clipboard機能が必要です。

これにはForwardX11Trusted設定が必要であり、信頼できるサーバーのみ行う必要があります。これにより、サーバーがX11セッションをほぼ完全に制御できるようになります。

$ ssh -XY myhost

これらの設定を永続化するには(-XY毎回追加する必要はありません)、次のように実行できます~/.ssh/config

# Do **NOT** set this globally; it gives the server complete control over
# your X11 session.
Host myhost
    ForwardX11 yes
    ForwardX11Trusted yes

ネオビム

Neovimはクリップボードのサポートを刷新しました。組み込みインターフェイスを除去し、等の外部ユーティリティを呼び出すシステムで置換したxclipxselまたは pbcopy/ pbpaste

これらのユーティリティを自動的に選択して使用する必要があります。OS X上pbcopypbpaste、デフォルトで利用可能であるべき、Linux上であなたはおそらく、インストールするxclipことが(実際にそこにある最も広く利用できるように、2つ のバージョンxselとの互換性のないフラグは。これは本当に愚かです)。

:help clipboardNeovim も参照してください。


6
ssh -Yは-Xを暗黙指定するため、-Xは省略できます。
15年

一部の国際キーボードでは、"<Space>を取得するために押す必要がある場合があります"。そのため、それらの場合は、押す"<Space>+y"<Space>*yコピーする必要があります。
アーサーF

1
これを学ぶことの非常に興味深い副作用(数年前)は、"多くの名前付きレジスタを選択できることでした。"+魔法ではなく、ただの登録+です。例えばだから、あなたは同時に3つのことをコピーして、それらのそれぞれを一つずつ貼り付けたい場合は、次のことができ"1y"2yそして"3y、後で"1p"2p"3p。これは非常に強力で、他のほとんどのエディターには存在しません。別の興味深い使用法は、保存されたマクロを見ることです。たとえば、あなたが記録している場合qq、しかし、あなたはそれを修正する必要が実現し、次のことができます。一時ラインで"qp、それを修正し、"qd
シャーバズ

1
ご注意:OS Xには2つのクリップボードがあります。1つはCmd-CとCmd-Vを使用してアクセスし、もう1つはemacsキーバインドCtrl-KとCtrl-Yを使用してアクセスします。
BallpointBen

3
@shahbaz-テキストが削除されるたびに番号付きのものが変更されるので、おそらくそのような目的でレターレジスタを使用する方が良いでしょう。
evilsoup

18

他の回答では、バッファからシステムクリップボードにテキストをコピーする方法について説明します。別の一般的な操作は、テキストを別のレジスタからクリップボードにコピーすることです。たとえば、既にテキストを"(デフォルトのレジスター)にヤンクしている場合、そのレジスターをクリップボードにロードできます。

これを行うには:let

  • let @+=@" —デフォルトのレジスタをクリップボードにコピーします
  • let @*=@" —デフォルトのレジスタをX11プライマリ選択(「マウスクリップボード」)にコピーします
  • let @+=@a—レジスタaからクリップボードにコピーします

これは一般的にレジスタに対して機能することに注意してください:let @a=@bregister bをregisterにコピーしますa


17

http://vim.wikia.com/wiki/Accessing_the_system_clipboardから

set clipboard=unnamedplus

これにより、デフォルトのVimレジスタ+がシステムクリップボードにリンクされているレジスタに変更されます。から:h clipboard-unnamedplus

                                        clipboard-unnamedplus
unnamedplus     A variant of the "unnamed" flag which uses the
                clipboard register '+' (quoteplus) instead of
                register '*' for all yank, delete, change and put
                operations which would normally go to the unnamed
                register.  When "unnamed" is also included to the
                option, yank operations (but not delete, change or
                put) will additionally copy the text into register
                '*'.
                Only available with the +X11 feature.
                Availability can be checked with: 
                        if has('unnamedplus')

vimインスタンス間でヤンク&ペースト(それぞれが別のターミネーターターミナルにある)を行うと、なぜこれが機能しないのですか?
thinwybk

Linuxを使用していて、Vimが+ X11機能でコンパイルされており、clipboard = unnamedplusが設定されている場合、vimの1つのインスタンスで行をヤンクし、vimの別のインスタンスに貼り付けることができます。また、Ctrl + VまたはShift + Insertを使用して、他のアプリケーションに貼り付けることもできます。:versionVim内で使用して、含まれる機能のリストに+ X11が表示されるかどうかを確認できます。また、「unnamedplus」機能が使用可能かどうかを確認できます。Linuxを使用し :if has('unnamedplus')⏎ echo 'yes'⏎ endif ていない場合は、unnamedplusではなくunnamedplusを使用する必要があります。
クインシーバウアーズ

10

それをサポートするビルドでは、指定されたレジスタ*はシステムクリップボードです。Vimからシステムクリップボードにテキストを"*yコピーするには、ビジュアルモードを使用してテキストを選択し、を押してシステムクリップボードにコピーします。

逆に、"*pシステムクリップボードからVimにテキストを貼り付けるために使用します。


5

Gvimを使用して、これを以下に追加することをお勧めします.vimrc

source $VIMRUNTIME/mswin.vim
behave mswin

これはのためのサポートを有効にしCtrlCCtrlXCtrlVWindowsのメモ帳のように。

これCtrlSにより:wCtrlAfor など、他の一般的なWindowsショートカットも追加されることに注意してください。


0

ご使用のvimがサポートしていない場合、Linux、Mac、Windows、tmux、screenなど+clipboardfakeclipプラグインを使用できます...


0

他のすべての答えは、レジスタに関するすべての重要な事項を網羅しています。使用するものをもう1つ追加します。

Vimには、視覚的に選択されたテキストをクリップボードに直接コピーする方法があります。これをvimrcファイルに入れるだけです:

set guioptions+=a

そして、これにより、視覚的にテキストを選択するたびに、クリップボードにコピーされます。詳細については、:help guioptions

ところで、これはgVim専用です。


2
guioptions+=aCarpetsmokerの回答にも記載されています。
ムル

@muruええ、ごめんなさい。私は前にそれを見ませんでした。見たばかりです。
ドゥルガスワループ16

0

グローバルコマンドを使用して、クリップボードに特定のパターンを配置することもできます。ファイルに情報が散らばっていて、手動で対処するとエラーや疲れが生じやすい状況で役立ちます。

最初に、情報を受け取るレジスタをきれいにします

:let @a=""

次に、パターンを含むすべての行をコピーします

:g/pattern/yank A

最後に、情報をシステムクリップボードに転送(コピー)します

:let @+=@a

「パターン」を含むすべての行をクリップボードに直接コピーしようとすると、クリップボードには新しいコンテンツを追加する機能がないため機能しません。したがって、ここでは通常のvimレジスタを使用して、一度にパターンを作成し、クリップボードに配置します。

OBS:レジスタを使用する前に傾斜させる必要があります。レジスタの大文字バージョンを使用すると、コンテンツを追加できます。そうしないと機能しません。


0

どうして+clipboard仕事に着くか分からないなら、どうしてか分からないけど、これができる。

ファイルのセクションのみをコピーしたい場合、shift+ を実行vしてビジュアルモードにし、コピーする行のみを強調表示します。その後、私はこれを行います。

# Linux Wayland
:'<,'>w !wl-copy

# Linux Xorg
:'<,'>w !xclip -selection clipboard

説明

  • '<,'> -視覚モードを使用して範囲を選択したことを意味します(これは入力しないでください)
  • w !{cmd}-の範囲をstdinに書き込みcmdます。詳細は:help w_c
  • wl-copyそして、xclipテキストをパイプすることができるプログラムであり、システムのクリップボードに追加します

また、これが履歴に記録されると、すべてを再度入力する必要がなくなります。ビジュアルモードで選択し、入力してwから上に押すと、コマンドが自動補完されます。また、ビジュアルモードを使用する必要もありません。任意の範囲を設定できます。

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