他のエディタとは異なり、vimはコピーしたテキストを独自のクリップボードに保存します。そのため、Webページからテキストをコピーして現在の作業ファイルに貼り付けるのは非常に困難です。 geditを開くか手動で入力する必要があります。
システムのクリップボードとの間でVimを貼り付けることはできますか?
"*
および"+
レジスタは、システムのクリップボード用です(: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
を参照してください。
あなたはgnome-terminalのペーストのショートカットでvimにコピーすることができます。ファイルを挿入モードにして使用する
Ctrl+Shift+v。
事前に覚えておく
:set paste
インデントを間違えないようにします。
私のためにその設定はコピーと貼り付けのために働く
" copy and paste
vmap <C-c> "+yi
vmap <C-x> "+c
vmap <C-v> c<ESC>"+p
imap <C-v> <ESC>"+pa
私のLinuxシステムでは、+
および*
レジスタはX11セレクションにマッピングされており、これをマウスの中ボタンで貼り付けることができます。 :set clipboard=unnamed
および:set clipboard=unnamedplus
が使用されている場合、レジスタはクリップボードにマップされ、CTRL-Vで貼り付けることができます。
詳細は設定やシステムに多少依存するように思われるので、あなたの走行距離は間違いなく変わります。それは間違いなくあなたが正しい方向に向けられるようにする必要があります。
これがあなたの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
私はこの質問がもっと客観的な答えに値すると信じています。
ペーストモードに入る
貼り付けモードを終了
あなたはテキストを貼り付けました、そしてあなたは再びタイプすることができます。
クリップボード
この選択を保存するための特別なレジスタがあります、それは "*レジスタです。どのテキストが選択されるかについての情報が変更されようとしていない限り(例えば、マウスの左クリックで)選択したテキストを貼り付けると、そのテキストが "* 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の選択は、アプリケーションプログラムによって使用される頻度が少なくなります。
私は上記の提案を試してみましたが、どれも私の環境では機能しませんでした。 (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からデスクトップのクリップボードにコピーしようとしていました。
+クリップボードを持っていなかったので、xselを使ってこの代替ソリューションを思いついた。
〜/ .vimrcに追加してください。
vnoremap <C-C> :w !xsel -b<CR><CR>
Vimのインストールが*と+のレジスタをサポートしていない人々のための簡単なメモ。クリップボードから貼り付けるために新しいvimインストールをダウンロードする必要はありません。これは代替方法です:
1)parcellite(メモリ使用量の少ないクリップボードマネージャ)をインストールします。
2).vimrcファイルに以下を追加してください。
command Clip r !parcellite -c
3)vimを再起動してください。
Exコマンドとして「Clip」と入力すると、クリップボードの内容がカーソル位置に貼り付けられます。 1回のキーストロークでこれを実行できるように、新しいコマンドをファンクションキーにマップすることもできます。
これは私のために働く: Ctrl+Shift+V
Connerの答えから続けて、それは素晴らしかったが、挿入モードのC-R C-p +
とC-R C-p *
は少し不便です。コマンドモードから"*p
および"+p
を削除します。
a VIM guruは、C-v
をC-r C-p +
の動作にマッピングするために次のことを提案しました。
:inoremap <C-v> <C-o>"+p
は挿入モード専用ですあなたが本当にブロックワイズビジュアルモードをオーバーライドしたい場合(ビジュアルモードが良いので彼によって推奨されていません)あなたは
map <C-v> "+p
を持つことができます
これに対する最も簡単な解決策は、ssh
を介して異なるLinuxマシン間でも機能することです。
VimがX-11クリップボードをサポートしているかどうかを確認してください:vim --version | grep clipboard
。もし-clipboard
と-xterm_clipboard
が戻ってきたら、vim-gtk
かvim-gnome
のどちらかをインストールするべきです(Arch Linuxではgvim)
.vimrc
に次の行を追加してください。
set clipboard=unnamedplus set paste
ssh -Y machine
これで、コピーと貼り付けは、yankにy
を、pasteにp
を使用するだけで、単一のマシンでも異なるマシンでも予想通りに機能するはずです。この機能を使用するすべてのマシンのNB modify .vimrc
。
@ 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
:補完のための後方検索キーワード:set clipboard=unnamed
の設定に加えて、Mac OS X 10.9のTerminal.appでvimを使用している場合はmvim -v
で取得できるbrew install macvim
を使用する必要があります。デフォルトのvimはクリップボードオプションをサポートしていません。
本当に必要なのは EasyClip です。それだけでそれ以上のことができます...
また、Vimを使用しているOSXでは、マウスでテキストを選択してCmd-CでOSXシステムのクリップボードにコピーできます。コピーしたテキストはVimの外側のクリップボードで使用可能になります。
言い換えれば、OSXはそれを通常のウィンドウであるかのように扱います。そして、これが非常に悪意のあるAppleの「コマンド」ボタンが役に立つところです。
B-30
私は、2017年半ばのMacbook ProでiTerm2
内でvim
を主な開発環境として実行してこの問題に遭遇しました。
他の答えが示唆したように、vim --version
を実行し、-clipboard
を返すことに気付きました。つまり、マシンに同梱されていたvim
のバージョンはクリップボードオプションでコンパイルされていません。
homebrew
のvim
パッケージは、clipboard
オプションを使用してコンパイルされているように見えるため、修正は次のとおりです。
brew install vim
を実行しますset clipboard+=unnamed
を~/.vimrc
ファイルに追加しますiTerm2
を閉じて再度開きますLinuxまたはMac上のVim 8+では、OSのネイティブペースト(Linuxではctrl+shift+V
、Macではcmd+V
)を使用できます。挿入モードではi
を押さないでください。
OSのクリップボードの内容を貼り付け、自動インデントを追加せずにスペースとタブを保持します。古い:set paste
、i
、ctrl+shift+V
、esc
、:set nopaste
メソッドと同等です。
+clipboard
または+xterm_clipboard
vim機能をインストールする必要さえありません。この機能は「ブラケットペースト」と呼ばれます。詳細については、「 vimにテキストを貼り付けるときに自動インデントをオフにする 」を参照してください。
あなたが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の行をコピーしてシステム全体に貼り付けることができます。
いくつかの国際キーボードでは、押す必要があるかもしれません。 "+Space "
を取得します。
そのような場合、あなたは押す必要があるでしょう "Space+y または "Space*y コピーする。
そして "Space+p または "Space*p 貼り付けます。
あなたがマウスを使っているなら、最初にやる
:set paste
right click mouse
とバッファの内容が貼り付けられます
あなたのvimrcなどを変更したいのであれば他の解決策が良いでしょう。しかし、 から vim を /にコピーする簡単な方法が欲しいのです。キーボード。これが私が思いついたことです。
v
:
を押すと(自動的に展開されて:'<,'>
が表示されます)y *
または y +
と入力して、選択したテキストをシステムのクリップボードに貼り付けます。これを行うには2つの簡単な方法があります。ファイルを挿入モードにして、1)マウスの中央ボタン(スクロールホイール)を押すか、2)Ctrl + Shift + V
Gnomeと統合されていない私のDebian vimを使うとき(vim --version | grep clip#はクリップボードをサポートしていないことを示しています)、Shiftキーを押しながらマウスでテキストを選択した後にクリップボードにコピーできます。他の呪いプログラム。 @Connerによるコメントから考えたように、Shiftキーを押したときにマウスイベントの報告をオフにするのは端末(私の場合はgnome-terminal)です。端末に特定のエスケープシーケンスを送信した後、cursesベースのプログラムはマウスイベントを受信できると思います。
vim 8 右クリックでデフォルトでビジュアルモードが有効になります。これは、「通常の」コピー&ペーストを防止します(「設計上の欠陥」 https://github.com/vim/vim/issues/1326 )。次のようにして修正してください。
echo "set mouse-=a" >> ~/.vimrc
。
Vimを終了して再起動してください。
あなたがWindowsを使用していて、p
を使ってシステムクリップボードの内容を貼り付けたいのなら、このコマンドをタイプしてください。
:set clipboard = unnamed
これで私の問題は解決した。