WSL上のVim:システムクリップボードを同期しますか?(クリップボードを設定^ =名前なし)?


12

WSL / Bash for Windowsを使用y yy 3ypているときに、vimで常に使用できるようにしたいのですが、vimの内部クリップボードではなく、すべてのアプリで共有されているシステムクリップボードに接続しています...すでにクリップボードを管理することに同意しています歴史。

Vimには、コピー/貼り付けバッファーをシステムクリップボードと同期する組み込みオプションがあるようです...しかし、WSLを実行するときの問題は、実際に使用/mnt/c/Windows/System32/clip.exeしてクリップボードにアクセスする必要があるということです...使用できるように:

set clipboard^=unnamed

WSLはまだサポートされていないようです。

私はneovimがこれをオプションとして持っていることを理解していますが、今は本当にneovimで実験したくありません...

今のところ、私が見つけた回避策に最も近いものは次のとおりです。

nnoremap <silent> <leader>y :call system('/mnt/c/Windows/System32/clip.exe', @0)<CR>
vnoremap <silent> <leader>y :call system('/mnt/c/Windows/System32/clip.exe', @0)<CR>

しかし、これは私の考えでは本当に恐ろしい解決策です... 2つのステップのプロセスをコピーすることになります...

もちろん、マウス/シフト+インを使用してコピーと貼り付けを行うこともできますが、この同期をVimで正しく機能させる方法が必要だと思います。


このソリューションをお勧めしますsuperuser.com/a/1439881/711405
ephemerr

回答:


10

これは非常に古い質問であることは承知していますが、最近は良い解決策を見つけました。多くの不満の後、私はコピーして貼り付けてWindowsシステムのクリップボードにアクセスするこれらの方法に出くわしました。

コピーすることで、vimバージョン> = 8.0.1394で、別の回答に記載されているようにhttps://vi.stackexchange.com/a/15190

let s:clip = '/mnt/c/Windows/System32/clip.exe' 
if executable(s:clip)
    augroup WSLYank
        autocmd!
        autocmd TextYankPost * call system('echo '.shellescape(join(v:event.regcontents, "\<CR>")).' | '.s:clip)
    augroup END
end

貼り付け、偽のレジストリコマンドへのマッピング、つまり "= pまたは" + pなど。

map <silent> "=p :r !powershell.exe -Command Get-Clipboard<CR>
map! <silent> <C-r>= :r !powershell.exe -Command Get-Clipboard<CR>

" I thought this will be better :)
noremap "+p :exe 'norm a'.system('/mnt/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe -Command Get-Clipboard')<CR>

右クリックによる貼り付けは機能しますが、マウスを使用しない場合は満足できません


WSLでvi追加しましたnnoremap <S-Insert> :r !powershell.exe -Command "& {Get-Clipboard}"<Enter>
Walter A

役立つ回答をありがとう!yankコマンドに偽のレジスターを使用することも可能かどうか疑問に思っていました。次のようなものnoremap "+y :exe 'norm a'.system('echo '.shellescape(join(v:event.regcontents, "\<CR>")).' | clip.exe')<CR>(これは機能しません...)
Tropilio

4

これはどうですか?

if system('uname -r') =~ "Microsoft"
  augroup Yank
    autocmd!
    autocmd TextYankPost * :call system('clip.exe ',@")
  augroup END
endif

unameLinuxターミナルコマンドで、OS情報を返しLinux、WSLで返されます。一方、-rフラグを指定すると、コマンドはOSのリリース情報を返すため、「Windows」を含める必要があります。

TextYankPostvimのイベント(参照あり:h TextYankPostvim、あなたのテキストのヤンク活性を検出します)、。

clip.exeWSLのWindowsコマンドプロンプトのコマンド(CLIP /?コマンドプロンプトを参照)でtext、またはcommandを介してからクリップボードにコピーまたは戻ります。ここではvim関数によってvimから実行されます。text | clip.execommand | clip.execlip.exesystem


Neovim has('wsl')ではの代わりに使用できますsystem('uname -r') =~ "Microsoft"
ジャスティンM.キーズ

2

私は、WSLのサポートのためのPRのために作ったfakeclip前にいくつかの時間を。

インストール方法についてはvimawesomeを参照してください。help fakeclip使用のため。


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