gvim 8.2 не перерисовывает экран при редактировании сообщения о коммите git в windows 10 powershell

gvim 8.2 не перерисовывает экран при редактировании сообщения о коммите git в windows 10 powershell

Я установил vimна Windows 10 с помощьюchocolatey. Когда я редактирую файл в PowerShell, все работает отлично!У меня даже копирование и вставка работают. Однако, когда я редактирую сообщение коммита git, vimэкран не перерисовывается должным образом. Если япринудительно перерисовать экран, Я могу нормально видеть свой обновленный текст, но это очень раздражает.

Я настроил gitдля использования vimс:

git config --global core.editor vim

Как заставить себя vimвести себя правильно?

решение1

Git для Windows поставляет собственную версию Vim как часть дистрибутива. Это связано с тем, что должен быть редактор по умолчанию, а редактором по умолчанию для программ Unix, таких как Git, обычно является vi.

Когда вы указываете редактор как vim, используемая версия — это версия, которая стоит первой в PATH, что, вероятно, является версией Git для Windows, если вы не указали, что будет использоваться ваша пользовательская версия. Эта версия Vim, вероятно, хочет, чтобы TERMбыла установлена ​​переменная окружения, сообщающая ей, какой тип терминала использовать, и поскольку это не так, она не отображается должным образом. Если вы используете реализацию Microsoft Terminal, вы, вероятно, захотите использовать xterm-256colorв качестве значения для TERMпеременной окружения.

Если вы хотите использовать свою собственную версию Vim, например, установленную Chocolatey, то она должна быть либо более ранней, PATHлибо вам нужно указать полный путь. Git передает значение core.editorпараметра конфигурации в оболочку, поэтому ваша команда должна соответствовать синтаксису для shреализации POSIX, где обратная косая черта является символом экранирования. Поэтому вам нужно использовать либо прямые косые черты, либо одинарные кавычки вокруг имени программы.

Если ваша версия Vim графическая, то вам нужна опция -f, чтобы она не отсоединялась от терминала. В противном случае Vim запускается и немедленно отсоединяется от терминала, поэтому Git видит, что процесс, который он породил, немедленно завершился. Поскольку этот процесс (ваш редактор) завершился, Git предполагает, что вы закончили редактирование. Но поскольку вы на самом деле ничего не редактировали, Git прерывает вашу фиксацию.

решение2

TLDR

Указание 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

Связанный контент