Wie kann ich ConEmu, Far Manager und die VS Developer-Eingabeaufforderung erhalten, um zusammen gut zu spielen?

908
RaptorFactor

Ich versuche gerade, meine Umgebung so einzurichten, dass ich eine ConEmu-Registerkarte öffnen kann, die Far Manager und die VS Developer-Eingabeaufforderungsumgebung automatisch initialisiert.

Mein fehlgeschlagener Versuch war folgender:

cmd.exe /k "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" amd64_x86 & far -new_console:d:C:\My\Code 

Dies funktioniert, indem es das ausführt, was ich will, aber ConEmu mag es nicht, weil es eine aktive cmd.exe-Instanz hinterlässt. Wenn Sie also versuchen, die Registerkarte zu schließen, erhalten Sie immer eine Warnung, die nicht ideal ist.

Wenn Sie dies noch nie zuvor gesehen haben, wird dies beim Schließen der Registerkarte angezeigt, wenn Sie die obige Aufgabe ausführen:

http://i.imgur.com/o0GyS5I.png

Nach einer ganzen Reihe von Suchen fand ich diesen Link, der unten einen Kommentar des ConEmu-Autors enthält:

http://www.gurustop.net/blog/2014/02/01/gebrauch-visual-studio-developer-command-prompt-with-powershell/

Er sagt das:

Ja, das funktioniert. Diese Methode hat jedoch cmd.exe in Ihrem Arbeitsprozessbaum belassen.

Führen Sie eine andere Möglichkeit aus, vcvarsall.bat über Ihre Shell (PowerShell oder Far Manager) auszuführen und die geänderte Umgebung von cmd in den übergeordneten Prozess zu exportieren. Der Vorteil - Sie können zur Laufzeit verschiedene Einstellungen vornehmen.

Beschreibung: https://code.google.com/p/cone ...

Und Beispielbefehl (ich verwende das von Far Manager): "C: \ Programme (x86) \ Microsoft Visual Studio 12.0 \ VC \ vcvarsall.bat" x86 & "% ConEmuBaseDir% \ ConEmuC.exe" / export = CON

Das Problem dabei ist jedoch, dass ich diesen Befehl manuell ausführen muss, nachdem er weit ausgeführt wurde. Ich kann anscheinend keine Möglichkeit finden, diesen Befehl nach der Initialisierung von Far automatisch auszuführen.

Es ist nicht wirklich eine praktikable Lösung, dies manuell durchzuführen, da ich so viele verschiedene Umgebungen einrichten muss. Bedenken Sie, dass ich für jeden Compiler, den ich verwende, einen anderen Tab möchte (MSVC, Clang, GCC, Intel C ++ - manchmal mehrere Versionen von jedem und ziemlich immer mehrere Architekturen).

Grundsätzlich brauche ich eine Möglichkeit, eine Aufgabe so einzurichten, dass ich entweder eine Batchdatei ausführen kann, gefolgt von Far (damit die Env-Variablen erben), ohne eine unzulängliche cmd.exe-Instanz zu hinterlassen. Oder ich muss in der Lage sein, eine Aufgabe so einzurichten, dass ich automatisch einen Befehl ausführen kann (nach Aufgabe unterschiedlich).

Ich bin mir ziemlich sicher, dass es eine schwarze Magie gibt, aber ich kenne ConEmu / Far noch nicht genug, um es herauszufinden.

Wenn ich extrem verzweifelt werde, werde ich wahrscheinlich ein Plugin schreiben, aber ich würde das lieber vermeiden, wenn ich kann.

2

2 Antworten auf die Frage

2
Maximus
  1. ConEmu hat Forking abitily. Sie können also einfach anrufen

    -new_console:d:C:\My\Code cmd.exe /c ""C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" amd64_x86 & ConEmuC -fork -c far" 
  2. Far Manager verfügt über ein eigenes Makrosystem. Sie können entweder das Makro "Automatisch gestartet" einrichten oder es einfach über die Befehlszeile übergeben. Beachten Sie das richtige Angebot! Wechseln F2 F1Sie einfach zu Ihrer Tastenfolge. Einfacher Weise fügt der F2 (Benutzermenü) den erforderlichen Befehl hinzu.

    -new_console:d:C:\My\Code cmd.exe /c ""C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" amd64_x86 & far "lua:Keys(\"F2 F1\")"" 
Das Ausführen des ersten Befehls scheint für mich weit zu brechen. Anstelle von Strg + O, um die Ansicht umzuschalten, bekomme ich beispielsweise an der Eingabeaufforderung "^ O". (Es besteht weiterhin das gleiche Problem, dass beim Schließen der Registerkarte eine Eingabeaufforderung angezeigt wird. Ich gehe jedoch davon aus, dass dies mit dem ersten Problem zusammenhängt.) RaptorFactor vor 8 Jahren 0
Nicht "/ k" sondern "/ c"! Maximus vor 8 Jahren 1
Das hat zur Folge, dass die Registerkarte beim Schließen mit einer Fehlermeldung geöffnet bleibt, aber es gibt zumindest kein Popup, sodass ich wahrscheinlich damit leben kann. :) "ConEmuC: Der Root-Prozess lebte weniger als 10 Sekunden, ExitCode = x00000103 (259). Drücken Sie die Eingabetaste oder die Esc-Taste, um die Konsole zu schließen ..." Vielen Dank für Ihr großartiges Projekt. RaptorFactor vor 8 Jahren 0
Ein weiterer dokumentierter Schalter: `-new_console: n` Maximus vor 8 Jahren 1
Oh, das habe ich nicht gesehen. Vielen Dank. RaptorFactor vor 8 Jahren 0
0
romanliv

Ich habe dies durch zwei vordefinierte Befehle für die ungeheure {} Far kombiniert und für Werkzeuge prompt unter Verwendung &&:

-new_console:t:"VS 15.0" -new_console:C:"%CommonProgramFiles(x86)%\microsoft shared\MSEnv\VSFileHandler.dll,38" cmd /c ""%ConEmuDrive%\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Auxiliary\Build\vcvarsall.bat" x64 && set "FARHOME=" & "%ConEmuDir%\..\Far Manager\far.exe" /w /p"%ConEmuDir%\Plugins\ConEmu;%FARHOME%\Plugins;%FARPROFILE%\Plugins"" 

Settings screenshot