我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.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