gvim 8.2는 Windows 10 Powershell에서 git 커밋 메시지를 편집할 때 화면을 다시 그리지 않습니다.

gvim 8.2는 Windows 10 Powershell에서 git 커밋 메시지를 편집할 때 화면을 다시 그리지 않습니다.

나는 vimWindows 10에 다음을 사용하여 설치했습니다.chocolatey. Powershell에서 파일을 편집하면 모든 것이 잘 작동합니다!복사해서 붙여넣기까지 해서 출근했어요. 그러나 git commit 메시지를 편집하면 vim화면이 제대로 다시 그려지지 않습니다. 만약 내가강제로 화면 다시 그리기, 업데이트된 텍스트를 제대로 볼 수 있지만 정말 짜증납니다.

git다음과 함께 사용하도록 구성했습니다 vim.

git config --global core.editor vim

어떻게 하면 vim제대로 행동할 수 있나요?

답변1

Windows용 Git은 배포판의 일부로 자체 버전의 Vim을 제공합니다. 기본 편집기가 있어야 하는데 Git과 같은 Unix 프로그램의 기본 편집기는 일반적으로 vi.

편집기를 로 지정하면 vim사용되는 버전은 의 첫 번째 버전입니다 PATH. 사용자 정의 버전을 사용하도록 지정하지 않은 경우 Windows용 Git 버전일 수 있습니다. 해당 버전의 Vim은 TERM사용할 터미널 유형을 알려주기 위해 환경 변수를 설정하기를 원할 것입니다. 그렇지 않기 때문에 제대로 렌더링되지 않습니다. Microsoft 터미널 구현을 사용하는 경우 환경 변수 xterm-256color의 값으로 사용하고 싶을 것입니다 TERM.

Chocolatey에서 설치한 것과 같은 사용자 정의 Vim 버전을 사용하려면 이전 버전이거나 PATH전체 경로를 지정해야 합니다. Git은 구성 옵션의 값을 core.editor셸에 전달하므로 명령은 sh백슬래시가 이스케이프 문자인 POSIX 구현 구문을 충족해야 합니다. 따라서 프로그램 이름 앞뒤에 슬래시나 작은따옴표를 사용하는 것이 좋습니다.

Vim 버전이 그래픽 버전인 경우 -f터미널에서 분리되지 않도록 하는 옵션이 필요합니다. 그렇지 않으면 Vim이 시작되고 터미널에서 즉시 분리되므로 Git은 Vim이 생성한 프로세스가 즉시 종료되는 것을 확인합니다. 해당 프로세스(편집기)가 종료되었으므로 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파일 을 추가합니다 .powershellvimvim

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

관련 정보