システムのクリップボードからvimを貼り付ける(そしてコピーする)方法は?


770

他のエディターとは異なり、vimはコピーしたテキストを独自のクリップボードに保存します。そのため、Webページからテキストをコピーして現在の作業ファイルに貼り付けるのは非常に困難です。たまたま、geditを開くか、手動で入力する必要があります。

システムのクリップボードとの間でvimペーストを作成できますか?



7
「+ y貼り付け」+ pをコピーします。以前にレジストリを指定したことを除いて、ヤンクアンドペーストと同じように機能します。
Banjocat、2015年

2
以下のコマンドを使用するには、 sudo apt-get install vim-gnomeシステムのクリップボードを使用する組み込みのvimにその機能を追加することを確認してください
Harnirvair Singh

2
ここで読者の多くのセットの場合@Harnirvairは、vim-gnome私が疑われるのに対し、おそらくやり過ぎか、単に利用できない彼らのOS /ディストリビューションでありvim-gtk、好ましくはvim-gtk3、まだ、まだX11上のもののために、少なくとも(クリップボードの統合を提供しながら、より多くの可能性が少ないの依存関係を存在し、引っ張っています。これがどのようにウェイランドと相互作用するのかはわかりません)。
underscore_d

3
Fedoraのデフォルト- クリップボードアクセスはありません(gvimが必要です)、superuser.com
questions / 194747 /…

回答:


881

レジスタは、システムのクリップボードのためのものです()。システムによっては、異なる動作をする場合があります。たとえば、OSXやWindowsのようなX11を使用しないシステムでは、レジスタはシステムクリップボードの読み取りと書き込みに使用されます。X11システムでは、両方のレジスタを使用できます。詳細については、を参照してください。ただし、これは基本的にX11のPRIMARY選択(通常はマウスで選択したものをコピーし、マウスの中央ボタンで貼り付けます)に類似しており、X11のCLIPBOARD選択(クリップボード固有)に類似しています。"*"+:help registers"*:help x11-selection"*"+

問題がすべて解決した場合は、"*yyまたは"+yyを使用して、システムのクリップボードに行をコピーしてください。適切なコンパイルオプションがあると仮定すると、どちらかが機能するはずです。これをあなたにとってもっと便利なものに再マッピングしたいと思うかもしれません。たとえばvnoremap <C-c> "*y、〜/ .vimrcを配置して、視覚的に選択してCtrl+ cを押すと、システムのクリップボードに移動できます。

コピー/システムのクリップボードから貼り付けることに注意して作業をしませんならば:echo has('clipboard')、この場合、vimのには0を返します。がコンパイルされていない+clipboard機能、あなたは別のバージョンをインストールするか、それを再コンパイルする必要があります。一部のLinuxディストリビューションは、デフォルトで最小限のvimインストールを提供しますが、通常vim-gtkまたはvim-gtk3パッケージインストールすると、追加機能を入手できます。

'clipboard'説明されているオプションを確認することもできます:help cb。この場合、あなたはできる:set clipboard=unnamed:set clipboard=unnamedplusの操作が自動的にシステムのクリップボードにコピー/削除すべてのヤンクを作ります。これは、何かを上書きするため、クリップボードに何かを保存している場合に不便になることがあります。

貼り付けるには、"+pまたは"*p(システムや目的の選択に応じて)またはこれらを別のものにマップできます。明示的に入力しますが、挿入モードになっていることがよくあります。挿入モードの場合でも、<C-r><C-p>*またはを使用して、適切なインデントでそれらを貼り付けることができます<C-r><C-p>+。を参照してください:help i_CTRL-R_CTRL-P

vimのpasteオプション(:help paste)についても言及する価値があります。これにより、vimが他のいくつかのオプションを無効にする特別な「貼り付けモード」になり、ターミナルエミュレーターまたはマルチプレクサーの使い慣れた貼り付けショートカットを使用して、vimに簡単に貼り付けることができます。入力:set pasteして有効にし、コンテンツを貼り付けてから入力:set nopasteして無効にします。または、pastetoggleオプションを使用して、モードを切り替えるキーコードを設定することもできます(:help pastetoggle)。これらのオプションの代わりにレジスタを使用することをお勧めしますが、それでも怖い場合は、vimチョップを完成させるときに便利な回避策になります。

