Explorer/Finder の右クリックで、その場所で、端末や GVim を開く


問題

普段はGUIで用事を済ませていて、ときどき端末を使う人向け。(Windows/Mac)

Explorer や Finder の右クリックで端末とか GVim を開けるようにしたい。
ファイルを開くのではなくて、いまマウスでつかんでいる、そのディレクトリでアプリケーションを立ち上げたい。つまり、

  • Terminal.app を起動して cd と打って フォルダをドラッグ&ドロップ とかしたくない。
  • gvim.exe を起動して :cd と打って パスをコピー&ペースト とか・・・。
  • いまそのディレクトリを見ているのに、なんでまたパスを指定しなければならんのよ・・・察して移動してくれよ。

という話。よくある話だけど自分でやってみる。ちなみに GVim を立ち上げたいのは、ファイル名変更ツールとして renamer.vim がOS関係なく使えて便利なため。
参考: ファイル名変更にVimの編集力を使う(renamer.vim)

Windows の場合

レジストリを編集するため .reg ファイルを作る。
下記は、cmd.exe、msys2 の mintty.exe で tcsh を使う例。(msys2 便利ですね)
パスは適宜変更のこと。メニューの中で目立つように★とか■をつけた。

context_menu.reg
Windows Registry Editor Version 5.00

; vim:fileencoding=utf-16le:ff=dos
; ファイルエンコーディングは UTF-16LE

; cmd.exe
[HKEY_CLASSES_ROOT\Directory\Background\shell\open_cmd]
@="● cmd here"
[HKEY_CLASSES_ROOT\Directory\Background\shell\open_cmd\command]
@="C:\\WINDOWS\\system32\\cmd.exe"
[HKEY_CLASSES_ROOT\Folder\shell\open_cmd]
@="● cmd here"
[HKEY_CLASSES_ROOT\Folder\shell\open_cmd\command]
@="C:\\WINDOWS\\system32\\cmd.exe"


; msys2 terminal
[HKEY_CLASSES_ROOT\Directory\Background\shell\open_msys2]
@="■tcsh here"
[HKEY_CLASSES_ROOT\Directory\Background\shell\open_msys2\command]
@="c:\\msys64\\usr\\bin\\mintty.exe /bin/tcsh"
[HKEY_CLASSES_ROOT\Folder\shell\open_msys2]
@="■tcsh here"
[HKEY_CLASSES_ROOT\Folder\shell\open_msys2\command]
@="c:\\msys64\\usr\\bin\\mintty.exe /bin/tcsh"

; gvim
[HKEY_CLASSES_ROOT\Directory\Background\shell\open_gvim]
@="★gvim here"
[HKEY_CLASSES_ROOT\Directory\Background\shell\open_gvim\command]
@="c:\\Apps\\Vim\\gvim.exe"
[HKEY_CLASSES_ROOT\Folder\shell\open_gvim]
@="★gvim here"
[HKEY_CLASSES_ROOT\Folder\shell\open_gvim\command]
@="c:\\Apps\\Vim\\gvim.exe"

保存して実行すると、Explorer の右クリックメニューに出てくる。

Mac の場合

Automator > 「新規」 > 「サービス」でワークフローを新規作成し、
下記のように「シェルスクリプトを実行」だけ含んだサービスを作る。

「シェルスクリプトを実行」に書く
open -a Terminal `dirname "$1"`


シェルの設定は /bin/bash にしておいた。/bin/tcsh だと日本語を含むパスでエラーになったため。(これは Terminal.app で実行されるシェルとは無関係)

ワークフローを保存すると、保存するとき付けた名前が Finder の右クリックに現れる。
.workflow ファイル自体は ~/Library/Services/ に保存されているので、メニューを消したい時はファイルを削除する。

MacVim.app 起動の場合は、

「シェルスクリプトを実行」に書く
cd `dirname "$1"`
/Applications/MacVim.app/Contents/MacOS/Vim -g

Terminal.app も MacVim も既存のサービスがあるから、自分で作る意味はあまりないが、自分で作れるということに意味がある、ということにしよう。

その他

Mac だと何もないところをクリックしてもメニューに現れないのでファイルかフォルダをつかむ必要がある。逆に Windows では何もないところかフォルダをつかむ必要があり、ファイルをつかんだときはメニューにでてこない。若干挙動が違うけど、動くからこれで良し。

参考

MSYS2 "Open Here" registry settings

Finderで選択したフォルダをiTermで開く