gvim 8.2 no vuelve a dibujar la pantalla al editar un mensaje de confirmación de git en Windows 10 PowerShell

gvim 8.2 no vuelve a dibujar la pantalla al editar un mensaje de confirmación de git en Windows 10 PowerShell

Lo instalé vimen Windows 10 usandochocolatey. Cuando edito un archivo en powershell, ¡todo funciona muy bien!Incluso pude copiar y pegar para trabajar.. Sin embargo, cuando edito un mensaje de confirmación de git, vimno se vuelve a dibujar mi pantalla correctamente. Si yoforzar un redibujado de pantalla, puedo ver mi texto actualizado correctamente, pero eso es muy molesto.

Lo configuré gitpara usar vimcon:

git config --global core.editor vim

¿Cómo puedo hacer para vimcomportarme correctamente?

Respuesta1

Git para Windows incluye su propia versión de Vim como parte de la distribución. Esto se debe a que es necesario que haya un editor predeterminado, y el editor predeterminado para programas Unix como Git suele ser vi.

Cuando especifica el editor como vim, la versión que se utiliza es la versión que aparece primero en PATH, que probablemente sea la versión de Git para Windows si no ha especificado que se utilizará su versión personalizada. Esa versión de Vim probablemente quiera que la TERMvariable de entorno esté configurada para indicarle qué tipo de terminal usar y, como no es así, no se representa correctamente. Si está utilizando la implementación de Microsoft Terminal, probablemente desee utilizarla xterm-256colorcomo valor para la TERMvariable de entorno.

Si desea utilizar su versión personalizada de Vim, como la instalada por Chocolatey, debe ser anterior PATHo especificar la ruta completa. Git pasa el valor de la core.editoropción de configuración al shell, por lo que su comando debe cumplir con la sintaxis para una shimplementación POSIX, donde la barra invertida es un carácter de escape. Por lo tanto, querrá utilizar barras diagonales o comillas simples alrededor del nombre del programa.

Si tu versión de Vim es gráfica, entonces necesitas la -fopción para que no se desprenda del terminal. De lo contrario, Vim se inicia y se desconecta inmediatamente de la terminal, por lo que Git ve que el proceso que generó sale inmediatamente. Dado que ese proceso (su editor) salió, Git supone que ha terminado de editar. Pero como en realidad no editaste nada, Git cancela tu confirmación.

Respuesta2

TLDR

Darle a git la ruta directa y completa a mi ejecutable vim arregló cosas, y no sé por qué:

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

Las comillas simples alrededor de la ruta son importantes porque gitno sabe cómo manejar rutas con barras invertidas. Las comillas dobles alrededor de toda la configuración son importantes para que git no se aplique -f -f NONEal git configcomando. encontré -f -i NONEenesta respuesta, y no sé qué hace, pero git commitno funcionó sin él.

Cómo encontré el camino completo

vimagrega un c:\windows\vim.batarchivo, que es lo que powershellse utiliza para iniciar vimcuando escribes vim:

PS C:\Users\heath> Get-Command vim

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Application     vim.bat                                            0.0.0.0    C:\windows\vim.bat

vim.bates bastante simple:

@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"  %*

Así, mi vimcamino completo esC:\tools\vim\vim82\vim.exe

información relacionada