詳細については:help clipboard、を参照してください。


103
これは非常に有益ですが、システムのクリップボードから貼り付けるために必要なキーストロークを要約できます"*pか?たとえば、何を使っているのですか?Shift-'、Shift-8、pの順に押しますか?
T.ブライアンジョーンズ

10
はい、3つの文字を順番に入力します。vimの多くのコマンドは、1つのキーが押された後、vimがさらにキーを待つ「オペレーター保留モード」と呼ばれるものを利用しています。dd例を挙げましょう。最初dはオペレーター保留モードに入り、次に2番目dはコマンドを終了して行を削除します。あなたが入力した場合dG、しかし、Gそれだけではなく、行を削除するファイルの最後に削除します。レジスターはこの同じプリンシパルを使用して、さまざまなコマンドがレジスターを使用できるようにします。
コナー

4
ああ!今日の前にこの投稿を見たことがあるだけなら!これは、システムクリップボードからのコピーと貼り付けについて知りたいと思っているすべてです。「<Cr> <Cp> *または<Cr> <Cp> +」は純金です。
キースピンソン2014

54
強調点:vim-gtkでコンパイルされたvimを入手するには、パッケージを(少なくともDebianで)インストールする必要があります+xterm_clipboard。これを見つけるのに40分かかりましたsudo apt-get install vim-gtk
Dominykas Mostauskis 14

3
@DominykasMostauskis vim-gnomeも機能し、+xterm_clipboard有効になっています。
Chev

155

gnome-terminalの貼り付けのショートカットでvimにコピーできます。挿入モードでファイルを作成して使用する

Ctrl+ Shift+ v

事前に覚えて

 :set paste 

インデントをいじるのを避けるため。


19
python for loopのような複数の行がある場合、これはインデントを混乱させます
Moj

11
挿入モードの貼り付けトグルを使用します。たとえば、pastetoggle = <F2>を設定します。次に、挿入モードで<F2>を押してから、Pythonコードを挿入します。
Jan Weitz 2014年

うんはCtrl + Shiftキー+ Cでコピーして、オットrファイルに貼り付ける
ネール

1
タブ/空白、EOLなどが(listcharsオプションを介して)可視文字として表示される場合、それらの置換文字は非表示の文字ではなくコピーされます。
user907860

2
簡潔な回答を考えれば、これが選択された回答でなければなりません
Aidin

41

Linux

私のLinuxシステムでは、+および*レジスターはX11選択にマップされ、マウスの中央ボタンで貼り付けることができます。:set clipboard=unnamed:set clipboard=unnamedplusを使用すると、レジスタはクリップボードにマップされ、CTRL-Vで貼り付けることができます。

詳細は構成やシステムに依存しているように見えるため、走行距離は確実に異なります。しかし、それは間違いなくあなたを正しい方向に向けさせるでしょう。

こちらもご覧ください

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


1
*X11プライマリレジスタのみにマップします(通常はマウスで貼り付けられます)。+通常はショートカットによって貼り付けられるX11クリップボードレジスタにマップします。
ZyX

@ZyX私のシステムではありませんが、あなたの走行距離は確かに異なる場合があります。プラットフォームやソフトウェアのバージョン間で一貫したエクスペリエンスを実現したい場合は、必要な動作を明示的に構成するのが最善です。
トッドA.ジェイコブス

クリッパー/グリッパーのようなクリップボードマネージャーがあり、2つのバッファーを同期できることを意味します。これは、という事実は変更されませんvimの用途*プライマリとのために+:クリップボードのためのX11のレジスタは、あなたがvimのソースでこれを見ることができ、これらの値はそこに設定され、決して変更され、clip_starそしてclip_plus常にのために使用されている*+、それぞれのレジスタを。
ZyX

