1 votes

gvim 8.2 ne redessine pas l'écran lors de l'édition d'un message git commit dans Windows 10 powershell

J'ai installé vim sur Windows 10 en utilisant chocolatey . Lorsque je modifie un fichier dans powershell, tout fonctionne parfaitement ! J'ai même réussi à faire fonctionner le copier-coller . Cependant, lorsque j'édite un message git commit, vim ne redessine pas mon écran correctement. Si je forcer une redirection d'écran Je peux voir mon texte mis à jour correctement, mais c'est super ennuyeux.

J'ai configuré git à utiliser vim avec :

git config --global core.editor vim

Comment puis-je faire vim se comporter correctement ?

2voto

RookieRick Points 149

Git pour Windows fournit sa propre version de Vim dans la distribution. Cela est dû au fait qu'il doit y avoir un éditeur par défaut, et que l'éditeur par défaut pour les programmes Unix comme Git est généralement vi .

Lorsque vous spécifiez l'éditeur comme vim la version utilisée est la version qui figure en premier dans la base de données de l'UE. PATH qui est probablement la version Git pour Windows si vous n'avez pas spécifié que votre version personnalisée doit être utilisée. Cette version de Vim a probablement besoin de l'option TERM doit être définie pour lui indiquer le type de terminal à utiliser, et comme ce n'est pas le cas, le rendu n'est pas correct. Si vous utilisez l'implémentation de Microsoft Terminal, vous voudrez probablement utiliser xterm-256color comme valeur pour le TERM variable d'environnement.

Si vous souhaitez utiliser votre propre version de Vim, telle que celle installée par Chocolatey, elle doit être antérieure à la version de Vim installée dans l'application PATH ou vous devez spécifier le chemin complet. Git transmet la valeur de l'option core.editor à l'option de configuration Shell, votre commande doit donc respecter la syntaxe d'une option POSIX sh où backslash est un caractère d'échappement. Vous devez donc utiliser des barres obliques ou des guillemets simples autour du nom du programme.

Si votre version de Vim est graphique, vous avez besoin de l'option -f pour qu'il ne se détache pas du terminal. Sinon, Vim démarre et se détache immédiatement du terminal, de sorte que Git voit le processus qu'il a créé sortir immédiatement. Puisque ce processus (votre éditeur) est sorti, Git suppose que vous avez fini d'éditer. Mais comme vous n'avez en fait rien édité, Git abandonne votre commit.

1voto

mat Points 5365

TLDR

Donner à git le chemin direct entièrement qualifié vers mon exécutable vim a arrangé les choses, et je ne sais pas pourquoi :

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

Les guillemets simples autour du chemin sont importants car git ne sait pas comment gérer les chemins avec des backslashes. Les guillemets doubles autour de toute la configuration sont importants pour que git n'applique pas -f -f NONE à la git config commande. J'ai trouvé -f -i NONE sur cette réponse et je ne sais pas ce qu'il fait, mais git commit ne fonctionnait pas sans elle.

Comment j'ai trouvé le chemin complet

vim ajoute un c:\windows\vim.bat qui est ce que powershell utilise pour lancer vim lorsque vous tapez 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 est assez 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"  %*

Ainsi, mon plein vim Le chemin est C:\tools\vim\vim82\vim.exe

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X