我想创建一个 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 控制台。
答案1
查看内部msys2_shell.bat
以获取答案。此批处理运行 mintty 而不是 bash shell。没用。将第三行更改为 的完整路径bash.exe -l -i
。
当我启动 ConEmu 时,如何将此配置设置为默认配置
ConEmu 中有“启动”设置页面,不是吗?
答案2
一旦剥离所有层,要做的事情实际上非常简单。这可以很好地用作调用(确保将其修改为您的特定 MSYS2 安装位置):
set CHERE_INVOKING=1 & set MSYSTEM=MINGW64 & "c:\msys64\usr\bin\bash.exe" --login -i
我个人建议设置 shell 来继承你的 PATH:
set CHERE_INVOKING=1 & set MSYSTEM=MINGW64 & set MSYS2_PATH_TYPE=inherit & "c:\msys64\usr\bin\bash.exe" --login -i
分解
MSYS2 喜欢根据环境变量而不是命令行参数来配置 shell。以这种方式将选项传递给程序乍一看可能不自然,但基本上它只是遵循以下简单的序列:set VAR=value & set VAR2=value & "c:\path\to\command" [args]
CHERE_INVOKING
- 如果设置为 1,bash 将从当前工作目录中启动,否则将从用户主目录中启动。需要将其设置为1
允许 shell 从资源管理器窗口上下文菜单中按预期工作。MSYSTEM
- 使用哪个 MSYS2 子系统。有三个:MSYS、MINGW32 和 MINGW64。子系统MSYS
应该只用于pacman
命令操作,因此我通常只在极少数需要时通过老式开始菜单图标调用它。MINGW32
对于少数用户来说,它对所有人来说都是无用的,您可能已经知道自己是谁了。MSYS2_PATH_TYPE
PATH
- 如果未设置,MSYS 将使用仅包含 MSYS 二进制文件和几个选定的 Windows 系统路径的最小环境,并且是MSYSTEM=MSYS
shell所需的模式仅有的。对于MINGW
shell,建议使用inherit
——我已经使用MSYS2_PATH_TYPE=inherit
多年,没有问题。
MSYSCON
另一个答案提到了另一个变量,并在msys2_shell.cmd
-- 中引用了它。它仅供msys2_shell.cmd
批处理文件内使用,与 bash.exe 或 MSYS shell 初始化的行为无关。
MSYS2 安装位置
MSYS2 路径被刻意硬编码为,c:\msys64\
因为这是 MSYS2 Windows 安装程序的默认安装位置。在这种情况下使用没有意义,%ConEmuDir%
因为这是相对于%PROGRAMFILES%
,而 MSYS2 通常相对于 进行安装根目录硬盘驱动器。请注意,做%ConEmuDir%
在引用 MSYS2 shell 时使用是有意义的适用于 Windows 的 Git, 因为是相对于 安装%PROGRAMFILES%
。
没有简单的方法可以知道 MSYS2 的安装位置。MSYS2 也没有设置环境变量,尽管我希望有。如果 MSYS2 有一个选项可以将某些东西导出MSYSTEM_HOME
到您的机器环境中,那不是很棒吗?但它没有,所以作为用户,您完全需要知道它的安装位置并将 ConEmu 指向那里。
关于msys2_shell.cmd
:
不要使用它。批处理文件的名称不正确。它应该被称为msys2_terminal.cmd
或类似名称,因为它实际上执行的是为 shell 设置整个终端。这是一个常见的术语错误,尤其是在 Windows 操作系统上,因为从来没有真正明确区分终端从壳。以下是从 Windows 用户角度解释其工作原理:
壳- 这是命令处理器和批处理/脚本运行器。它本质上是一个命令行应用程序,与任何其他命令行应用程序非常相似。shell 甚至不需要任何可见的窗口或键盘连接。它可以完全在后台对文件、流或其他数据输入/输出源进行操作。
终端- 这是一个窗口应用程序提供键盘/鼠标接口外壳程序在 Windows 中,它通常被称为控制台窗口。键盘命令通过管道传输到 shell 程序,输出以滚动条、彩色文本和其他有趣功能显示在窗口内。
在这种情况下,我希望我的终端康埃穆和我的壳BASH(mingw64).因此我想要康埃穆启动 shell 并仅有的壳。我不想康埃穆开始薄荷味。这两个都是终端,这会导致我们得到第二个弹出窗口——一个用于 ConEmu,一个用于 mintty。但这正是尝试运行msys2_shell.cmd
将要做的事情。所以不要使用它。
答案3
我在让 MSYS2、MinGW32 和 MinGW64 shell(v2016-12-07)在 ConEmu v161206 中运行时也遇到了问题。
我发现的唯一(半可移植的)工作解决方案如下。
{Shells::mingw-64}
在 ConEmu 中为 MinGW64 shell创建一个具有名称和以下命令的新任务:set MSYSTEM=MINGW64 & set MSYSCON=conemu64.exe & "%ConEmuDir%\..\..\..\msys64\usr\bin\bash.exe" --login -i -new_console:C:"%ConEmuDir%\..\..\..\msys64\mingw64.exe"
{Shells::mingw-32}
在 ConEmu 中为 MinGW32 shell创建一个具有名称和以下命令的新任务:set MSYSTEM=MINGW32 & set MSYSCON=conemu64.exe & "%ConEmuDir%\..\..\..\msys64\usr\bin\bash.exe" --login -i -new_console:C:"%ConEmuDir%\..\..\..\msys64\mingw32.exe"
{Shells::msys2-64}
在 ConEmu 中为 MSYS2 shell创建一个具有名称和以下命令的新任务: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 批处理文件msys2_shell.cmd
也设置了它。
另一种方法是使用msys2_shell.cmd
批处理脚本。这种方法的缺点是需要msys2_shell.cmd
通过 Windows 命令生成新进程START
,因此在 ConEmu 中添加了两个选项卡。
{Shells::mingw-64}
在 ConEmu 中为 MinGW64 shell创建一个具有名称和以下命令的新任务:"%ConEmuDir%\..\..\..\msys64\msys2_shell.cmd" -mingw64 -conemu -new_console:C:"%ConEmuDir%\..\..\..\msys64\mingw64.exe"
{Shells::mingw-32}
在 ConEmu 中为 MinGW32 shell创建一个具有名称和以下命令的新任务:"%ConEmuDir%\..\..\..\msys64\msys2_shell.cmd" -mingw32 -conemu -new_console:C:"%ConEmuDir%\..\..\..\msys64\mingw32.exe"
{Shells::msys2-64}
在 ConEmu 中为 MSYS2 shell创建一个具有名称和以下命令的新任务:"%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
该命令在 ConEmu 中打开一个新的 MinGW64 选项卡。
总结:我推荐第一种方法。以下是 ConEmu 中的截图作为证明:
答案4
要在现有 ConEmu 实例中打开 MSYS2 Shell 选项卡,您可以使用以下设置配置任务:
- 姓名:
Bash::MSYS2 Bash
- 任务参数:
-dir C:\some-start-dir -icon C:\msys64\msys2.ico
- 命令:
C:\msys64\msys2_shell.cmd -defterm -no-start -shell bash -where C:\some-start-dir -new_console:m:""
这些选项-defterm
和-no-start
可以防止在 ConEmu 之外打开单独的窗口。
该选项指示 ConEmu,当您将 Windows 路径复制/粘贴到终端窗口时,-new_console:m:""
它不会在对话过程中自动将路径前缀为 Unix 样式。/mnt/