Git dla Windows: Uruchom vima w tle bez ampersand (&)

4

Na moim komputerze z systemem Windows uruchamianie gVim wydaje się wiązać git z powłoką systemu Windows, natomiast jeśli uruchamiam z wiersza poleceń, tak nie jest.

Jak mogę uruchomić gVim (lub jakikolwiek inny program, naprawdę) bez wiązania powłoki i konieczności dodawania '& amp;' do końca każdego polecenia?

Każda pomoc w tym zakresie byłaby bardzo mile widziana.

Git Bash:

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

Wiersz polecenia systemu Windows:

> gvim hello.txt
> [ Can still access cursor and execute commands]
funseiki
źródło

Odpowiedzi:

2

Najszybszym (i prawdopodobnie najbrudniejszym) rozwiązaniem, które znalazłem, aby móc używać gvima w sposób, w jaki byłem przyzwyczajony, było zmodyfikowanie pliku .bashrc.

Do końca dodałem następującą funkcję:

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

The "$@" pobiera argumenty przekazane z powłoki i & zmusza gvima do działania w tle.

Nie chcę oznaczać tej odpowiedzi jako zaakceptowanej, ponieważ może istnieć lepsze rozwiązanie (np. Gdzieś spieprzyłem ustawienia msys / vim).

funseiki
źródło
Odkryłem, że w przybliżeniu 90% czasu działa idealnie. Około 10% czasu skupienia pozostaje w oknie git bash, powodując przypadkowe wpisanie kilku naciśnięć klawiszy vima do powłoki bash. Starsza wersja git nie miała tego problemu. Czy dotyczy to kogoś innego?
Jeff Irwin
1

Odpowiedź, którą odkryłem, że działa jak na moim Linuksie, to ustawienie aliasu w .bashrc:

alias gvim='start gvim'

Nadal nie jest to najbardziej idealna poprawka, ale wydaje mi się trochę czystsza niż tworzenie funkcji. Nie drukuje również linii identyfikatora procesu (przykład: „[1] 6840”) podczas jego uruchamiania lub zamykania okna zewnętrznego.

Wciąż jest problem z poprawką funkcji, która działa tylko dla rzeczy, dla których tworzony jest alias. Więc notatnik na przykład nadal blokuje bash, chyba że utworzysz uruchom notatnik Alias. Oparte na ten post na blogu MSDN wygląda na to, że pliki wykonywalne Windows mają flagę, która informuje konsolę, czy jest to aplikacja GUI, ale z tego co widzę, git bash nie rozróżnia na podstawie tej flagi w taki sam sposób, jak robi to cmd.exe. Gdybyś mógł dołączyć coś do każdego wpisanego polecenia, które sprawdziłoby .exe dla flagi GUI i przedrostek początek w oparciu o Twój wynik, dobrze by było iść.

Zurcher
źródło
Dlaczego uważasz, że aliasy są czystsze niż funkcje? Są praktycznie tym samym, a funkcje są znacznie bardziej wydajne i elastyczne.
G-Man
1
Ponieważ jedynym celem jest uruchomienie Gvima w niezależnym procesie, rzucanie początek polecenie z przodu robi to i nie więcej. Kiedy tworzysz funkcję, teraz piszesz kod, który przyjmuje argumenty i może robić wszystkie inne rzeczy, których nie musisz robić. Mocniejszy i bardziej elastyczny jest świetny, kiedy tego potrzebujesz, ale jest przesadny, gdy musisz po prostu wpisać słowo początek przed twoim rozkazem.
Zurcher
Dla mnie to zaczyna się nowe cmd okno oprócz instancja gvim. Jakiś pomysł dlaczego?
Kyle Strand
0

Możesz uruchomić dowolny program w tle z basha, używając &:

gvim &

Gvim różni się od większości programów i zwykle umieszcza się w tle bez potrzeby używania &. Aby uruchomić go na pierwszym planie, zwykle musisz go uruchomić za pomocą -f opcja. Nie wiem, dlaczego gvim nie zachowuje się tak z basha w systemie Windows.

garyjohn
źródło
1
Właśnie miałem nadzieję, że uda mi się uniknąć „i amp” ponieważ działa zgodnie z przeznaczeniem w zwykłym wierszu polecenia: /
funseiki