41

私の場合、その構成はコピーと貼り付けに機能します

" copy and paste
vmap <C-c> "+yi
vmap <C-x> "+c
vmap <C-v> c<ESC>"+p
imap <C-v> <ESC>"+pa

何に貼り付けましたか?
StarWind0

このIMHOは、clibboardを名前なしに設定するより良いソリューションです。すべてのx / dd / yなどのアクションでOSクリップボードを台無しにしないでください。Macでは、cmd + c / x / vの組み合わせをマッピングするために、C(ctrl)修飾子をDに変更する方が良いかもしれません。
mindex 2016

34

これは、この目的のためにvimrcに必要な行です。

set clipboard+=unnamed  " use the clipboards of vim and win
set paste               " Paste from a windows or from vim
set go+=a               " Visual selection automatically copied to the clipboard

2
私はあなたの解決策が好きです。より良い説明をお願いします。
zhon

優秀な。レジスターを使用すると、私はいつも躊躇し、考えざるを得なくなります。これははるかに優れています
JonnyRaa

私のvimバージョンには+ clipboardがあり、このオプションは私には機能しません。私はByobuを使用しています(これはTmuxを内部で使用しています)。
GGhe

Fedoraにset clipboard + = unnamedplusを追加する必要がありました
hakunin

29

この質問は、より客観的でグラフィカルな回答に値すると思います。

貼り付けモードに入る

  • ESC
  • :set paste
  • 押す i
  • SHIFT+ Insert(クリップボードにコピーされたテキストを含む)


貼り付けモードを終了

  • ESC
  • :set nopaste
  • 押す i

テキストを貼り付けて、もう一度入力できます。


1
これは機能しました:set nopasteが、何もしません。それは何をすることになっていますか?なぜ必要なのですか?
MarkoAvlijaš18年

1
まあ、実際にはそうです。を実行すると:set nopaste、貼り付けたくないことをエディタに伝えます。そしてを押すiと、編集モードに戻ります:)。
ivanleoncz

2
正直言って、Marko、わかりません。
ivanleoncz 2018

1
SHIFT + Insertでうまくいきました。
Melissa Loos

1
これは私にとって魅力のように働きました。vimに戻るたびに、私はいつもこのように見える必要があります。
benjaminadk

17

クリップボード

この選択を保存するための特別なレジスタがあります。それは「*レジスタです。選択されたテキストに関する情報が変更される場合(たとえば、マウスの左クリックで)」、または別のアプリケーションが選択したテキストを貼り付けます。次に、テキストが「*」レジスタに挿入されます。たとえば、線を切り、それを現在の選択にするか、CLIPBOARDに置きます。

    "*dd

同様に、たとえばマウスの中ボタンをクリックして、別のアプリケーションからの選択を貼り付けたい場合、選択は最初に「*レジスタ」に置かれ、次に他のレジスタと同じように「プット」されます。たとえば、選択を置くには(クリップボードの内容):

    "*p

レジスタ E354

> There are nine types of registers:                      
> 1. The unnamed register ""
> 2. 10 numbered registers "0 to "9
> 3. The small delete register "-
> 4. 26 named registers "a to "z or "A to "Z
> 5. four read-only registers ":, "., "% and "#
> 6. the expression register "=
> 7. The selection and drop registers "*, "+ and "~ 
> 8. The black hole register "_
> 9. Last search pattern register "/

クリップボードから貼り付け

1. Clipboard: Copy
2. Vim insertmode, middle mouse key

端末でX11クリップボードのサポートを確認する

ターミナルでVimを実行したい場合は、クリップボードサポートでコンパイルされたVimのバージョンを探す必要があります。X11クリップボードのサポートを確認し、コンソールから次のように入力します。

% vim --version

「+ xterm_clipboard」が表示されたら、問題ありません。

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

Xサーバーは、次の3つの選択を維持します。

