回答:
以下のためにX11ベースのシステム(。つまり、Linuxの他のほとんどのUNIXライクなシステム)互いに独立した2つのクリップボードがあります。
^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を使用している場合、を使用すると、選択時のコピーの動作を取得できます
:set guioptions+=a
。
これはしかし、X11システム(PRIMARYにコピー)にデフォルトで有効になっていない MS WindowsとOSX(任意のテキストを選択すると、あなたのクリップボードをオーバーライドします)に。
+clipboard
?Vimでは、+clipboard
これらのいずれかが機能するために機能フラグが必要です。あなたはVimが使用してこれを持っているかどうかを確認することができます:echo has('clipboard')
(出力がある場合はVimの中から0
、それはだ、ではない、それはだ場合、現在1
それは、)、または出力チェック
vim --version
のために+clipboard
。
ほとんどのLinuxディストリビューションには、デフォルトでは「最小」のVimビルドが付属していますが、これはありませんが+clipboard
、通常はインストールできます。
vim-gtk
またはvim-gnome
。vim-X11
、vimx
代わりに実行しますvim
(詳細)。gvim
(これも+clipboard
通常vim
どおり有効になります)。、、またはを使用してxclip
、テキストをクリップボードにコピーすることもできます。ソリューションについては、次の質問を参照してください。xcopy
xsel
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はクリップボードのサポートを刷新しました。組み込みインターフェイスを除去し、等の外部ユーティリティを呼び出すシステムで置換したxclip
、xsel
または
pbcopy
/ pbpaste
。
これらのユーティリティを自動的に選択して使用する必要があります。OS X上pbcopy
とpbpaste
、デフォルトで利用可能であるべき、Linux上であなたはおそらく、インストールするxclip
ことが(実際にそこにある最も広く利用できるように、2つ
のバージョンxsel
との互換性のないフラグは。これは本当に愚かです)。
:help clipboard
Neovim も参照してください。
"<Space>
を取得するために押す必要がある場合があります"
。そのため、それらの場合は、押す"<Space>+y
か"<Space>*y
コピーする必要があります。
"
多くの名前付きレジスタを選択できることでした。"+
魔法ではなく、ただの登録+
です。例えばだから、あなたは同時に3つのことをコピーして、それらのそれぞれを一つずつ貼り付けたい場合は、次のことができ"1y
、"2y
そして"3y
、後で"1p
、"2p
と"3p
。これは非常に強力で、他のほとんどのエディターには存在しません。別の興味深い使用法は、保存されたマクロを見ることです。たとえば、あなたが記録している場合qq
、しかし、あなたはそれを修正する必要が実現し、次のことができます。一時ラインで"qp
、それを修正し、"qd
。
他の回答では、バッファからシステムクリップボードにテキストをコピーする方法について説明します。別の一般的な操作は、テキストを別のレジスタからクリップボードにコピーすることです。たとえば、既にテキストを"
(デフォルトのレジスター)にヤンクしている場合、そのレジスターをクリップボードにロードできます。
これを行うには:let
:
let @+=@"
—デフォルトのレジスタをクリップボードにコピーしますlet @*=@"
—デフォルトのレジスタをX11プライマリ選択(「マウスクリップボード」)にコピーしますlet @+=@a
—レジスタa
からクリップボードにコピーしますこれは一般的にレジスタに対して機能することに注意してください:let @a=@b
register b
をregisterにコピーしますa
。
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')
:version
Vim内で使用して、含まれる機能のリストに+ X11が表示されるかどうかを確認できます。また、「unnamedplus」機能が使用可能かどうかを確認できます。Linuxを使用し :if has('unnamedplus')⏎ echo 'yes'⏎ endif
ていない場合は、unnamedplusではなくunnamedplusを使用する必要があります。
他のすべての答えは、レジスタに関するすべての重要な事項を網羅しています。使用するものをもう1つ追加します。
Vimには、視覚的に選択されたテキストをクリップボードに直接コピーする方法があります。これをvimrcファイルに入れるだけです:
set guioptions+=a
そして、これにより、視覚的にテキストを選択するたびに、クリップボードにコピーされます。詳細については、:help guioptions
ところで、これはgVim専用です。
guioptions+=a
Carpetsmokerの回答にも記載されています。
グローバルコマンドを使用して、クリップボードに特定のパターンを配置することもできます。ファイルに情報が散らばっていて、手動で対処するとエラーや疲れが生じやすい状況で役立ちます。
最初に、情報を受け取るレジスタをきれいにします
:let @a=""
次に、パターンを含むすべての行をコピーします
:g/pattern/yank A
最後に、情報をシステムクリップボードに転送(コピー)します
:let @+=@a
「パターン」を含むすべての行をクリップボードに直接コピーしようとすると、クリップボードには新しいコンテンツを追加する機能がないため機能しません。したがって、ここでは通常のvimレジスタを使用して、一度にパターンを作成し、クリップボードに配置します。
OBS:レジスタを使用する前に傾斜させる必要があります。レジスタの大文字バージョンを使用すると、コンテンツを追加できます。そうしないと機能しません。
どうして+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
から上に押すと、コマンドが自動補完されます。また、ビジュアルモードを使用する必要もありません。任意の範囲を設定できます。