web-dev-qa-db-ja.com

システムのクリップボードからVimを貼り付ける(およびコピーする)方法は?

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

システムのクリップボードとの間でVimを貼り付けることはできますか?

673
Santosh Kumar

"*および"+レジスタは、システムのクリップボード用です(:help registers)。お使いのシステムに応じて、彼らは異なることをするかもしれません。たとえば、OSXやWindowsなどのX11を使用しないシステムでは、"*レジスタを使用してシステムクリップボードの読み取りと書き込みを行います。 X11システムでは、両方のレジスタを使用できます。詳細については:help x11-selectionを参照してください。しかし、基本的に"*はX11のPRIMARY選択に似ています(通常はコピーしますマウスで選択し、中央のマウスボタンで貼り付けます)"+は、X11のクリップボード選択(クリップボード自体に似ています) )。

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

システムクリップボードからのコピー/貼り付け機能しません:echo has('clipboard')が0を返す場合、このことに注意してください。この場合、vimは+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を参照してください。

811
Conner

あなたはgnome-terminalのペーストのショートカットでvimにコピーすることができます。ファイルを挿入モードにして使用する

Ctrl+Shift+v

事前に覚えておく

 :set paste 

インデントを間違えないようにします。

126
neel

私のためにその設定はコピーと貼り付けのために働く

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

Linux

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

詳細は設定やシステムに多少依存するように思われるので、あなたの走行距離は間違いなく変わります。それは間違いなくあなたが正しい方向に向けられるようにする必要があります。

参照

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

37
Todd A. Jacobs

これがあなたの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
33
Danniel Little

私はこの質問がもっと客観的な答えに値すると信じています。

ペーストモードに入る

  • ESC
  • :ペーストをセット
  • 押す i
  • SHIFT + Insert (テキストをクリップボードにコピーした状態で)


貼り付けモードを終了

  • ESC
  • :のりを設定
  • 押す i

あなたはテキストを貼り付けました、そしてあなたは再びタイプすることができます。

19
ivanleoncz

クリップボード

この選択を保存するための特別なレジスタがあります、それは "*レジスタです。どのテキストが選択されるかについての情報が変更されようとしていない限り(例えば、マウスの左クリックで)選択したテキストを貼り付けると、そのテキストが "* register"に書き込まれます。たとえば、行を切り取って現在の選択範囲にしたり、CLIPBOARDに配置するには、次のようにします。

    "*dd

同様に、マウスの中ボタンをクリックするなどして別のアプリケーションから選択範囲を貼り付けたい場合は、選択範囲が最初に "* register"に配置され、次に他のレジスタと同じように 'put'に配置されます。 (クリップボードの内容):

    "*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の選択は、アプリケーションプログラムによって使用される頻度が少なくなります。

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

16
The Demz

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

いくつかの追加のグーグルが立ち上がった: https://unix.stackexchange.com/questions/110684/copy-paste-into-sshd-vim-from-local-windows-clipboard

私のデスクトップのクリップボードからVimのバッファにペーストするためのトリックをしたSHIFT+INSERTを使うことを提案するコメントの1つ。 Ctrl-CはすでにVimからデスクトップのクリップボードにコピーしようとしていました。

12
jinksPadlock

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

〜/ .vimrcに追加してください。

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

9
rotestein

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

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

2).vimrcファイルに以下を追加してください。

command Clip r !parcellite -c

3)vimを再起動してください。

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

6
lovecraftian

これは私のために働く: Ctrl+Shift+V

3
Boseam

Connerの答えから続けて、それは素晴らしかったが、挿入モードのC-R C-p +C-R C-p *は少し不便です。コマンドモードから"*pおよび"+pを削除します。

a VIM guruは、C-vC-r C-p +の動作にマッピングするために次のことを提案しました。

:inoremap <C-v> <C-o>"+pは挿入モード専用です

