Verwenden Sie Notepad ++ von Cygwin, ohne dass die Shell auf einen Exit-Code wartet

19

Ich verwende Cygwin und möchte Notepad ++ als Haupt-Shell-Editor verwenden, ähnlich wie das, was ich auf meinem Mac habe, wo ich mate whatevereine Instanz von TextMate öffnen kann . In meiner ~/.bashrcDatei in Cygwin habe ich den folgenden Alias ​​und die folgende Umgebungsvariable festgelegt:

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

Meistens funktioniert es: Wenn ich tippe np whateveroder wenn ein Cygwin-Programm $ EDITOR aufruft, wird Notepad ++ geöffnet.

Die Shell wartet jedoch, bis Notepad ++ geschlossen wird, und lässt bis dahin keine Eingaben zu. Dies mag für Bash spezifisch sein, aber wie kann ich Notepad ++ von Cygwin aus öffnen und der Shell mitteilen, dass sie nicht warten soll, bis ein Beendigungscode fortfährt? Das Hinzufügen von a &am Ende des Aliasbefehls funktioniert nicht ordnungsgemäß - es öffnet lediglich eine Datei ohne Titel und warnt, filename: command not foundanstatt die Datei zu öffnen.

Vielen Dank!

Andrew
quelle

Antworten:

16

Sie können eine bashFunktion verwenden, um die Argumente vor dem kaufmännischen Und zu übergeben:

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

ABER das größere Problem kann die ganze Idee sein, nicht zu warten, bis Notepad ++ beendet wird. Shell - Befehle , die verwendet werden wird $EDITORtypischerweise entworfen , warten , bis der Editor eine Anzeige sendet , dass die Bearbeitung abgeschlossen ist. Dies bedeutet normalerweise, dass der Editor beendet wurde (z . B. mit vioder nano).

Emacs hat eine Möglichkeit, Ihre Einstellung EDITORauf zu setzen. emacsclientWenn Sie mit der Bearbeitung fertig sind, drücken Sie eine magische Taste ( C-x #), um anzuzeigen, dass die Bearbeitung abgeschlossen ist. Wenn Notepad ++ für Cygwin-Benutzer etwas Ähnliches hätte, kann ich sehen, wie dies funktionieren würde.

Eine andere Alternative ist, einfachen, langweiligen Editor als Editor zu verwenden und Editor ++ für den intensiven Gebrauch zu reservieren (ich habe die Idee aus diesem Blog-Beitrag ).

Doug Harris
quelle
Super - das hat funktioniert. Ich werde mit dem Vanille-Editor als Editor und Notepad ++ als np ()
Andrew
Für Notepad muss auch gewartet werden, bis die Bearbeitung abgeschlossen ist
codezombie
8

Ich habe es mit einem einfachen Symlink gelöst.

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

Natürlich ist ~ / bin in meinem $ PATH.

Um nun eine Datei zu öffnen, tippe ich einfach "npp filename.txt" an der Cygwin-Eingabeaufforderung ein. Ich musste das & am Ende des Befehls nicht verwenden.

Dadurch wird auch ein Tab in das aktuell ausgeführte Notepad ++ - Fenster geworfen, anstatt ein anderes zu öffnen - UND wenn die Datei bereits geöffnet ist, wird sie nicht erneut geöffnet.

Ethan Vaughn
quelle
Wie fügt man ~ / bin zu $ ​​PATH hinzu?
Eric f
3

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

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

funktioniert auch für x86

mlanzero
quelle
2

Fügen Sie einfach ein Leerzeichen und ein kaufmännisches Und (&) an das Ende Ihres Befehls an, und die Shell kehrt sofort in den Eingabemodus zurück, während Editor ++ geöffnet bleibt.

beim bearbeiten:

Ich spreche nicht über das Hinzufügen zu Ihrem Alias. Fügen Sie es am Ende Ihres Befehls wie folgt hinzu:

np whatever &

Robert S. Ciaccio
quelle
1
Oh. Das sieht soweit gut aus. Gibt es eine Möglichkeit, das in das zu setzen, .bash_profiledamit ich es nicht die ganze Zeit tippen muss?
Andrew
Ich bin kein Bash-Experte, aber ich gehe davon aus, dass Sie Ihren Alias ​​mit einer Variablen versehen können, die das Argument ist, und das kaufmännische Und am Ende einfügen. Jemand, der geschickter mit Bash umgeht, könnte Ihnen wahrscheinlich die genaue Syntax geben. Ich wusste nur, wie ich Ihre Frage beantworten sollte, weil ich genau dasselbe tat, während ich in einer Windows-Entwicklungsumgebung arbeitete :)
Robert S Ciaccio
Sie können in Bash nicht festlegen, dass ein Alias ​​eine Variable übernimmt. Sie müssen eine Funktion oder ein Skript verwenden.
Bis auf weiteres angehalten.
1

Aliase akzeptieren keine interpolierten Argumente. Verwenden Sie stattdessen eine Funktion.

function np() { /cygdrive/c/Program\ Files/Notepad++/notepad++.exe $1 & }
garyjohn
quelle
1
#!/bin/sh
/cygdrive/c/Program\ Files/Notepad++/notepad++.exe $@ &

Dieses Skript startet Notepad ++ im Hintergrund und übergibt die Befehlszeilenargumente vor dem '&'

Wie Doug angeraten hat, kann ein $EDITORnicht blockierter Standard zu Problemen führen.

Leftium
quelle
0

In cygwin gibt es einen speziellen Befehl, um dies zu erreichen. Stellen Sie sicher, dass Sie run.exe herunterladen und sicherstellen, dass es sich in Ihrem PATH befindet (oder dass Ihr PATH die ausführbare Datei enthält)

alias np="run.exe /cygdrive/c/Program\ Files/Notepad++/notepad++.exe"
Reiche Homolka
quelle