Humanity

Edit the world by your favorite way

Windows Subsystem Linux で動かしてる端末版 Vim のバッファの内容をクリップボードにコピーしたい

ので書いた。 さっと書いた雑クオリティなので GitHub - kana/vim-fakeclip: Vim plugin: Provide pseudo "clipboard" registers 使うのが良いんだと思います。 help ちらっと見たら WSL にも対応してるっぽいので、OS 間で統一して扱いたいとかいう人はそちらをどうぞ。

追記 (2018/09/18):range に対応したのでビジュアルモードで :'<,'>Clip したらその箇所だけコピーされるようになった。これ以上ブログに転載するのも面倒なので最新版はこちらから

let s:is_wsl = has('unix') && isdirectory('/mnt/c/')
if s:is_wsl
  command! -bar -range=% Clip <line1>,<line2>call s:cmd_clip()

  function! s:cmd_clip() range abort
    let windir = s:windir()
    if windir is# ''
      echoerr 'windows directory not found'
      return
    endif
    let clip = join([windir, 'System32', 'clip.exe'], '/')
    let str = join(getline(a:firstline, a:lastline), "\n")
    call system(clip, str)
  endfunction

  function! s:windir() abort
    return get(filter([
    \ '/mnt/c/Windows',
    \ '/mnt/c/WINDOWS',
    \], {_,p -> isdirectory(p)}), 0, '')
  endfunction
endif