Ответ 1
Я был прав о проблеме с cygwin. я изменил оболочку оболочки на
#!/bin/sh
'C:/Program Files (x86)/Notepad++/notepad++.exe' -multiInst -notabbar \
-nosession -noPlugin "$(cygpath -w "$*")"
и он отлично работал.
Это расширение этого вопроса
Как использовать Notepad ++ (или другое) с помощью msysgit?
Я сделал все комбинации, которые я могу придумать для своей оболочки script. когда у меня есть консоль cygwin (im using mintty, если это имеет значение), я могу напечатать
npp {file}
и файл открывается правильно. но когда я делаю
git rebase -i HEAD~5
npp открывается пустым новым документом, а не интерактивным файлом для управления rebase. любая идея, почему это происходит?
git --version git version 1.7.9
последняя версия cygwin на машине Windows 7 и NPP 5.9.8
также, вот моя обертка script
#!/bin/sh
"C:/Program Files (x86)/Notepad++/notepad++.exe" -multiInst -notabbar \
-nosession -noPlugin "$*"
Я был прав о проблеме с cygwin. я изменил оболочку оболочки на
#!/bin/sh
'C:/Program Files (x86)/Notepad++/notepad++.exe' -multiInst -notabbar \
-nosession -noPlugin "$(cygpath -w "$*")"
и он отлично работал.
Вот полное решение без оболочки script.
В этих строках предполагается, что вы используете 64-битную версию Windows.
Выполните следующую команду из командной строки (Cygwin):
git config --global core.editor \
"'$(cygpath -u "C:\Program Files (x86)\Notepad++\notepad++.exe")' \
-multiInst -notabbar -nosession -noPlugin"
Это пример того, как ваш .gitconfig должен выглядеть как после команды:
[core]
excludesfile = /home/Aternus/.gitignore_global
autocrlf = input
safecrlf = true
editor = '/cygdrive/c/Program Files (x86)/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin
Я создал простой script для запуска произвольных команд Windows с аргументами пути в стиле UNIX:
cygrun.sh
#!/bin/sh
if test -z "$1"; then
echo "Usage: $(basename "$0" .sh) program [argument]..."
exit 1
fi
program=$1
shift
if test $# -ge 0; then
IFS=$'\n'
exec "$program" $(cygpath -w "[email protected]")
else
exec "$program"
fi
Вот как я могу использовать его в моей конфигурации git (предполагая, что cygrun
является символической ссылкой на cygrun.sh
где-то в PATH):
[core]
editor = cygrun 'C:/Program Files/Notepad2/Notepad2.exe'
[difftool "diffmerge"]
cmd = cygrun 'C:/Program Files/SourceGear/Common/DiffMerge/sgdm.exe' \"$LOCAL\" \"$REMOTE\"
Таким образом, один script может соответствовать многим аналогичным вариантам использования, нет необходимости создавать отдельную оболочку каждый раз. Это также удобно использовать из командной строки.
#!/bin/dash -e
if [ "$1" ]
then k=$(cygpath -w "$1")
elif [ "$#" != 0 ]
then k=
fi
Notepad2 ${k+"$k"}
Если нет пути, не пропустите путь
Если путь пуст, пропустите пустой путь
Если путь не пуст, перейдите в формат Windows.
Затем я устанавливаю эти переменные:
export EDITOR=notepad2.sh
export GIT_EDITOR='dash /usr/local/bin/notepad2.sh'
EDITOR позволяет script работать с Git
GIT_EDITOR позволяет script работать с командами концентратора