Git for Windows のデフォルトエディタが MinTTY という使い慣れてないエディタだったので変更しようと思います。
概要
少し前まで Windows には公式のパッケージマネージャが存在せず、インストーラをダウンロードして、インストーラを開いて、…という煩わしい操作が必要だったのですが、近年は winget の登場により大分便利になりました。とはいっても全部やってくれるわけではないですが(後述)。
apt や homebrew などに比べるとまだまだですが、有名どころのパッケージはだいたい winget で入手できます。入手可能なパッケージは search コマンドで検索できます。
> winget search vim
名前 ID バージョン 一致 ソース
--------------------------------------------------------------------------------------------------
Vim Cheat Sheet 9WZDNCRDMCWR Unknown msstore
Vimar By-me App List Exporter 9PFSSC3DTHK8 Unknown msstore
Vimar VIEW Pro 9NNG9QXL8W3Z Unknown msstore
Vim vim.vim.nightly 9.1.0083 winget
Vim vim.vim 9.1.0004 winget
qutebrowser qutebrowser.qutebrowser 3.1.0 Tag: vim winget
win-vind pit-ray.win-vind 5.10.0 Tag: vim winget
Neovim Nightly Neovim.Neovim.Nightly 0.10.0 Tag: vim winget
Neovim Neovim.Neovim 0.9.5 Tag: vim winget
Vieb Jelmerro.Vieb 11.0.0 Tag: vim winget
Helix Helix.Helix 23.10 Tag: vim winget
lf gokcehan.lf r31 Tag: vim winget
4K Video Downloader OpenMedia.4KVideoDownloader 4.29.0.5640 Tag: vimeo winget
Kaku Chia-Lung.Kaku 2.0.2 Tag: vimeo winget
Replit Replit.Replit 1.0.6 Tag: desenvolvimento winget
> winget search emacs
名前 ID バージョン 一致 ソース
----------------------------------------------------
GNU Emacs GNU.Emacs 29.2 Moniker: emacs winget
実行環境
-
OS : Windows 11 Pro
-
winget : v1.6.3482
Vim
インストール&PATH を通す
単純に winget install vim
でいけるかと思ったのですが、インストール時にはパッケージ名をvim.vim
と指定しなければならないようです。
> winget install vim.vim
見つかりました Vim [vim.vim] バージョン 9.1.0004
このアプリケーションは所有者からライセンス供与されます。
Microsoft はサードパーティのパッケージに対して責任を負わず、ライセンスも付与しません。
ダウンロード中 https://github.com/vim/vim-win32-installer/releases/download/v9.1.0004/gvim_9.1.0004_x64.exe
██████████████████████████████ 10.4 MB / 10.4 MB
インストーラーハッシュが正常に検証されました
パッケージのインストールを開始しています...
インストーラーは管理者として実行するように要求するため、プロンプトが表示されます。
インストールが完了しました
これで行けるはずなのですが…
> vim search emacsd
vim : 用語 'vim' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。
名前が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してください
。
発生場所 行:1 文字:1
+ vim search emacsd
+ ~~~
+ CategoryInfo : ObjectNotFound: (vim:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
これだけでは PATH が通ってないため使えません。
むしろそこも含めて全部自動でやってくれるのがパッケージマネージャの醍醐味だろう、という個人的な見解は置いといて、さっさとパスを通します。
…とはいえ、インストールした先がわからない…インストール中もインストール先の表示はありませんでした。
ということで、検索をかけます(管理者権限が必要)。
> Get-ChildItem -Recurse -Filter "Vim" -Directory "C:\"
ディレクトリ: C:\Program Files
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2024/02/10 22:57 Vim
> Get-ChildItem "C:\Program Files\Vim"
ディレクトリ: C:\Program Files\Vim
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2024/02/10 22:57 vim91
-a---- 2024/02/10 22:57 1309 _vimrc
C:\Program Files
の下、C:\Program Files\Vim\vim91
にありました(vim
の後の数字はバージョンにより異なるかと思います)。これを PATH に追加します。
> $new_dir = "C:\Program Files\Vim\vim91"
> $new_path = [Environment]::GetEnvironmentVariable("Path", "User")
> $new_path += ";$new_dir"
> [Environment]::SetEnvironmentVariable("Path", $new_path, "User")
(2/11 更新:PATH の追加方法を修正しました)
ようやっと vim が使えるようになりました。
git のデフォルトエディタに設定する
> git config --global core.editor vim
これだけで OK です。
試しに git commit
してみると
vim が立ち上がったことが確認できました。
Emacs
次は Emacs です。同様に winget でインストールします。
> winget install emacs
見つかりました GNU Emacs [GNU.Emacs] バージョン 29.2
このアプリケーションは所有者からライセンス供与されます。
Microsoft はサードパーティのパッケージに対して責任を負わず、ライセンスも付与しません。
ダウンロード中 https://ftp.gnu.org/gnu/emacs/windows/emacs-29/emacs-29.2-installer.exe
██████████████████████████████ 69.5 MB / 69.5 MB
インストーラーハッシュが正常に検証されました
パッケージのインストールを開始しています...
インストールが完了しました
それで、こちらも当然のごとく PATH が通っていません。
> emacs
emacs : 用語 'emacs' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されませ
ん。名前が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してくだ
さい。
発生場所 行:1 文字:1
+ emacs
+ ~~~~~
+ CategoryInfo : ObjectNotFound: (emacs:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
検索をかけてみると、
> Get-ChildItem -Recurse -Filter "Emacs" -Directory "C:\"
ディレクトリ: C:\Program Files
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2024/02/10 23:22 Emacs
> Get-ChildItem "C:\Program Files\Emacs"
ディレクトリ: C:\Program Files\Emacs
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2023/12/03 2:16 emacs-29.1
d----- 2024/02/10 23:23 emacs-29.2
-a---- 2024/02/10 23:23 124642 Uninstall.exe
> Get-ChildItem "C:\Program Files\Emacs\emacs-29.2"
ディレクトリ: C:\Program Files\Emacs\emacs-29.2
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2024/02/10 23:22 bin
d----- 2024/02/10 23:22 include
d----- 2024/02/10 23:23 lib
d----- 2024/02/10 23:23 libexec
d----- 2024/02/10 23:23 share
こちらも C:\Program Files
にありました。(バージョンが2つ入っちゃってるのは筆者が以前も同様にインストールしたからです)
vim と違い、こちらは emacs-[version]\bin
ディレクトリの下にバイナリファイルがありました。最新版の方の PATH を通しておきます。
> $new_dir = "C:\Program Files\Emacs\emacs-29.2\bin"
> $new_path = [Environment]::GetEnvironmentVariable("Path", "User")
> $new_path += ";$new_dir"
> [Environment]::SetEnvironmentVariable("Path", $new_path, "User")
emacs -nw
で CUI モードで起動してみます。
こちらも起動できました。
git のデフォルトエディタに設定する
> git config --global core.editor emacs
でいけるかと思ったのですが、
> git commit
hint: Waiting for your editor to close the file... error: cannot spawn emacs: No such file or directory
error: unable to start editor 'emacs'
Please supply the message using either -m or -F option.
うーん… emacs コマンドだとデフォルトで GUI が立ち上がるので、もしかしてこれが駄目だったりするのかな?
というわけで、emacs -nw
で登録しておきましょう。
> git config --global core.editor 'emacs -nw'
ちなみに、既に git で Vim をデフォルトエディタに設定している状態で Emacs に改宗(あるいはその逆)したい場合は --replace-all
を使います。
> git config --replace-all --global core.editor 'emacs -nw'
これにて Emacs でのコミットメッセージ編集が可能になりました。
以上です。