Как я могу заставить ConEmu, Far Manager и командную строку VS Developer хорошо играть вместе?

792
RaptorFactor

В настоящее время я пытаюсь настроить свою среду так, чтобы я мог открыть вкладку ConEmu, и она автоматически инициализирует Far Manager и среду командной строки VS Developer.

Моя неудачная попытка была такая:

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

Это работает в том смысле, что он выполняет то, что я хочу, но ConEmu это не нравится, потому что он оставляет активный экземпляр cmd.exe, поэтому при попытке закрыть вкладку вы всегда получите предупреждение, что не идеально.

Если вы никогда не видели этого раньше, это то, что появляется при закрытии вкладки, если вы используете вышеуказанную задачу:

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

После долгих поисков я нашел эту ссылку, которая внизу содержит комментарий автора ConEmu:

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

Он говорит это:

Да, это работает. Но этот метод оставил cmd.exe в вашем дереве рабочих процессов.

Другой способ - запустить vcvarsall.bat из вашей оболочки (PowerShell или Far Manager) и экспортировать измененную среду из cmd в родительский процесс. Преимущество - вы можете установить различные настройки во время выполнения.

Описание: https://code.google.com/p/cone ...

И пример команды (я использую это из Far Manager): "C: \ Program Files (x86) \ Microsoft Visual Studio 12.0 \ VC \ vcvarsall.bat" x86 & "% ConEmuBaseDir% \ ConEmuC.exe" / export = CON

Проблема с этим однако заключается в том, что я должен выполнить эту команду вручную после запуска далеко. Я не могу найти способ автоматического запуска этой команды после инициализации Far.

Это не совсем жизнеспособное решение сделать это вручную, потому что у меня так много разных сред для настройки. Учтите, что мне нужна отдельная вкладка для каждого компилятора, который я использую (MSVC, Clang, GCC, Intel C ++ - иногда несколько версий каждого и почти всегда несколько архитектур).

По сути, мне нужен способ настроить задачу так, чтобы я мог запустить пакетный файл, а затем Far (чтобы он наследовал переменные env), не оставляя висящий экземпляр cmd.exe. Или мне нужно иметь возможность настроить задачу так, чтобы я мог автоматически запускать команды (разные для каждой задачи) после запуска Far.

Я почти уверен, что был бы какой-то черный магический способ сделать это, но я еще недостаточно знаком с ConEmu / Far, чтобы понять это.

Если я впаду в отчаяние, то, возможно, в конце концов напишу плагин, но я бы предпочел этого избежать, если смогу.

2

2 ответа на вопрос

2
Maximus
  1. ConEmu has forking abitily. So, you may just call

    -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 has its own Macro system. You may either set up "Auto started" macro, or just pass it via command line. Consider proper quotation! Just change F2 F1 to your keys sequence. Easies way is adding required command to the F2 (User Menu).

    -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\")"" 
Запуск первой команды, кажется, сломал Far для меня. Например, вместо Ctrl + O, переключающего представление, я просто получаю «^ O» в приглашении. (Он также продолжает страдать от той же проблемы, вызывая подсказку при закрытии вкладки, но я предполагаю, что это связано с первой проблемой.) RaptorFactor 7 лет назад 0
Не `/ k`, а` / c`! Maximus 7 лет назад 1
Это приводит к тому, что вкладка остается открытой с сообщением об ошибке при закрытии, но, по крайней мере, всплывающее окно отсутствует, поэтому я, вероятно, могу с этим смириться. :) "ConEmuC: корневой процесс был жив менее 10 секунд, ExitCode = x00000103 (259). Нажмите Enter или Esc, чтобы закрыть консоль ..." Большое спасибо за ваш замечательный проект. RaptorFactor 7 лет назад 0
Еще один задокументированный ключ: `-new_console: n` Maximus 7 лет назад 1
О, я этого не видел. Благодарю. RaptorFactor 7 лет назад 0
0
romanliv

Я сделал это, объединив две предопределенные чудовищные команды для и для, используя &&:

-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