Git для Windows: запуск vim в фоновом режиме без амперсанда (&)

На моем компьютере с Windows, запущенный gVim, кажется, связывает оболочку git для Windows, тогда как если я запускаю из командной строки, это не так.

Как я могу иметь возможность запускать gVim (или любую другую программу, на самом деле), не связывая оболочку и не добавляя '&' в конец каждой команды?

Любая помощь по этому вопросу будет принята с благодарностью.

Git Bash:

$ gvim hello.txt
[Terminal is now blocked]
[Hit ctrl+c or close gvim, terminal takes input]
$ 

Командная строка Windows:

> gvim hello.txt
> [ Can still access cursor and execute commands]

3 ответа

Ответ, который я нашел, который работает так же, как на моем Linux-компьютере, заключается в установке псевдонима в вашем.bashrc:

alias gvim='start gvim'

Это все еще не самое идеальное решение, но оно кажется мне чище, чем создание функции. Также он не печатает строку идентификатора процесса (например: "[1] 6840") при его запуске или при закрытии внешнего окна.

Это все еще имеет проблему с исправлением функции, которое работает только для вещей, для которых вы создаете псевдоним. Например, блокнот все еще блокирует ваш bash, если вы не создадите псевдоним начального блокнота. Основываясь на этом посте в блоге MSDN, похоже, что исполняемые файлы Windows имеют флаг, который сообщает консоли, является ли это приложением с графическим интерфейсом, но из того, что я вижу, git bash не дифференцируется на основе этого флага так же, как cmd.exe делает. Если бы вы могли прикрепить что-то к каждой введенной команде, которая проверила бы.exe для флага GUI, и предварять запуск на основе вашего результата, тогда вам было бы хорошо.

Самое быстрое (и, возможно, самое грязное) решение, которое я нашел, было в состоянии использовать gvim так, как я привык, это модифицировать файл.bashrc.

Я добавил следующую функцию в конце этого:

gvim()
{
    /path/to/gvim.exe "$@" &
}

"$@" принимает аргументы, переданные из оболочки, и & заставляет gvim работать в фоновом режиме.

Я бы не хотел отмечать этот ответ как принятый, так как может быть лучшее решение (например, я где-то испортил свои настройки msys/vim).

Вы можете запустить любую программу в фоновом режиме из Bash, используя &:

gvim &

Gvim отличается от большинства программ и обычно ставит себя в фоновом режиме без необходимости &, Чтобы запустить его на переднем плане, вы обычно должны запустить его с -f вариант. Я не знаю, почему gvim не ведет себя так из-за bash в Windows.

Другие вопросы по тегам