Ich führe eine Anwendung über die Eingabeaufforderung oder eine Git- Shell aus und möchte die Ausgabe in den Editor übertragen, um sie später leichter überprüfen und bearbeiten zu können.
Ich habe Folgendes versucht, erhalte aber immer eine leere Instanz von Notepad:
diff file1.txt file2.txt | notepad
Mir ist bekannt, dass ich die Ausgabe in eine andere Datei umleiten und die Datei dann im Editor öffnen kann. Ich möchte den zusätzlichen Schritt vermeiden, da ich es nur gewohnt bin, auf Nicht-Windows-Systemen auf Vim oder weniger zuzugreifen.
windows
command-line
notepad
Der Hochstapler
quelle
quelle
more
unter Windows eine Pipe-Funktion verwenden .vim
Warum nicht einfach installieren, da Sie mit vertraut sind ?Antworten:
Soweit ich das beurteilen kann, gibt es keine Möglichkeit, direkt in Notepad weiterzuleiten.
Sie können jedoch Rohr in
clip
und dann fügen Sie ihn in Notepad, etwa so:Dann drücken Sie einfach Ctrl+ Vim Editor.
quelle
&& notepad file3.txt
?Ziehen Sie in Betracht, Vim oder in Ihrem Fall gVim zu verwenden, wenn Sie eine grafische Umgebung bevorzugen.
Anschließend können Sie einen einzelnen Bindestrich als Argument eingeben, der Vim / gVim anweist, von der Standardeingabe zu lesen.
quelle
:%!diff file1.txt file2.txt
-
wird oft als "read from stdin" bezeichnet, daher ist dies nicht streng auf "read from stdin" beschränktvim
. Andere Editoren verwenden-i
(zBkate
).Hier ist ein kurzes Windows-Programm, das es richtig macht (ohne die Zwischenablage zu überladen). Es sollte an PowerShell anpassbar sein, und ich könnte diese Antwort aktualisieren, wenn ich die Zeit dazu habe, aber Sie können das Programm auch direkt verwenden.
Wie wäre es mit PowerShell? Keine Notwendigkeit, eine andere Anwendung zu installieren. Leider haben Sie werden benötigen eine Skriptdatei irgendwo in Ihrem erstellen
PATH
...Kurze Version, die Sie verwenden können
Wenn Sie eine Batch-Datei (z. B.
ShowInNotepad.bat
) mit folgendem Inhalt erstellen und an einem beliebigen OrtPATH
ablegen:Sie können dann einfach
echo blah | ShowInNotepad
von überall anrufen !Beachten Sie, dass dies voraussetzt , dass Sie eine neuere Version von Windows (Vista +) verwenden und PowerShell nicht deaktiviert oder das .NET Framework nicht deinstalliert haben. Mit anderen Worten, eine Windows-Standardinstallation wird funktionieren.
Ausführliche Erklärung und Alternativen
Der einfachste Weg, den ich mir vorstellen kann, ist die Automatisierung der Einfüge- ( Ctrl+ V) Aktion. Was zumindest eine andere Antwort bereits tut, aber diese AHK verwendet - Sie haben möglicherweise mehr Glück, wenn PowerShell in einer gesperrten Unternehmensumgebung funktioniert.
Fahren wir mit dem Drehbuch fort, ja?
Es ist ziemlich unkompliziert, daher werde ich das Skript nicht mehr erklären als die Kommentare, die es bereits tun.
Verwendungszweck
Um es zu verwenden, müssen Sie nur das Skript in eine
.ps1
Datei (z. B.ShowInNotepad.ps1
) platzieren, es irgendwo in IhrerPATH
und dann aufrufen,powershell ShowInNotepad.ps1
nachdem Sie den Text, den Sie in der Zwischenablage anzeigen möchten, platziert haben.Beispiel:
Leider kann das Ausführen von PowerShell-Skripten manchmal schwierig sein (Ausführungsrichtlinien und alles). Aus diesem Grund habe ich dieses Skript zu einem Einzeiler zusammengefasst, den Sie direkt über die Eingabeaufforderung aufrufen oder in eine Batchdatei einfügen können:
Wenn Sie eine Batch-Datei (z. B.
ShowInNotepad.bat
) mit folgendem Inhalt erstellen und an einem beliebigen OrtPATH
ablegen:Sie können dann einfach
echo blah | ShowInNotepad
von überall anrufen !quelle
Save
und das Beenden bei geändertem Verhalten unterschiedlich. Abgesehen davon, dass Sie Notepad nicht selbst ersetzen oder den Text direkt in das Bearbeitungssteuerelement einfügen müssen, gibt es nicht viele andere Optionen. Natürlich hat diese Methode den Nachteil, dass die Inhalte der Zwischenablage gelöscht werden (obwohl diese ohnehin kurzlebig sein sollen). Ich denke nicht, dass es ein großes Problem ist, den Fokus zu verlieren. Es ist ein ...ShowWindow
und dem Senden von Tastenanschlägen). Und diese Methode erfordert ein bisschen mehr Setup (Erstellen der Skriptdatei), ja.Wie wäre es mit AutoHotkey ?
Speichern Sie Folgendes als
stdin.ahk
und legen Sie es in Ihrem AutoHotkey-Verzeichnis ab:Dann die Kommandozeile:
Leitet die Ausgabe des Befehls in den Editor, solange das Fenster geöffnet und mit einem Titel versehen ist
Untitled - Notepad
. Falls das Fenster nicht aktiv ist, puffert es fröhlich im Hintergrund, bis das Fenster aktiv ist. Sie können sogar zu einem anderen Programm wechseln und es wird erneut gepuffert.Dies scheint zu sterben, wenn das Programm, das auf unsere Standardeingabe ausgegeben wird, stirbt ...
(Zur Information, der stdin () Code war von hier aus unverschämt einen halben Zoll entfernt )
quelle
Das ist durchaus möglich; Ich habe es einfach versucht. Ich gehe davon aus, dass Notepad standardmäßig zum Öffnen von txt-Dateien eingerichtet ist:
OK, Sie erstellen technisch eine Datei, diese wird jedoch nicht gespeichert.
Eine weitere Option ist das Piping in mehr.
quelle
output.txt
haben, wird dies zu Problemen führen. Etwas sicherer wäre zu bedienen%temp%/somerandomstring.txt
.Hier ist ein hässlicher, aber effektiver Weg, um dies zu erreichen:
Versenden Sie nur Textausgaben. Andere Daten werden möglicherweise als Steuerzeichen interpretiert (STRG, ALT, ENTF usw.).
quelle
Hier sind einige VBScript-basierte Lösungen, die möglicherweise funktionieren (obwohl sie sich ein wenig darauf verlassen, dass Apps rechtzeitig geöffnet werden):
pipe2key.vbs - öffnet die als erstes Argument angegebene Anwendung und sendet StdIn als Tastendruck an diese. Muss mit cscript.exe verwendet werden, da wscript keinen StdIn-Zugriff bietet. Wahrscheinlich ziemlich langsam für lange Dokumente - aber die Zwischenablage wird nicht überladen
Anwendungsbeispiel:
diff file1.txt file2.txt | cscript pipe2key.vbs notepad.exe
Oder pasteinto.vbs. Automatisiert die STRG-V-Operation nach dem Start einer App (verwendet daher den Befehl 'clip', wie in den vorherigen Antworten erwähnt). Deutlich schneller und sauberer (meiner Meinung nach) als pipe2key.vbs, aber der Prozess wird die Zwischenablage überschreiben
Anwendungsbeispiel:
diff file1.txt file2.txt | clip && pasteinto notepad.exe
quelle
So etwas "könnte" funktionieren.
Oh, du hast nicht gemerkt, dass du das jedes Mal manuell machen würdest (nach den Geräuschen). Möglicherweise können Sie jedes Mal ein Makro oder eine andere Methode erstellen, um den Vorgang zu beschleunigen. Da bin ich mir nicht sicher.
diff file1.txt file2.txt > file.txt | sleep 1 | notepad.exe file.txt | rm file.txt
Es müsste den Diff-Inhalt in die Datei file.txt schreiben, damit er die gesamte Diff-Operation lädt. Ich bin mir nicht sicher, ob dies der Fall ist. In diesem Fall gibt es möglicherweise eine Möglichkeit, zwischen den Pipe-Vorgängen eine Pause einzulegen.
quelle
&
,&&
und||
sind Operatoren zum Verketten von Befehlen. Alle 3 verhalten sich unterschiedlich, wenn ein Befehl einen Rückgabewert ungleich 0 generiert.|
ist ganz anders , wie es verwendet wird , Rohrausgang von einem Programm zum anderen. Das Ergebnis könnte das sein, was Sie wollten, aber die Verwendung eines der Verkettungsoperatoren macht die Absicht klarer, da in diesem Beispiel keine eigentliche Verrohrung gewünscht wird. Weitere Hinweise: microsoft.com/resources/documentation/windows/xp/all/proddocs/…Meine Sprache ist nicht Englisch, also entschuldige Fehler.
Ich denke, Sie können die Ausgabe nicht direkt in den geöffneten Editor stellen. Vielleicht irre ich mich. Sie müssen eine Datei mit der Ausgabe erstellen, um daran arbeiten zu können. Das Befehls-T-Stück kann die Ausgabe an zwei oder mehrere Befehle oder Dateien gleichzeitig leiten.
Mann Tee
Vergessen Sie nicht, >> stattdessen> zu verwenden, wenn Sie die Ausgabe in die Datei umwandeln. Das> überschreibt die Datei, >> fügt die Ausgabe nach dem hinzu, was sich bereits in dieser Datei befindet.
quelle
tee
ist normalerweise unter Windows nicht verfügbar, und selbst wenn dies der Fall wäre, würde dies bei diesem Problem nicht helfen.Das kannst du nicht, Notepad ist dafür zu limitiert! Besser noch ... installieren Sie Cygwin und umgehen Sie all diesen "Mangel an Funktionen" von Windows. Sie können dann den Befehl verwenden, den Sie bereits kennen.
AFAIK, sehr wenige Windows-Programme unterstützen Pipelining, noch schlimmer für GUI-Programme.
Sie können versuchen, Funktionsanforderungen in einem der "Windows Tail" -Programme zu öffnen, um diese hinzuzufügen.
quelle