PRIMARY、SECONDARY、CLIPBOARD

PRIMARY選択は、通常、マウスの中ボタンを使用したコピーと貼り付けを実装するために使用されます。SECONDARYおよびCLIPBOARDの選択は、アプリケーションプログラムではあまり使用されません。

http://linux.die.net/man/1/xsel


12

上記の提案を試しましたが、私の環境ではどれも機能しませんでした。(ssh経由のWindows PuTTYクローン)

追加のグーグルがいくつか見つかりました:https : //unix.stackexchange.com/questions/110684/copy-paste-into-sshd-vim-from-local-windows-clipboard

コメントの1つは、SHIFT+INSERTデスクトップのクリップボードからVimのバッファーに貼り付けるためのトリックを使用することを提案しました。Ctrl-CVimからデスクトップのクリップボードにコピーするために既に機能していた。


2
cmderツール[windows 8.1]内のvimに取り組んでいます。cmder設定>キーとマクロ>貼り付けに移動すると、複数行の貼り付けにはshift + insertコマンドが、1行の貼り付けにはctrl + vコマンドが表示されます。
Zubair Alam

1
私にとっては、単純な右クリックが魅力のように機能します!! ちょうど右クリック!
Fr0zenFyr 2014年

2
ターミナルを使用しているため、ssh vimはSSLを介してネイティブシステムのクリップボードにアクセスできません。SHIFT+INSERT端末(またはあなたの場合はPuTTY)の貼り付けオプションなので機能します。ただし、インデントはおそらく間違っています。pasteこれを修正するオプションについては、私の回答の最後の段落を確認してください。
コナー2015年

1
@jinksPadlock。おかげで..ええ..私はマウスを介してコピー/貼り付けすることができます..「キーボードのみ」でそれを行う方法を理解しようとしていました。ウィンドウからVIMへのコピーは、おそらくキーボードのみでPuttyを使用して行われますが、逆方向には行われません。Windowsのbashでは、どちらの方向のATMでもこれを行うことはできません。あなたはadd..maybeために何かを持っている場合は、ここでそれらを追加することができます。..私たちのためにも、右方向との点の人々へのリソースのリストをコンパイルした:stackoverflow.com/questions/45271895/...
alpha_989

1
@ alpha_989 later-better-than-never;)現在、Windows OSを使用していないため、jinksPadlockに追加できません。SHIFT+INSLinuxホストからssh vimまで機能し、マウスの3回目のクリックもできます。
tuk0z

10

+クリップボードを持っていなかったので、xselを使用してこの代替ソリューションを思いつきました:

〜/ .vimrcに追加:

vnoremap <C-C> :w !xsel -b<CR><CR>


1
この素晴らしいアイデアをありがとう!最終的に次のものを使用しました:vnoremap <C-C> :w !xclip -i -sel c<CR><CR>
andy

6

vimのインストールが*および+レジスタをサポートしていない人のための簡単なメモ。クリップボードから貼り付けるために新しいvimインストールをダウンロードする必要はありません。ここに代替方法があります:

1)parcellite(メモリフットプリントの少ないクリップボードマネージャー)をインストールします。

2).vimrcファイルに、以下を追加します。

command Clip r !parcellite -c

3)vimを再起動します。

これで、exコマンドとして:Clipと入力すると、クリップボードの内容がカーソル位置に貼り付けられます。新しいコマンドをファンクションキーにマップして、1回のキーストロークでこれを実行できるようにすることもできます。


4

これは私にとってはうまくいきます:Ctrl+ Shift+V


3
@neelの答えはすでにこれを述べています。これはコメントであり、上手くいきました。
ericbn 2016

3

これに対する最も簡単な解決策は、異なるLinuxマシン間でも機能しsshます。

  1. vimがX-11クリップボードをサポートしているかどうかを確認しますvim --version | grep clipboard。それが報告を返し-clipboard、または(arch linuxのgvim)-xterm_clipboardをインストールする必要がある場合vim-gtkvim-gnome

  2. 次の行をに追加します.vimrc

