在 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 Terminal 实现,则可能希望将其用作环境变量xterm-256color的值TERM

如果您想使用自定义 Vim 版本(例如 Chocolatey 安装的版本),则需要更早的版本PATH或需要指定完整路径。Git 将core.editor配置选项的值传递给 shell,因此您的命令需要满足 POSIXsh实现的语法,其中反斜杠是转义字符。因此,您需要在程序名称周围使用正斜杠或单引号。

如果您的 Vim 版本是图形化的,则需要该-f选项,以便它不会脱离终端。否则,Vim 启动后会立即脱离终端,因此 Git 会看到它生成的进程立即退出。由于该进程(您的编辑器)已退出,Git 会假定您已完成编辑。但由于您实际上没有编辑任何内容,因此 Git 会中止您的提交。

答案2

结论

给 git 提供我的 vim 可执行文件的直接完全限定路径可以修复问题,但我不知道为什么:

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.batpowershell来启动: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

相关内容