
Я установил 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