set clipboard=unnamedplus
set paste
  1. ssh経由で別のマシンにログインする場合は、オプション-Yを使用します。 ssh -Y machine

これで、コピーと貼り付けはy、ヤンクとp貼り付けのみを使用することにより、単一のマシンと異なるマシン間で期待どおりに機能するはずです。注意:.vimrcこの機能を使用するすべてのマシンで変更します。


これが機能するためには、Xサーバーもサーバーで使用できる必要があると思います。うん!vim-gtkによってインストールされる可能性があります。xvfbはXサーバーを実行するための代替オプションになると思います。
Ajeeb.KP 2018

3

2017年半ばにMacbook Proをプライマリ開発環境として実行vimiTerm2ているときにこの問題に遭遇しました。

他の回答が示唆しているように、私は実行vim --versionしたところ、が返されることに気付きました。つまり、私のマシンに同梱されて-clipboardいたバージョンはvim、クリップボードオプションでコンパイルされていません。

homebrewパッケージvimclipboardオプションでコンパイルされているように見えるので、私にとっての修正は次のとおりです:

  1. 走る brew install vim
  2. 追加set clipboard+=unnamed私に~/.vimrcファイル
  3. 閉じて再度開く iTerm2

3

OSクリップボードにコピー

ビジュアルモードでテキストを選択し、を押します "*y

OSクリップボードから貼り付け

押す "*p


2

素晴らしかったコナーの答え、に続いて、しかし、C-R C-p + およびC-R C-p *挿入モードでビット不便です。同上"*pおよび"+pコマンドモードから。

VIMの第一人者は、次のことを提案しC-vて何をC-r C-p +行うかをマッピングしました。

:inoremap <C-v> <C-o>"+p挿入モードのみで持つことができ ます

ブロック単位のビジュアルモードをオーバーライドしたい場合(ビジュアルモードは優れているため、彼に推奨されていません) map <C-v> "+p


2

MAC OSXでvimを使用している場合、残念ながら古いバージョンが付属しており、クリップボードオプションに準拠していません。幸い、自作はこの問題を簡単に解決できます。

vimをインストールします。

brew install vim --with-lua --with-override-system-vim

vimのguiバージョンをインストールします。

brew install macvim --with-lua --with-override-system-vim

端末を再起動して有効にします。


次の行を追加します ~/.vimrc
set clipboard=unnamed

これで、vimで行をコピーしyyてシステム全体に貼り付けることができます。



1

Mac OS X 10.9のTerminal.appでvimを使用している場合は、設定に加えて:set clipboard=unnamedmvim -v取得できるものを使用する必要がありますbrew install macvim。デフォルトのvimはクリップボードオプションをサポートしていません。


1

Vimを使用するOSXでは、マウスでテキストを選択し、Cmd-CでOSXシステムのクリップボードにコピーすることもできます。コピーしたテキストはVimの外部のクリップボードで利用できます。

言い換えれば、OSXはそれを通常のウィンドウのように扱い、これが非常に悪質なAppleの「コマンド」ボタンが役に立つ場所です。

B-30


1
これは、他のOSの半分以上の端末エミュレーターにも当てはまります。アップルはここでは何の利点もありません。
underscore_d

1

@ lis2の回答に基づいて、最後に挿入モードを強制しない単純な構成を使用します。

" Copy and paste
if has('clipboard') && !has('gui_running')
  vnoremap <C-c> "+y
  vnoremap <C-x> "+d
  vnoremap <C-v> "+p
  inoremap <C-v> <C-r><C-o>+
endif

これらすべてがデフォルトのVimマッピングをオーバーライドすることに注意してください。

  • v_CTRL-C:ビジュアルモードを停止
  • v_CTRL-X:数値から[count]を引く
  • v_CTRL-V:ブロックごとのビジュアルモード
  • i_CTRL-V:次の非数字を文字通り挿入します。これもマッピングされます i_CTRL-Q

