6

Я хочу создать 2x2 сетку консоли, и я хочу, чтобы она была моей настройкой по умолчанию, то есть, когда я открываю ConEmu, эта настройка будет настройкой запуска. Я написал задачу, как показано ниже:

> * cmd -cur_console:n

* powershell -cur_console:s1TVn

cmd /A /Q /K "C:\dev\msys64\msys2_shell.bat" -cur_console:s1THn

ghci.exe -cur_console:s2THn

Проблема с последней командой. Я хочу запустить msys2 , но когда я запускаю свою задачу, для третьей строки я получаю консоль, но она не запускается внутри ConEmu, она открывает ее как отдельное окно. Как я могу исправить эту конфигурацию?

Кроме того, как я могу установить эту конфигурацию в качестве конфигурации по умолчанию при запуске ConEmu, в то время как теперь, когда я запускаю ее, я получаю только одну консоль cmd.

3 ответа3

11

У меня также были проблемы с получением оболочек MSYS2, MinGW32 и MinGW64 (v2016-12-07) для работы в ConEmu v161206.

Единственное (наполовину переносимое) рабочее решение, которое я нашел, заключается в следующем.

  1. Создайте новое задание с именем {Shells::mingw-64} и следующими командами в ConEmu для оболочки MinGW64:

    set MSYSTEM=MINGW64 & set MSYSCON=conemu64.exe & "%ConEmuDir%\..\..\..\msys64\usr\bin\bash.exe" --login -i -new_console:C:"%ConEmuDir%\..\..\..\msys64\mingw64.exe"
    
  2. Создайте новое задание с именем {Shells::mingw-32} и следующими командами в ConEmu для оболочки MinGW32:

    set MSYSTEM=MINGW32 & set MSYSCON=conemu64.exe & "%ConEmuDir%\..\..\..\msys64\usr\bin\bash.exe" --login -i -new_console:C:"%ConEmuDir%\..\..\..\msys64\mingw32.exe"
    
  3. Создайте новую задачу с именем {Shells::msys2-64} и следующими командами в ConEmu для оболочки MSYS2:

    set MSYSTEM=MSYS & set MSYSCON=conemu64.exe & "%ConEmuDir%\..\..\..\msys64\usr\bin\bash.exe" --login -i -new_console:C:"%ConEmuDir%\..\..\..\msys64\msys2.exe"
    

Внимание: измените относительные пути выше, чтобы они соответствовали пути MSYS2 в вашей системе.

Решение является наполовину переносимым, поскольку в нем явно указывается исполняемый файл ConEmu (измените его на ConEmu.exe для x86).

Я не уверен, имеет ли значение значение переменной среды MSYSCON . Я установил его только для безопасности, потому что пакетный файл msys2_shell.cmd также устанавливает его.

Альтернативой является использование пакетного сценария msys2_shell.cmd . Этот подход имеет огромный недостаток: msys2_shell.cmd порождает новый процесс с помощью команды Windows START , поэтому в ConEmu добавляются две вкладки.

  1. Создайте новое задание с именем {Shells::mingw-64} и следующими командами в ConEmu для оболочки MinGW64:

    "%ConEmuDir%\..\..\..\msys64\msys2_shell.cmd" -mingw64 -conemu -new_console:C:"%ConEmuDir%\..\..\..\msys64\mingw64.exe"
    
  2. Создайте новое задание с именем {Shells::mingw-32} и следующими командами в ConEmu для оболочки MinGW32:

    "%ConEmuDir%\..\..\..\msys64\msys2_shell.cmd" -mingw32 -conemu -new_console:C:"%ConEmuDir%\..\..\..\msys64\mingw32.exe"
    
  3. Создайте новую задачу с именем {Shells::msys2-64} и следующими командами в ConEmu для оболочки MSYS2:

    "%ConEmuDir%\..\..\..\msys64\msys2_shell.cmd" -msys -conemu -new_console:C:"%ConEmuDir%\..\..\..\msys64\msys2.exe"
    

msys2_shell.cmd предназначен для использования непосредственно из CMD.EXE с ConEmu64.exe / ConEmu.exe в PATH

msys2_shell -mingw64 -conemu

Эта команда открывает новую вкладку MinGW64 в ConEmu.

tl; dr: я рекомендую первый подход. Вот скриншот в качестве доказательства в ConEmu:

Рабочая оболочка MSYS2 MinGW64 в ConEmu

6

Что делать на самом деле довольно просто, когда вы очистите все слои. Это хорошо работает как вызов (не забудьте изменить его в соответствии с вашим конкретным местом установки MSYS2):

set CHERE_INVOKING=1 & set MSYSTEM=MINGW64 & "c:\msys64\usr\bin\bash.exe" --login -i

Я лично рекомендую установить оболочку для наследования вашего PATH:

