以前は"+y
を使用してテキストをシステムのクリップボードにコピーしていましたが、WindowsのBashのvimでは機能しません。
"* yも" + y(...)も機能しないため、代替方法は次のとおりです。
これを.vimrc
に追加し、~/.vimbuffer
というファイルを作成します
" copy (write) highlighted text to .vimbuffer
vmap <C-c> y:new ~/.vimbuffer<CR>VGp:x<CR> \| :!cat ~/.vimbuffer \| clip.exe <CR><CR>
" paste from buffer
map <C-v> :r ~/.vimbuffer<CR>
Visualまたはvisual-blockを使用してテキストをハイライトし、ctrl-c
を押します。通常の方法を使用して端末の外にコピーしたテキストを貼り付けるか、通常モードまたはビジュアルモードでctrl-v
を使用してvimペインにコピーしたテキストを貼り付けます。
Ctrl-c
は選択したテキストをヤンクし、~/.vimbuffer
を選択したテキストで上書きし、UNIXコマンドを実行して~/.vimbuffer
からclip.exe.
にデータをパイプアウトします
さらなる改善(コマンドのサイレント化など)は大歓迎です!
編集:コマンドは、行全体だけでなく、任意の長さの文字列をコピーできるようになりました。古いコマンド:
vmap <C-c> :w! ~/.vimbuffer \| !cat ~/.vimbuffer \| clip.exe <CR><CR>
Xサーバーをセットアップしたくない場合、このメソッドを使用すると、Windowsに付属のclip.exe
プログラムを使用して、選択したテキストをクリップボードにコピーできます。
以下のコードスニペットは、 .vimrc
ファイルに配置できます。
最初に、現在選択されているテキストを文字列として返すヘルパー関数を作成します。この関数を使用して、強調表示されたテキストをclip.exe
にパイプできます。
func! GetSelectedText()
normal gv"xy
let result = getreg("x")
return result
endfunc
system
関数を使用すると、ネイティブプログラムを呼び出してパラメーターをパイプで渡すことができます。以下のスニペットは、2つのキーマッピングを設定します。最初の行は許可します Ctrl+C テキストのコピーに使用され、2番目の Ctrl+X テキストを切り取るため:
noremap <C-C> :call system('clip.exe', GetSelectedText())<CR>
noremap <C-X> :call system('clip.exe', GetSelectedText())<CR>gvx
.vimrc
ファイルへの変更を保存したら、準備完了です。
複数のシステムで.vimrc
を使用する場合、clip.exe
が実際に存在するかどうかを確認するために、これらのマッピングをif
ステートメントでラップすることをお勧めします。
if !has("clipboard") && executable("clip.exe")
noremap <C-C> :call system('clip.exe', GetSelectedText())<CR>
noremap <C-X> :call system('clip.exe', GetSelectedText())<CR>gvx
endif
上記により、Vimはシステムクリップボードに直接アクセスできる場合、これらのキーバインドを無視することもできます。
次のように、vimがクリップボードにアクセスできる場合にキーバインドを追加することもできます。
if has("clipboard")
vnoremap <C-X> "+x
vnoremap <S-Del> "+x
vnoremap <C-C> "+y
vnoremap <C-Insert> "+y
map <C-V> "+gP
map <S-Insert> "+gP
cmap <C-V> <C-R>+
cmap <S-Insert> <C-R>+
endif
WindowsでVimをネイティブで使用している場合、またはLinuxシステムでvim-gtk
を使用している場合に便利です。
行全体をコピーするだけの場合は、Vimの機能を使用して、ファイルの内容を外部プログラムにパイプできます。だからできる
:w !clip.exe
clip.exe
にパイプする。 2から10などの特定の行が必要な場合は、:2,10w !clip.exe
を実行できます。
Vimの外部コマンドへのバッファーのパイプ を参照してください
上記の情報を組み合わせることで、キーバインドを使用せずに、任意のレジスタからクリップボードに単純なテキストをコピーすることができます(場合によってはより便利なこともあります)。たとえば、最後にヤンクしたテキストをWindowsのクリップボードにコピーする場合は、次のコマンドを入力します(入力を開始します)。
:call system('clip.exe', '
今すぐ押す Ctrl+r、その後にレジスタ +。指定されたレジスタからテキストを貼り付けます。次に、一重引用符と括弧を閉じます。コマンドは次のようになります。
:call system('clip.exe', 'a text from 0 register')
押す Enter、完了!
WSLにバンドルされているvimを使用する場合は、vim自体が提供するクリップボードのみを使用できます。つまり、vim内でのみコピーと貼り付けができます。
または、あなたは試すことができます:
export DISPLAY=localhost:0
WSL Bashで。