:別の方法として、一つは「ヤンク」、「削除」と「プット」Vimの動詞にインスピレーションを得たキーを使用することができ<C-y><C-d>かつ<C-p>それぞれ。これらは、1つのデフォルトマッピングのみをオーバーライドします。

  • i_CTRL-P:補完のための後方検索キーワード

1

他の解決策は、vimrcなどを変更したい場合に適しています。しかし vim からシステムキーボードにコピーする簡単な方法が必要でした。これが私が思いついたものです。

  • ビジュアルモードでコピーするテキストを選択します v
  • 押す:(自動的に展開して表示されます:'<,'>
  • 入力するy * か、 y +システムのクリップボードに選択したテキストをヤンクする(ご使用のシステムによって異なります)


1

以来vimの8右クリックし、デフォルトでビジュアルモードを有効にします。これにより、「通常の」コピーと貼り付けができなくなります(これを「設計上の欠陥」https://github.com/vim/vim/issues/1326と呼びます)。次のようにして修正します。

echo "set mouse-=a" >> ~/.vimrc

vimを終了して再起動します。


1

LinuxまたはMacのVim 8以降では、OSのネイティブペースト(ctrl+shift+VLinuxの場合cmd+VはMac)を使用できます。を押しiて挿入モードにしないでください。

OSクリップボードの内容を貼り付け、自動インデントを追加せずにスペースとタブを保持します。それは古いと同等だ:set pasteictrl+shift+Vesc:set nopaste方法。

+clipboardまたは+xterm_clipboardvim機能をインストールする必要はもうありません。この機能は「ブラケットペースト」と呼ばれます。詳細については、vimにテキストを貼り付けるときに自動インデントをオフにするを参照してください。


0

Gnomeと統合されていないDebian vimを使用すると(vim --version | grep clip#はクリップボードのサポートを表示しません)、Shiftキーを押しながらマウスでテキストを選択すると、他の場合と同様にクリップボードにコピーできます他のcursesプログラム。@Connerのコメントからわかったように、Shiftキーを押すとマウスイベントのレポートをオフにするのはターミナル(私の場合はgnome-terminal)です。cursesベースのプログラムは、特定のエスケープシーケンスを端末に送信した後でマウスイベントを受信できると思います。


1
これはvimではなく端末を使用しています。
Conner、2015年

0

Windowsを使用していて、システムクリップボードの内容を貼り付けたい場合は、pこのコマンドを入力します。

:set clipboard = unnamed

これは私の問題を解決しました。


0

これを行うには、2つの簡単な方法があります。ファイルを挿入モードにし、1)マウスの中央ボタン(スクロールホイール)を押すか、2)Ctrl + Shift + V


0

一部の国際キーボードでは、"+ Spaceを押して"

だからそれらの場合にはあなたは押す"Space+yか、"Space*yコピーするがあります。

そして、"Space+pまたは" Space*p貼り付けます。


0

私はNM Pennypackerの答えを使用し、2011年初頭のMacBook Proにhomebrewを介してvimをインストールしました。

brew install vim

これで、 "*レジスターを使用してvim内でテキストをコピーして貼り付けることもできます。〜/ .vimrcファイルまたは$ PATH内で何かを変更する必要さえありませんでした。Homebrewは/ usr / local / binにシンボリックリンクを追加しました。 vim-> ../Cellar/vim/8.1.2350/bin/vim。

以前に機能した代替手段は、マウスでマークし、Macでコピーアンドペースト(cmd + c、cmd + v)を使用してvim内のテキストの一部の行をコピーすることです。このオプションは、コピーアンドペーストするテキストのサイズがvimのウィンドウサイズよりも小さい場合にのみ機能します。ウィンドウ全体をマークするか、cmd + aを使用してvim内のすべてのテキストをコピーする場合は、vimを開始する前に書き込まれたコンソールの他の部分がコピーされます。

だから、私はclipboardレジスタを使用する新しい方法を見つけてうれしいです。

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