2026年2月23日月曜日

Windows のターミナルで Vim の OSC52 プラグインのコピーのみを有効にする

環境

OS: Ubuntu24.04 on WSL2 on Windows 11 Pro Vim: 9.1.2011

なんでコピーのみを有効にするの?

Windows Terminal と wstty(putty) で試したんですが、これらターミナルは OSC52 のコピー機能をサポートしているのに対し、ペースト機能はサポートしていないようです。

そして、ペースト機能をサポートしていないターミナルでは、 Vim 内で完結するペースト操作も使用できなくなってしまいう用でした。

解決方法

Vimrc に以下の設定を追加します。

if !has('win32')
  if has("patch-9.1.1984")
    function! InitOsc52() abort
        let v:clipproviders["osc52"] = {
            \  "available": v:true,
            \  "copy": {
            \    "*": function('osc52#Copy'),
            \    "+": function('osc52#Copy')
            \  },
            \ }
    endfunction

    augroup init_osc52
      autocmd!
      autocmd VimEnter * call InitOsc52()
    augroup END

    packadd osc52
    let g:osc52_force_avail = v:true
    let g:osc52_disable_paste = v:true
    set clipmethod=osc52,x11,wayland

  endif
endif

v:clipproviders["osc52"] がキモなのですが、paste の設定を省略することで、ペースト機能を無効化しています。

ただし、 Vimrc のトップレベルにべた書きで定義すると、プラグインの初期設定で上書きされてしまうため、VimEnter イベントで初期化するようにしています。

こうすることで、何らかのタイミングがかみ合い、ペースト機能が有効になってしまうことを防いでいます。

Windows のターミナルで OSC52 のコピー機能のみを有効にしたい場合は、試してみてください。

0 件のコメント:

コメントを投稿