С помощью Notepad ++ для git внутри cygwin

Это расширение этого вопроса

Как использовать 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 "$*"

Ответы

Ответ 1

Я был прав о проблеме с cygwin. я изменил оболочку оболочки на

#!/bin/sh
'C:/Program Files (x86)/Notepad++/notepad++.exe' -multiInst -notabbar \
  -nosession -noPlugin "$(cygpath -w "$*")"

и он отлично работал.

Ответ 2

Вот полное решение без оболочки 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

Ответ 3

Я создал простой 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 может соответствовать многим аналогичным вариантам использования, нет необходимости создавать отдельную оболочку каждый раз. Это также удобно использовать из командной строки.

Ответ 4

#!/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'

Источник