wsl からは windowsのファイルを実行できるので、clip.exeを実行できる。
なので、vimのビジュアルモードで範囲を選択して、clip.exeを実行すればOK。
具体的な手順
-
v
を押してビジュアルモードに入り、カーソルを移動させて範囲を選択。 -
:
を押すと、:'<,'>
が入力されます。これは選択した範囲を表しています。 -
w !clip.exe
をつけ足し、:'<,'> w !clip.exe
にして、Enterを押します。このコマンドは、wで一旦一時ファイルに書き出し、その内容を、clip.exeでクリップボードにコピーします。
※'<,'>
とw !clip.exe
の間に半角スペースが必要なことに注意
これで、クリップボードに選択した行がコピーされます。
この方法の問題点
日本語が文字化けする
出力をiconvで文字コードを変換してからclip.exeに渡せばOK
:'<,'> w !iconv -t cp932 | clip.exe
root権限で開いたファイルの場合、clip.exeが見つからない
デフォルトのユーザーの場合は、/mnt/c/WINDOWS/system32 にデフォルトでパスが通っているが、ほかのユーザーの場合は違うため。
愚直に、フルパスを指定してclip.exeを実行すれば、コピーできる。めんどくさいけど
:'<,'> w !/mnt/c/WINDOWS/system32/clip.exe
行全体がコピーされてしまう
ビジュアルモードで選択した範囲だけをクリップボードにコピーしたかったのですが、実際には選択した範囲を含む行がクリップボードにコピーされます。
選択した範囲だけコピーできるようにしたいので、誰かvimに詳しい方教えてくださると嬉しいです。
参考