あなたが本当にブロックワイズビジュアルモードをオーバーライドしたい場合(ビジュアルモードが良いので彼によって推奨されていません)あなたはmap <C-v> "+pを持つことができます

2
barlop

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

  1. VimがX-11クリップボードをサポートしているかどうかを確認してください:vim --version | grep clipboard。もし-clipboard-xterm_clipboardが戻ってきたら、vim-gtkvim-gnomeのどちらかをインストールするべきです(Arch Linuxではgvim)

  2. .vimrcに次の行を追加してください。

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

これで、コピーと貼り付けは、yankにyを、pasteにpを使用するだけで、単一のマシンでも異なるマシンでも予想通りに機能するはずです。この機能を使用するすべてのマシンのNB modify .vimrc

1
chao

@ 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 :numberから[count]を引く
  • v_CTRL-V :ブロックワイズビジュアルモード
  • i_CTRL-V :次の数字以外の文字列を文字通りに挿入する。これもi_CTRL-Qにマップされる

別の方法として、 "yank"、 "delete"、 "put"のVim動詞、それぞれ<C-y><C-d><C-p>に触発されたキーを使うことができます。これらは1つのデフォルトマッピングのみをオーバーライドします。

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

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

1
Nobu

本当に必要なのは EasyClip です。それだけでそれ以上のことができます...

1
Scott Wade

また、Vimを使用しているOSXでは、マウスでテキストを選択してCmd-CでOSXシステムのクリップボードにコピーできます。コピーしたテキストはVimの外側のクリップボードで使用可能になります。

言い換えれば、OSXはそれを通常のウィンドウであるかのように扱います。そして、これが非常に悪意のあるAppleの「コマンド」ボタンが役に立つところです。

B-30

1
B-30

私は、2017年半ばのMacbook ProでiTerm2内でvimを主な開発環境として実行してこの問題に遭遇しました。

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

homebrewvimパッケージは、clipboardオプションを使用してコンパイルされているように見えるため、修正は次のとおりです。

  1. brew install vimを実行します
  2. set clipboard+=unnamed~/.vimrcファイルに追加します
  3. iTerm2を閉じて再度開きます
1
NM Pennypacker

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

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

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

1
wisbucky

あなたがMAC OSXでvimを使っているなら、残念ながらそれはより古いバージョンで来て、そしてクリップボードオプションに従わなかった。幸いなことに、自作は簡単にこの問題を解決することができます。

vimをインストールしてください:

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

vimのgui verionをインストールしてください:

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

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


~/.vimrcに次の行を追加する
set clipboard=unnamed

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

1
anonymous

いくつかの国際キーボードでは、押す必要があるかもしれません。 "+Space "を取得します。

そのような場合、あなたは押す必要があるでしょう "Space+y または "Space*y コピーする。

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

0
Arthur F

あなたがマウスを使っているなら、最初にやる

 :set paste 

right click mouseとバッファの内容が貼り付けられます

0
Mohammed Rafeeq

あなたのvimrcなどを変更したいのであれば他の解決策が良いでしょう。しかし、 から vim/にコピーする簡単な方法が欲しいのです。キーボード。これが私が思いついたことです。

  • コピーしたいテキストをビジュアルモードで選択しますv
  • :を押すと(自動的に展開されて:'<,'>が表示されます)
  • システムに応じてy * または y +と入力して、選択したテキストをシステムのクリップボードに貼り付けます。
0
NateW

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

0
user1898814

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

0
eel ghEEz

vim 8 右クリックでデフォルトでビジュアルモードが有効になります。これは、「通常の」コピー&ペーストを防止します(「設計上の欠陥」 https://github.com/vim/vim/issues/1326 )。次のようにして修正してください。

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

Vimを終了して再起動してください。

0
dr0i

あなたがWindowsを使用していて、pを使ってシステムクリップボードの内容を貼り付けたいのなら、このコマンドをタイプしてください。

:set clipboard = unnamed

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

0
vincent mathew