vim-fugitive めっちゃ使いやすい。Vim のキラープラグインの1つではないかと思う。Windows での CUI 環境を MSYS2 に移行したくらいから、gVim で :GStatus
が使えなくなって、CUI 版の Vim を使っていた。今回その理由に気づいたので、メモとして残しておく。
症状
元々の環境
- CUI Vim: MSYS2 (not Git for Windows) の Vim
- GUI Vim: Kaoriya 版の gVim
- git コマンドは MSYS2 のものを使っていた。
症状
- CUI からは、
:Gstatus
も動く - GUI からは、
:Gstatus
すると、/home
から始まって、C:
で終わる変なパスとともに、No such file or directory
のエラーが表示される。
直し方だけ知りたい人は、解決策へ。
vim-fugitive がサポートする設定
ちょっと古いのだけど、vim-fugitive の作者の発言は以下。
- Windows mode: msysgit/
shell=cmd
/noshellslash
- Cygwin mode: cygwin git/
shell=bash
/shellslash
この時点では、Git for Windows でインストールされる git と、MSYS2 でインストールできる git は同じとして扱えるだろうと思っていた。なので、1の設定をしたけど、やはりうまくいかない。
パスがおかしい、というところから、shellslash
とか、shell
の設定がまずいのかな?と思ったけど、直すことができず、しばらく gVim の使用はあきらめて、CUI で Vim を使っていた。
気づいた経緯
vim-plug の issue でのこの書き込みを見たのがでかい。
ん?と思って、自分の MSYS2 の git のバージョンを確かめてみると、
$ git --version git version 2.15.0
お、これは・・・ MSYS2 でインストールした git も Cygwin と同じ扱いじゃん・・・ということに気づいた。そこで、gVim で 2 の設定も試してみたけど、これもだめ。たぶん、gVim は win32unix
じゃない(win32unix
は Cygwin の Vim が持っている feature)からなんだと思う。ということは、Git for Windows をインストールすればよいのでは?ということに思い至る。
解決策
結局どうすれば良かったのかというと、Git for Windows をインストールして、gVim からはその git を使えば良い。
UNIX ライクな環境としては、Git for Windows ではなく、pacman を使える MSYS2 にしたかったので、以下のようにした。
- CUI: MSYS2 の Vim/MSYS2 の git/
shell=bash
/shellslash
- GUI: gVim (Kaoriya)/Git for Windows の git/
shell=cmd
/noshellslash
CUI でも、Git for Windows の git を使うことはできるはず。
MSYS2 でインストールできる git と、Git for Windows でインストールされる git は別物だから気をつけろ。MSYS2 と Git for Windows を両方入れるのはストレージの無駄な気がするかもしれないけど現状では仕方のないことなのだと思う。
- MSYS2 の git
$ /usr/bin/git --version git version 2.15.0
- Git for Windows の git
$ /c/Git/bin/git --version git version 2.15.1.windows.2
番外編
と、ここまで書いて、ある事に気が付いた。GitHubDesktop にも git はあるはずだ、と。GitHubDesktop も使っているので、この git がもし、Git for Windows 版であれば、Git for Windows を入れる必要はない。ということで探すとありました。1.0.10 の部分は GitHubDesktop のバージョンによって変わると思うけど、ここにある。
%USERPROFILE%\AppData\Local\GitHubDesktop\app-1.0.10\resources\app\git\cmd\git.exe
GitHubDesktop の git
$ git.exe --version git version 2.15.1.windows.1
試しに、この git.exe のパスを gVim の $PATH
に追加して :Gstatus
してみるとなんとちゃんと動いてくれる。
なので、インストールした Git for Windows は速攻アンインストールした。
ちなみに、上の git のパスはなんだかとても長くて嫌だったので、%USERPROFILE\AppData\Local\GitHubDesktop\app-1.0.10\resources\app\git
のシンボリックリンクを適当なところに作って .gvimrc
でパスを追加するようにした。