お断り
以下の方法は本質的に下記サイトの内容をWindows10 1803アップデートに合わせて更新しつつ,パスに空白が含まれる場合に対応し,SendTo版を加えたものです.
また以下ではvimを例に説明していますが,vim固有の機能を使うわけではないので,ファイル名を引数として受け取る別のコマンド(emacsなど)でも問題ありません.
目的
ちょっとしたテキストファイルの編集に,Windows Subsystem for Linux(以下WSL)のvim(≠gvim)を使いたい.しかもエクスプローラーから直接vimを起動したい.
理由
- Windows版のvimをインストールしてSendToにでも入れておけば良いだけではある.しかしWSL側で作業するときは必ずvimを使うのでもともとvimは入っている.2つのvimをインストールするのは避けたい.
- WSL側のvimなら,Linuxで作業しているときと全く同じようにコマンドを呼べる(範囲指定して
:'<,'>:!sort|uniq
でソートして重複を削除するとか).
方法1:レジストリを編集してコンテキストメニューに加える
以下の2点を実現するように,レジストリにキーを追加することで,コンテキストメニューからvimでファイルを開くことができるようにする.
- bash.exeを起動して,その中でvimを起動する.
- vimの引数にはエクスプローラで選択していたファイル名をWSL形式に変換して渡す.
まずregedit
を起動してHKEY_CLASSES_ROOT\*\shell
に新規キーとしてOpenWithVim
を作る(名前は適当でよい).作成したら名前が(規定)
な文字列値(REG_SZ
)がその下にできているはずなので,値(データ)をOpen with Vim (&W)
にする.これもエクスプローラ上でファイルを右クリックした際に表示されるコンテキストメニュー上での項目名なので何でもよい.ただし末尾の(&W)
はショートカットキーを決める文字列なので,好みのものに変更するとよい1.
続けてキーOpenWithVIM
の下に新規キーとしてcommand
を作成し,(規定)
文字列値のデータを
C:\Windows\System32\bash.exe -c "vim \"$(wslpath -a -u "%1")\""
にする.なお冒頭の参考サイトでは1803アップデート以前のWSLを想定して同様の処理を以下のようにsed
で行っている.
C:\Windows\System32\bash.exe -c "vim $(lower=$(echo "%1" | sed 's/\\/\//g' | sed 's/://') && echo /mnt/${lower,})"
以上を行うと,
- ファイルを選択した状態でアプリケーションキー/メニューキーを押す(もしくはファイルを右クリックする)
- コンテキストメニューが表示される
W
キーを押す
という操作でvimが起動する.
参考までに,以下をOpenWithVim.reg
など適当な名前のテキストファイルとして作成してダブルクリックすれば,上記のregedit
によるキー追加を行うことができる.
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\shell\OpenWithVim]
@="Open with Vim (&W)"
[HKEY_CLASSES_ROOT\*\shell\OpenWithVIM\command]
@="C:\\Windows\\System32\\bash.exe -c \"vim \\\"$(wslpath -a -u \"%1\")\\\"\""
方法2:「送る」メニューに加える
手順1のcommand
と同じ内容を持つバッチファイルを作成してSendTo
に配置すれば,コンテキストメニューの「送る」からvimで開くことができるようになる.
まずWin+R
を押して「ファイル名を指定して実行」を開き,shell:sendto
を実行するとSendTo
フォルダが開く.このフォルダに下記の内容でバッチファイルを作る.ファイル名は適当でもよいが,先頭の文字がそのままショートカットキーになるので,使いやすいものを選ぶとよい.
C:\Windows\System32\bash.exe -c "vim \"$(wslpath -a -u "%1")\""
以上を行うと,
- ファイルを選択した状態でアプリケーションキー/メニューキーを押す(もしくはファイルを右クリックする)
- コンテキストメニューが表示される
N
キーで「送る」サブメニューが開くV
キーを押す
という操作でvimが起動する.
参考
- https://situsali.com/membuat-shortcut-open-vim-dari-wsl/(インドネシア語)
- Windows 10のコマンドプロンプトからWSL上のLinuxコマンドを呼び出す(バージョン1803対応版)
- 【Windows】右クリックメニュー[送る]の活用方法、追加・設定方法(SendToディレクトリの場所一覧) | onocom
たとえばvimの頭文字から
(&V)
としてもよい.しかし「以前のバージョンの復元」とキーが重複するため,V
キーを押した後にEnter
を押す手間が増える. ↩