Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

エクスプローラからWSLのVIMでファイルを開く方法

$
0
0

お断り

以下の方法は本質的に下記サイトの内容を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でファイルを開くことができるようにする.

  1. bash.exeを起動して,その中でvimを起動する.
  2. 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,})"

以上を行うと,

  1. ファイルを選択した状態でアプリケーションキー/メニューキーを押す(もしくはファイルを右クリックする)
  2. コンテキストメニューが表示される
  3. Wキーを押す

という操作でvimが起動する.

参考までに,以下をOpenWithVim.regなど適当な名前のテキストファイルとして作成してダブルクリックすれば,上記のregeditによるキー追加を行うことができる.

OpenWithVim.reg
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フォルダが開く.このフォルダに下記の内容でバッチファイルを作る.ファイル名は適当でもよいが,先頭の文字がそのままショートカットキーになるので,使いやすいものを選ぶとよい.

vim-wsl.bat
C:\Windows\System32\bash.exe -c "vim \"$(wslpath -a -u "%1")\""

以上を行うと,

  1. ファイルを選択した状態でアプリケーションキー/メニューキーを押す(もしくはファイルを右クリックする)
  2. コンテキストメニューが表示される
  3. Nキーで「送る」サブメニューが開く
  4. Vキーを押す

という操作でvimが起動する.

参考


  1. たとえばvimの頭文字から(&V)としてもよい.しかし「以前のバージョンの復元」とキーが重複するため,Vキーを押した後にEnterを押す手間が増える. 


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>