如何在Cygwin中使用Z-shell

本文详细介绍了如何利用Cygwin在Windows环境下实现Unix/Linux风格的命令行体验,并通过安装Z-Shell来增强Shell功能。文章进一步展示了如何通过oh-my-zsh进行个性化配置,包括安装所需软件包、更改默认Shell以及调整终端外观。最后,作者分享了在使用过程中遇到的有趣现象,如特定提示符显示问题。


Cygwin是个很牛逼的东西。Cygwin是Unix上的许多自由软件在Microsoft Windows上的实现。通过Cygwin,你就可以在Windows上使用你在Unix或Linux上熟悉的各种(不是全部)shell命令了。

你在安装Cygwin(就是那个setup.exe文件)时,在Select Packages步骤,可以通过搜索安装你想要装的软件包,比如说 你可以通过选择Editers下的vim来安装VIM。要注意不要选择错了就行,每个软件包Package栏会有该软件的名字和介绍,VIM的话是vim: Vi IMproved - enhanced vi editor。当你安装完发现你少装了某个包时,你完全可以再运行setup.exe,然后只选择你要安装的那个包就行了。

Z-Shell是众多shell中的一个,补全功能比bash要强太多,同时命令和配置文件也都是兼容的。这个oh-my-zsh是用来方便管理Z-Shell配置的,能让你更方便的使用插件和主题。要想在cygwin中用Z-Shell,其实就是在Select Packages时搜索zsh,选中Shells下的zsh: The Z-Shell。为了能方便的用oh-my-zsh,也要安装一下Net下的curl包。安装完后你运行zsh就应该可以进入Z-Shell环境了。退出Z-Shell,在Bash中运行以下命令:

curl -L https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh | sh

oh-my-zsh会自动安装好,在Linux下通过:

chsh -s /bin/zsh

可以让Z-Shell成为默认Shell,但cygwin下没有这条命令。但你可以更改/etc/passwd文件来达到更改用户shell的效果。

vim /etc/passwd

将你的用户名所在行中的/bin/bash改为/bin/zsh即可。oh-my-zsh中的内置主题列表可以参看这个页面,我比较喜欢ys主题,直接将~/.zshrc中的ZSH_THEME值设置为ys即可。还是可以给cygwin terminal设置下背景色,字体等,terminal中间右击选择options设置相应参数即可。我在Windows上装了Monaco字体,选择10-point大小,背景色设置成R=35, G=58, B=64,透明度选择Med.。对了,我在用ys主题时,提示符中本应该显示我hostname的地方却显示不出来,但cygwin terminal的标题栏上却正常显示hostname信息,weird.

--EOF--




http://hanhaishan.com/post/zsh_in_cygwin

