Użyj Notepad ++ z Cygwin bez konieczności oczekiwania przez powłokę na kod wyjścia

19

Korzystam z Cygwin i chciałbym używać Notepad ++ jako głównego edytora powłoki, podobnie jak mam to na komputerze Mac, gdzie mogę pisać, mate whateveraby otworzyć instancję TextMate. W moim ~/.bashrcpliku w Cygwin mam następujący zestaw aliasów i zmiennych środowiskowych:

export EDITOR="/cygdrive/c/Program\ Files/Notepad++/notepad++.exe"
alias np="/cygdrive/c/Program\ Files/Notepad++/notepad++.exe"

Działa głównie: kiedy piszę np whateverlub gdy program Cygwin wzywa $ EDITOR, otwiera się Notepad ++.

Jednak powłoka czeka na zamknięcie Notepad ++ i do tego czasu nie zezwoli na żadne dane wejściowe. Może to być specyficzne dla bash, ale jak mogę otworzyć Notepad ++ z Cygwin i powiedzieć powłoce, aby nie czekała na kontynuację kodu wyjścia? Dodanie &na końcu polecenia aliasu nie działa poprawnie - po prostu otwiera plik bez tytułu i ostrzega filename: command not foundzamiast otwierać plik.

Dzięki!

Andrzej
źródło

Odpowiedzi:

16

Możesz wypróbować bashfunkcję przekazującą argumenty przed znakiem ampersand:

np ()
{
    /cygdrive/c/Program\ Files/Notepad++/notepad++.exe $* &
}

ALE większym problemem może być całkowity brak oczekiwania na zakończenie działania Notepad ++. Polecenia powłoki, które $EDITORzwykle używają, są zaprojektowane tak, aby czekać, aż edytor odeśle komunikat o zakończeniu edycji. Zazwyczaj oznacza to, że edytor zakończył pracę (np. Przy pomocy vilub nano).

Emacs ma sposób, aby ustawić EDITORsię emacsclient, a kiedy skończysz edycję, trafisz magicznego klawisza ( C-x #), aby wskazać, że edycja jest zakończona. Gdyby Notepad ++ miał coś podobnego dla użytkowników cygwina, widzę, jak to by działało.

Inną alternatywą jest użycie zwykłego, nudnego, prostego Notatnika jako edytora i zarezerwowanie Notatnika ++ do intensywnego użytku (wpadłem na pomysł z tego postu na blogu )

Doug Harris
źródło
Wspaniale - zadziałało. Idę z waniliowym Notatnikiem jako EDITOR i Notepad ++ jako np ()
Andrew
Notatnik wymaga również oczekiwania na zakończenie edycji
codezombie
8

Rozwiązałem to za pomocą prostego dowiązania symbolicznego.

ln -s /cygdrive/c/Program\ Files\ \(x86\)/Notepad++/notepad++.exe ~/bin/npp

Oczywiście ~ / bin jest w mojej $ PATH.

Teraz, aby otworzyć plik, po prostu wpisuję „npp nazwa_pliku.txt” w wierszu polecenia cygwin. Nie musiałem używać znaku & na końcu polecenia.

Spowoduje to także wrzucenie karty do aktualnie działającego okna Notepad ++ zamiast otwierania innego - ORAZ jeśli plik jest już otwarty, nie otworzy go ponownie.

Ethan Vaughn
źródło
Jak dodać ~ / bin do $ PATH?
eric,
3

eksport EDITOR = "/ cygdrive / c / Program \ Files \ '(x86)' / Notepad ++ / notepad ++. exe"

alias np = "/ cygdrive / c / Program \ Files \ '(x86)' / Notepad ++ / notepad ++. exe"

działa również dla x86

mlanzero
źródło
2

Wystarczy dodać spację i znak ampersand (&) na końcu polecenia, a powłoka natychmiast powróci do trybu wprowadzania, pozostawiając otwarty notatnik ++.

przy edycji:

Nie mówię o dodaniu go do swojego aliasu. Dodaj go na końcu polecenia w ten sposób:

np whatever &

Robert S. Ciaccio
źródło
1
Och Jak dotąd wygląda to dobrze. Czy istnieje sposób, aby to włączyć, .bash_profilewięc nie muszę go cały czas pisać?
Andrew
Nie jestem ekspertem od bashów, ale zakładam, że możesz sprawić, że twój alias przyjmuje zmienną będącą argumentem, a także zawiera znak ampersand na końcu. Ktoś mądrzejszy z bash może prawdopodobnie podać dokładną składnię. Wiedziałem tylko, jak odpowiedzieć na twoje pytanie, ponieważ robiłem dokładnie to samo podczas pracy w środowisku
deweloperskim
Nie możesz zmusić aliasu do przyjęcia zmiennej w Bash. Musisz użyć funkcji lub skryptu.
Wstrzymano do odwołania.
1

Aliasy nie przyjmują interpolowanych argumentów. Zamiast tego użyj funkcji.

function np() { /cygdrive/c/Program\ Files/Notepad++/notepad++.exe $1 & }
garyjohn
źródło
1
#!/bin/sh
/cygdrive/c/Program\ Files/Notepad++/notepad++.exe $@ &

Ten skrypt uruchamia Notepad ++ w tle, przekazując argumenty wiersza poleceń przed „&”

Zgodnie z zaleceniami Douga ustawienie domyślne, $EDITORktóre nie blokuje, może powodować problemy.

Leftium
źródło
0

W cygwin jest specjalne polecenie, aby to osiągnąć. Upewnij się, że pobierasz run.exe i upewnij się, że znajduje się on w ŚCIEŻCE (lub że ŚCIEŻKA zawiera plik wykonywalny)

alias np="run.exe /cygdrive/c/Program\ Files/Notepad++/notepad++.exe"
Rich Homolka
źródło