在 Windows 10 powershell 中編輯 git 提交訊息時,gvim 8.2 不會重繪螢幕

在 Windows 10 powershell 中編輯 git 提交訊息時,gvim 8.2 不會重繪螢幕

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,如果您沒有指定要使用的自訂版本,則可能是 Windows 版本的 Git。該版本的 Vim 可能希望TERM設定環境變數來告訴它要使用什麼終端類型,但由於事實並非如此,因此它無法正確呈現。如果您使用 Microsoft 終端實現,您可能想要用作環境變數xterm-256color的值TERM

如果您想使用自訂的 Vim 版本,例如 Chocolatey 安裝的版本,那麼它需要較早,PATH或者您需要指定完整路徑。 Git 將配置選項的值傳遞core.editor給 shell,因此您的命令需要滿足 POSIXsh實現的語法,其中反斜線是轉義字元。因此,您要么想在程式名稱兩邊使用正斜線或單引號。

如果您的 Vim 版本是圖形版本,那麼您需要該-f選項,以便它不會與終端分離。否則,Vim 啟動並立即與終端分離,因此 Git 會看到它產生的進程立即退出。由於該進程(您的編輯器)已退出,Git 假定您已完成編輯。但由於您實際上沒有編輯任何內容,Git 會中止您的提交。

答案2

總長DR

為 git 提供指向我的 vim 可執行檔的直接完全限定路徑修復了問題,我不知道為什麼:

git config --global core.editor "'C:\tools\vim\vim82\vim.exe' -f -i NONE"

路徑周圍的單引號很重要,因為git不知道如何處理反斜線的路徑。整個配置周圍的雙引號很重要,這樣 git 就不會套用到-f -f NONEgit config指令。我-f -i NONE發現這個答案,我不知道它有什麼作用,但git commit沒有它就無法工作。

我如何找到完整路徑

vim新增一個c:\windows\vim.bat文件,該文件用於在您鍵入時powershell啟動:vimvim

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

相關內容