MSYS 2 折腾手记

MSYS 2 折腾手记
Photo by Zetong Li / Unsplash

由于工作中在 Windows 下使用 Git,我接触到了 MinGW,但 MinGW 有一些不便之处,在尝试解决这些问题时,我找到了另一个更方便的环境 MSYS2,关于两者之间的对比,可以看一下 这篇文章

安装过程在 官网 有详细说明,这里记录的是我自己的 MSYS2 配置。

窗口最大化及进入指定目录


MSYS2 默认的终端为 Mintty,启动的命令位于安装目录下的 start_shell.cmd 中(如果找不到这个文件,需要参考官网安装说明更新一下):

:startmintty
start "%CONTITLE%" "%WD%mintty" -i /msys2.ico /usr/bin/bash --login %1 %2 %3 %4 %5 %6 %7 %8 %9

增加两个参数:

  • -w max:窗口最大化
  • env CHERE_INVOKING=1:启动后进入当前目录,而不是默认的用户根目录

修改后的命令如下:

:startmintty
start "%CONTITLE%" "%WD%mintty" -i /msys2.ico -w max env CHERE_INVOKING=1 /usr/bin/bash --login %1 %2 %3 %4 %5 %6 %7 %8 %9

然后修改 MYSYS2 快捷方式的属性,在起始位置一栏,填上要进入的目录,这样通过快捷方式启动 MSYS2 后,即可进入指定的目录,有关 Mintty 的参数说明可以看一下 这里

环境变量


在开发过程中发现,我本机安装的 PHP 和 Node 在 Windows 自带 cmd 下是可以执行的,但在 MSYS2中执行却提示 winpty:command not found,但通过完整的路径又可以执行,说明是 MSYS2 读取系统环境变量出了问题,解决方法是找到 start_shell.cmd 中的这一行:

rem set MSYS2_PATH_TYPE=inherit

去掉前面的 rem 注释,使这一行命令生效,表示设置 MSYS2 的环境变量继承自系统。

安装和配置 Git


Linux 下的大部分程序都可以在 MSYS2 自带的包管理工具中找到,这里执行一下即可安装:

pacman -S git

由于 MSYS2 的 Git 是依赖 Vim 的,这里也一起装上了,但是相比 Git 的官方版本有三处问题:

  • 进入某个 Git 项目的目录时,不会显示当前所在的分支
  • Git 子命令不支持 Tab 补全
  • Vim 缺少默认配置文件

需要先安装 Git 的官方版本(配置完成后可卸载),然后拷贝安装目录下的如下文件:

etc/profile.d/bash_completion.sh
etc/profile.d/git-prompt.sh
etc/vimrc

到 MSYS 安装目录的 etc\profile.d 下,然后修改 etc/bash.bashrc,找到这一行并在行首添加 # 将其注释:

PS1='\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[35m\]$MSYSTEM\[\e[0m\] \[\e[33m\]\w\[\e[0m\]\n\$ '

最后重启 MSYS2 即可看到效果。

设置 PhpStorm/WebStorm/Intellij 的 Terminal


以 PhpStorm 为例,默认的 Terminal 是 Windows 自带的 cmd,比较简陋,可以换成 Power Shell 或者 MSYS2 的 bash,后者的设置方法如下:打开 PhpStorm 的 Settings->Tools->Terminal,右侧的 shell path 填入如下内容(MSYS2 path 表示 MSYS2 的安装路径):

  • PhpStorm 版本为 2016.1.0 之前,包括 1.0
MSYS2 path\usr\bin\mintty.exe -w max MSYS2 path\usr\bin\env.exe CHERE_INVOKING=1 /usr/bin/bash --login -i
  • PhpStorm 版本为 2016.1.0 之后(注意引号)
"MSYS2 path\usr\bin\mintty.exe" -w max "MSYS2 path\usr\bin\env.exe" CHERE_INVOKING=1 /usr/bin/bash --login -i