<think>我们正在处理一个关于在Cygwin中配置MSVC开发环境的问题。用户希望了解如何在Cygwin中设置Microsoft Visual Studio(MSVC)的开发环境。 首先,我们需要理解Cygwin是什么。Cygwin是一个在Windows上提供类Unix环境的兼容层。它允许用户运行许多Linux/Unix下的工具和应用程序。然而,MSVC是微软的编译器,通常通过Visual Studio安装,并且它的环境通常是通过Windows命令提示符(如Developer Command Prompt for VS)来设置的。 在Cygwin中配置MSVC环境,意味着我们希望在Cygwin的bash环境中使用MSVC编译器(如cl.exe)和链接器(link.exe)等工具。这通常需要设置环境变量,包括PATH、INCLUDE、LIB等,以便在Cygwin中能够找到这些工具。 步骤概述: 1. 找到Visual Studio的安装路径,特别是vcvarsall.bat或vcvars32.bat/vcvars64.bat,这些批处理文件用于设置环境变量。 2. 在Cygwin中,我们需要将这些环境变量导入到bash环境中。但由于Cygwin是一个类Unix环境,不能直接执行.bat文件并继承环境变量,因此我们需要一种方法将.bat文件设置的环境变量转换为bash环境变量。 方法: 我们可以使用一个脚本(例如一个shell脚本)来调用vcvarsall.bat,然后捕获其设置的环境变量,并将其转换为bash的环境变量设置。 具体步骤: 1. 创建一个辅助脚本(例如msvcenv.sh),该脚本将使用Windows的cmd来运行vcvarsall.bat,并输出环境变量,然后解析这些环境变量并设置为bash的环境变量。 2. 另一种方法是使用已经存在的工具,比如vcvars-run(可能来自网络)或者手动设置环境变量。 但是,由于Cygwin的特殊性,我们需要确保路径的转换(比如将Windows路径转换为Cygwin路径)。Cygwin提供了`cygpath`工具来进行路径格式的转换。 参考引用[3]中提到的一个Stack Overflow问题,其中讨论了如何让easy_install使用vcvarsall.bat,但这里我们关注的是Cygwin环境。 一个常见的做法是编写一个shell脚本来设置环境。以下是一个示例脚本: ```bash #!/bin/bash # 首先,找到vcvarsall.bat的路径 # 通常,它位于Visual Studio安装目录下的VC目录中,例如: # VS2019: "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat" # 或者使用vswhere工具来定位 # 使用vswhere(如果安装了)来定位Visual Studio VSINSTALLDIR=$(cmd.exe /c "echo %ProgramFiles(x86)%\\Microsoft Visual Studio\\Installer\\vswhere.exe" | tr -d '\r') # 使用vswhere查找最新Visual Studio安装路径 VSINSTALLDIR=$(cmd.exe /c "$VSINSTALLDIR -latest -property installationPath" | tr -d '\r') if [ -z "$VSINSTALLDIR" ]; then echo "Visual Studio not found" exit 1 fi VcVarsAllPath="$VSINSTALLDIR\\VC\\Auxiliary\\Build\\vcvarsall.bat" if [ ! -f "$VcVarsAllPath" ]; then echo "vcvarsall.bat not found at $VcVarsAllPath" exit 1 fi # 使用cmd.exe运行vcvarsall.bat并捕获环境变量 # 注意:我们需要指定架构,例如x86、x64、arm等 # 这里以x64为例 TMPFILE=$(mktemp) cmd.exe /c "call \"$VcVarsAllPath\" x64 & set" > $TMPFILE # 解析环境变量并设置 while IFS= read -r line do # 分割变量名和值 if [[ $line =~ ^([a-zA-Z_][a-zA-Z0-9_]*)=([^[:space:]]*) ]]; then varname=${BASH_REMATCH[1]} varvalue=${BASH_REMATCH[2]} # 将Windows路径转换为Cygwin路径 # 注意:对于PATH、INCLUDE、LIB等路径变量,我们需要转换 if [[ $varname =~ ^(PATH|INCLUDE|LIB|LIBPATH)$ ]]; then # 使用cygpath转换路径列表(分号分隔) newvalue="" IFS=';' read -ra ADDR <<< "$varvalue" for i in "${ADDR[@]}"; do if [ -n "$i" ]; then # 转换路径并追加 conv=$(cygpath -u "$i" 2>/dev/null) if [ $? -eq 0 ]; then if [ -z "$newvalue" ]; then newvalue="$conv" else newvalue="$newvalue:$conv" fi else # 转换失败,保留原路径(但注意,在Cygwin中可能无法使用) if [ -z "$newvalue" ]; then newvalue="$i" else newvalue="$newvalue:$i" fi fi fi done export $varname="$newvalue" else # 对于非路径变量,直接导出 export $varname="$varvalue" fi fi done < $TMPFILE rm $TMPFILE ``` 注意:这个脚本是一个示例,可能需要根据具体环境进行调整。特别是,Visual Studio的安装路径可能不同,以及需要选择合适的架构(x86, x64, arm等)。 3. 将上述脚本保存为msvcenv.sh,然后在Cygwin的bash中运行: source msvcenv.sh 这样,当前终端就会设置好MSVC的环境变量。 但是,这种方法有一些注意事项: - 路径转换可能不完美,特别是当路径中包含空格或特殊字符时。 - 每次打开新的Cygwin终端都需要运行这个脚本来设置环境,或者可以将它添加到.bashrc中(但要注意,这可能会减慢启动速度)。 替代方案:手动设置 如果不想每次运行脚本,也可以手动设置环境变量,但需要知道MSVC工具链的路径,并转换为Cygwin路径。例如: ```bash export PATH="/cygdrive/c/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.29.30133/bin/Hostx64/x64:$PATH" export INCLUDE="..." export LIB="..." ``` 但是手动设置比较繁琐,而且随着Visual Studio的更新,路径可能会变化。 另外,引用[2]中提到了boost库的自动链接设置,这涉及到BOOST_LIB_TOOLSET的定义。在Cygwin使用MSVC编译boost库时,可能需要设置BOOST_LIB_TOOLSET为对应的vc版本(如vc142, vc141等)。这可以通过环境变量或用户配置文件来设置。 总结: 在Cygwin中配置MSVC环境的主要挑战是将vcvarsall.bat设置的环境变量导入到bash中,并转换路径格式。使用上述脚本可以自动化这个过程。 然而,需要注意的是,在Cygwin使用MSVC编译器可能会遇到一些路径问题,因为MSVC编译器是原生的Windows程序,它期望的是Windows风格的路径,而Cygwin中的构建脚本可能使用Unix风格路径。因此,在调用cl.exe时,可能需要将参数中的路径用`cygpath -w`转换为Windows路径。 例如,在Makefile中,可能需要这样写: cl /I"$(shell cygpath -w /path/to/include)" ... 或者,更推荐的做法是使用CMake等构建工具,它们可以更好地处理不同平台上的路径问题。 相关问题: 1. 如何在Cygwin使用CMake生成MSVC项目? 2. 在Cygwin中配置MSVC环境后,如何验证环境是否配置正确? 3. 除了使用脚本,还有哪些方法可以在Cygwin中设置MSVC环境? 4. 在Cygwin使用MSVC编译器编译C++程序时,需要注意哪些问题? 请用户根据上述步骤尝试配置,并注意检查环境变量是否设置正确。</think>### 在Cygwin中配置MSVC开发环境 要在Cygwin中配置Microsoft Visual Studio (MSVC) 开发环境,需解决两个关键问题:**环境变量配置**和**路径格式转换**。以下是详细步骤: --- #### 核心步骤 1. **定位vcvarsall.bat** 找到VS安装目录下的环境配置脚本(通常位于): `C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat` *注:路径中的版本号(2019)需根据实际安装调整。* 2. **创建环境配置脚本** 在Cygwin中新建脚本 `setup-msvc.sh`: ```bash #!/bin/bash VS_BAT="C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Auxiliary/Build/vcvarsall.bat" TEMP_ENV=$(mktemp) # 通过cmd获取环境变量并转换路径格式 cmd.exe /c "call \"$VS_BAT\" x64 && set" > $TEMP_ENV sed -i 's/\r//g' $TEMP_ENV # 移除Windows换行符 # 导入环境变量 while read line; do if [[ $line == *"="* ]]; then var=$(echo $line | cut -d'=' -f1) val=$(echo $line | cut -d'=' -f2- | cygpath -u -f -) # 转Unix路径 export "$var"="$val" fi done < $TEMP_ENV rm $TEMP_ENV ``` 3. **激活MSVC环境** 在Cygwin终端中运行: ```bash source setup-msvc.sh ``` 4. **验证配置** ```bash cl.exe /? # 应显示MSVC编译器帮助 link.exe /? # 应显示链接器帮助 ``` --- #### 关键问题解决 - **路径转换** 使用 `cygpath` 工具转换路径格式: ```bash # Windows路径转Cygwin路径 cygpath -u "C:\Path\To\File" # Cygwin路径转Windows路径 cygpath -w "/cygdrive/c/Path/To/File" ``` - **编译示例** 编译C++程序时显式指定路径: ```bash cl.exe /I"$(cygpath -w /usr/local/include)" \ /Fe:hello.exe \ "$(cygpath -w hello.cpp)" ``` - **工具链兼容性** - Python/C扩展:需确保 `distutils` 使用MSVC(参考引用[3]) - CMake:生成NMake Makefiles而非Unix Makefiles: ```bash cmake -G "NMake Makefiles" .. ``` --- #### 注意事项 1. **架构匹配** 脚本中的 `vcvarsall.bat x64` 需与实际项目架构一致(x86/x64/arm64)。 2. **环境持久化** 每次启动Cygwin后需重新 `source setup-msvc.sh`。如需持久化,可将脚本添加到 `~/.bashrc`。 3. **冲突避免** MSVC工具链(cl/link)可能与GCC重名,建议通过完整路径调用: ```bash "/cygdrive/c/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.29.30133/bin/Hostx64/x64/cl.exe" ``` 4. **调试支持** 配置Windows调试工具: ```bash export PATH="$PATH:/cygdrive/c/Program Files (x86)/Windows Kits/10/Debuggers/x64" ``` --- ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值