
vim
Windows 10にインストールしましたchocolatey
PowerShell でファイルを編集すると、すべて正常に動作します。コピー&ペーストもできましたしかし、gitコミットメッセージを編集すると、vim
画面が正しく再描画されません。画面の再描画を強制する更新したテキストはきちんと表示されますが、それは非常に煩わしいです。
git
以下で使用するように設定しましたvim
:
git config --global core.editor vim
どうすれば適切に動作させることができますかvim
?
答え1
Git for Windows には、ディストリビューションの一部として独自のバージョンの Vim が同梱されています。これは、デフォルトのエディターが必要であり、Git のような Unix プログラムのデフォルトのエディターは通常 であるためですvi
。
エディターを として指定するとvim
、使用されるバージョンは の最初にあるバージョンになりますPATH
。カスタム バージョンを使用するように指定していない場合は、おそらく Git for Windows バージョンになります。そのバージョンの Vim では、使用するターミナル タイプを指定するために環境変数を設定する必要があると思われますが、設定されていないため、正しくレンダリングされません。Microsoft ターミナル実装を使用している場合は、環境変数の値として をTERM
使用する必要があると思われます。xterm-256color
TERM
Chocolatey によってインストールされたようなカスタム Vim バージョンを使用する場合は、それを前に置くかPATH
、フルパスを指定する必要があります。Git はcore.editor
構成オプションの値をシェルに渡すため、コマンドは POSIXsh
実装の構文に準拠している必要があります。バックスラッシュはエスケープ文字です。したがって、プログラム名をスラッシュまたは一重引用符で囲む必要があります。
Vim のバージョンがグラフィカルである場合は、ターミナルから切り離されないようにするオプションが必要です-f
。そうでない場合、Vim は起動してすぐにターミナルから切り離されるため、Git は Vim が生成したプロセスがすぐに終了することを認識します。そのプロセス (エディター) が終了したため、Git は編集が完了したと想定します。しかし、実際には何も編集していないため、Git はコミットを中止します。
答え2
要約
vim 実行ファイルへの直接の完全修飾パスを git に渡すと問題が解決しましたが、その理由はわかりません。
git config --global core.editor "'C:\tools\vim\vim82\vim.exe' -f -i NONE"
パスをシングルクォートで囲むことは重要ですgit
。バックスラッシュを含むパスをどう処理するかが分からないからです。設定全体をダブルクォートで囲むことは重要です。そうしないとgitがコマンド-f -f NONE
に適用されませんgit config
。-f -i NONE
この答え、それが何をするのかは分かりませんが、git commit
それがないと動作しませんでした。
フルパスを見つける方法
vim
c:\windows\vim.bat
は、次のように入力するとpowershell
起動するファイルを追加します。vim
vim
PS C:\Users\heath> Get-Command vim
CommandType Name Version Source
----------- ---- ------- ------
Application vim.bat 0.0.0.0 C:\windows\vim.bat
vim.bat
非常に簡単です:
@echo off
rem -- Run Vim --
rem # uninstall key: vim82 #
setlocal
set VIM_EXE_DIR=C:\tools\vim\vim82
if exist "%VIM%\vim82\vim.exe" set VIM_EXE_DIR=%VIM%\vim82
if exist "%VIMRUNTIME%\vim.exe" set VIM_EXE_DIR=%VIMRUNTIME%
if not exist "%VIM_EXE_DIR%\vim.exe" (
echo "%VIM_EXE_DIR%\vim.exe" not found
goto :eof
)
"%VIM_EXE_DIR%\vim.exe" %*
したがって、私の完全なvim
パスはC:\tools\vim\vim82\vim.exe