set CHERE_INVOKING=1 & set MSYSTEM=MINGW64 & set MSYS2_PATH_TYPE=inherit & "c:\msys64\usr\bin\bash.exe" --login -i

Моя страница настроек задач ConEmu в конечном итоге выглядит следующим образом: ConEmu Startup:: Страница задач

Разбивая все это

MSYS2 любит настраивать оболочку в соответствии с переменными среды, а не параметрами командной строки. Передача параметров в программу таким способом может показаться неестественной на первый взгляд, но в основном она просто следует следующей простой последовательности: set VAR=value & set VAR2=value & "c:\path\to\command" [args]

  • CHERE_INVOKING - если установлено в 1, bash запускается в текущем рабочем каталоге, в противном случае он запускается в домашнем каталоге пользователя. Это должно быть установлено в 1 чтобы позволить оболочке работать должным образом из контекстного меню окна проводника.

  • MSYSTEM - какую подсистему MSYS2 использовать. Их три: MSYS, MINGW32 и MINGW64. Подсистема MSYS должна использоваться только для командных операций pacman поэтому я обычно вызываю ее только при помощи значка меню запуска old-skool в очень редких случаях, когда это необходимо. MINGW32 бесполезен для всех избранных пользователей, и вы наверняка знаете, кто вы есть.

  • MSYS2_PATH_TYPE - если снята с охраной MSYS использует минимальную среду PATH , которая содержит только двоичные файлы MSys и пару выбор пути системы Windows , и является обязательным для режима MSYSTEM=MSYS оболочки только. Для оболочек MINGW рекомендуется использовать inherit - я использую MSYS2_PATH_TYPE=inherit без проблем в течение многих лет.

Есть еще одна переменная MSYSCON упомянутая в другом ответе и упоминаемая в msys2_shell.cmd - игнорируйте ее. Он предназначен только для использования в командном файле msys2_shell.cmd и не влияет на поведение инициализации оболочки bash.exe или MSYS.

Место установки MSYS2

Путь MSYS2 намеренно жестко задан как c:\msys64\ так как это место установки по умолчанию для установщика MSYS2 Windows. В этом случае не имеет смысла использовать %ConEmuDir% поскольку он относится к %PROGRAMFILES% , а MSYS2 обычно устанавливается относительно корневого каталога жесткого диска. Обратите внимание , что это имеет смысл %ConEmuDir% при обращении к оболочке MSYS2 , которая поставляется с Git для Windows, так что устанавливается %PROGRAMFILES%

Нет простого способа узнать местоположение установки MSYS2. MSYS2 также не настроил переменную окружения, как бы мне этого ни хотелось. Разве не было бы здорово, если бы у MSYS2 была возможность экспортировать что-то вроде MSYSTEM_HOME в среду вашей машины? Но это не так, поэтому вы, как пользователь, должны знать, где он установлен, и указать ConEmu там.

Что касается msys2_shell.cmd :

Не используйте это. Пакетный файл имеет неправильное имя. Он должен называться msys2_terminal.cmd или аналогичным, поскольку на самом деле он настраивает весь терминал для оболочки. Это распространенная ошибка терминологии, особенно в операционных системах Windows, где никогда не было четкого отделения терминала от оболочки. Вот как это работает, объяснено с точки зрения пользователя Windows:

  • Оболочка - это командный процессор и пакетный / скрипт-бегун. По сути, это приложение командной строки, очень похожее на любое другое приложение командной строки. Оболочка даже не требует никаких видимых оконных или клавиатурных подключений. Он может работать полностью в фоновом режиме над файлами, потоками или другими источниками ввода / вывода данных.

  • Терминал - это оконное приложение , предоставляющее интерфейс клавиатуры / мыши для программы оболочки. В окнах его часто называют консольным окном. Команды клавиатуры передаются в программу оболочки, а вывод отображается внутри окна с полосами прокрутки, цветным текстом и другими забавными функциями.

В этом сценарии я хочу, чтобы мой терминал был ConEmu, а моя оболочка - BASH (mingw64). Поэтому я хочу, чтобы ConEmu запускал оболочку и только оболочку. Я не хочу, чтобы ConEmu начинал с мяты. Это оба терминала, и это заставит нас получить вторичные всплывающие окна - одно для ConEmu и одно для mintty. Но это именно то, что делает попытка запустить msys2_shell.cmd . Так что не используйте это.

3

Загляните внутрь msys2_shell.bat чтобы получить ответ. Эта партия запускает Mintty вместо Bash Shell. Бесполезный. Измените третью строку на полный путь к bash.exe -l -i .

как я могу установить эту конфигурацию в качестве конфигурации по умолчанию при запуске ConEmu

В ConEmu есть страница настроек "Автозагрузка", не так ли?

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .