惊艳的cygwin——Windows下的Linux命令行环境的配置和使用
http://www.tuicool.com/articles/2MramqI
cygwin
,当时体验感觉不好。到现在一直用的是 GNU utilities for Win32
,在Windows的CMD中使用*nix
的命令工具包。
GNU utilities for Win32
很久没有更新, utils
的版本太低,很多功能没有(比如 grep
输出不支持彩色输出的选项 --color
)等等。另,在 Windows
的“cmd的自动补全”、“命令历史”、“bat编程”太弱,一直忍受着~
# 以前写过 cmd
相关的博文: Windows命令行CMD的使用小技巧 、 如何在Windows下使用GNU命令
最近大半年版本管理使用 Git
,用的是 msysgit 。 msysgit
带了 MSYS 的Bash。用的过程中体验不错,很顺畅很有 Linux
的Feel了:
- 有
Git
命令的自动补全 - 彩色显示
- 可以用
bash
功能(自动补全、历史命令搜索等等) bash
脚本编程
昨天想到就倒腾了一下 cygwin
,效果惊艳啊!
安装
在 cyginw
的 安装页面 上下载 setup.exe
。
启动选择安装目录和Package的镜像站点( 自动 会缺省163的Package镜像站点),然后选择和调整要安装的Package。
# 163 提供的镜像让Package下载分分钟搞定。163也提供了 Ubuntu
等等的镜像,163做得很赞!
安装过程中,会提示 cygwin
的安装目录 和 安装包的本地存放目录 ,推荐把这2个目录分开,让文件更有整洁清楚。
安装后要调整(比如新增、删除)也使用 setup
来完成。
# 也可以通过 apt-cyg - A command-line software installer for Cygwin 或 cyg-apt A command line package manager for Cygwin 来安装或卸载软件。个人推荐如果没有深入了解这样的工具前,还是使用官方的 setup
来做,以避免软件安装文件的混乱 :)
常用软件推荐
setup
缺省没有选上的常用软件,可以根据自己需要选上:
curl
vim
subversion
git
mysql
perl
python
ruby
ed
这里特殊说一下 bash-completion
命令补全的增强包,让 bash
补全更强劲!可以命令的选项的自动补全,如可以 TAB
出 grep
的各个选项。
但会影响命令行自动补全速度和 cygwin
启动速度,建议先安装上,如果发现补全速度变慢不能接受,就卸载掉这个包。
bash-completion
没有包含 git
命令的自动补全,在独立的 git-completion
包中。
第一次启动时会生成 Home
目录 ,在 ${cygwin}/home/${YOUR_USER_NAME}
。
# ${cygwin}
表示你的 cygwin
安装目录。
显示
调整 ${HOME}/.bashrc
文件,把注释掉别名打开:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
|
这样调整后,可以 ls
、 grep
、 dir
输出彩色显示。
另外加上命令的 -h
选项,这样文件大小以K、M、G显示,方便人阅读。
git
输出(比如 log
、 status
)彩色显示,使用下面的命令配置:
1
|
git config --global color.ui auto |
vi配置
在 ${HOME}/.vimrc
文件中加上:
# 没有 .vimrc
文件就新建。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
|
说明:
set number
:显示行号。如果使用过程中要关掉,可以使用:set nonu
来关掉。set hlsearch
:搜索到内容高亮。set fileencoding
和set fileencodings
:缺省文件编码和自动识别文件编码顺序set tabstop
和set shiftwidth
: 设置Tab
宽度,缺省是8。syntax enable
:打开语法高亮。cygwin
缺省vim
没有打开。set nocompatible
和set backspace
:配置backspace键,缺省backspace不起作用。
参考资料:
配置盘符的链接
到D盘,要 /cygdrive/d
,可以新建符号链接 /d
,这样可以减少录入( MSYS 的做法)
1
2
3
|
|
自动补全不区分大小写
~/.bashrc
文件中添加:
1
|
|
~/.inputrc
文件中添加:
1
|
|
cygwin
的官方文档: How can I get bash filename completion to be case insensitive?
配置按单词移动/删除
.inputrc
文件中添加:
1
2
3
4
5
6
7
|
|
参考资料: Ctrl-Arrow Keys, Ctrl-Backspace, Ctrl-Delete
Windows
和 cygwin
路径的转换
cygwin
的路径和 Windows
的路径表示不一样。
要注意的是, cygwin
下的 cd
命令可以 直接使用 Windows
的路径表示。
1
|
|
注:不要忘了加上 单引号 ,因为 \
是 bash
元字符,用于转义。不用上单引号 cd
命令收到的参数值就不是 C:\Windows\System32\drivers\etc
,运行报错。
路径转换的需求减了大半。
有 cygpath
命令来完成转换,相关的选项是:
1
2
3
|
-a, --absolute output absolute path -w, --windows print Windows form of NAMEs (C:\WINNT)
|
执行的例子:
1
2
3
4
|
/cygdrive/c/Windows/System32/drivers/etc
C:\Windows\System32\drivers\etc |
cygwin
的官方文档: How do I convert between Windows and UNIX paths?
在 cygwin
的打开指定文件或文件夹到文件浏览器
常常会有这样的需求,比如打开文件浏览器 explorer
,然后用乌龟看 svn
日志等等。
可以使用使用命令直接打开指定文件或文件夹的位置到 explorer
。
打开文件或文件夹脚本,可以这个脚本命名成 xpl
,加到 PATH
环境变量中。
# xpl
是 explorer
的缩写
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#!/bin/bash
esac
else
fi explorer $XPATH |
打开文件或文件夹,并选中的脚本,可以这个脚本命名成 xpf
,加到 PATH
环境变量中。
# xpf
是 explorer and select file
的缩写
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#!/bin/bash
esac
else
fi
|
文件权限问题
现象
Windows
驱动上的文件的 cygwin
下没有权限:
1
2
3
4
5
|
$ ll foo.txt ----------+ 1 Jerry None 486 Dec 24 14:16 foo.txt |
文件的权限显示的是 ----------+
,没有读写的权限。
解决方法
编辑 /etc/fstab
,在末尾加上下面的一行:
1
|
|
关闭所有cygwin进程,再重启cygwin命令行。
显示文件权限已经正常 -rw-r--r--
:
1
2
|
$ ll foo.txt -rw-r--r-- 1 Jerry None 486 Dec 24 14:16 foo.txt |
注意! 如果改了 /etc/fstab
但是没有生效,可以重启一下机器!
参考资料: cygwin sets file permission to 000
Windows命令的乱码
Windows
命令的输出中文乱码,原因是 Windows
命令输出的编码是 GBK
。 cygwin
控制台 mintty
的编码缺省是 UTF-8
。 mintty
的选项的【Text】把编码改成 GBK
即可。
参见:本文“文本配置:字体、编码”一节的截图。
命令窗口设置:字体、复制/粘贴等等
这些设置对使用的舒适度至关重要。
cygwin
的执行文件是 mintty.exe
,在命令窗口的标题的右键菜单上有【options】项,有这些配置项。
外观
配置光标显示、窗体透明。
文本配置:字体、编码
配置显示字体。
我喜欢用 Consolas
字体,这是 Windows
上一款质量很高的等宽字体。
粘贴配置
右键粘贴配置
配置右键用于粘贴,缺省是弹出菜单。这个配置很方便!
另外
cygwin
的mintty
缺省就是『选中文本』即完成复制。- 快捷键【CRTL + Insert】/【SHIFT + Insert】一直是可以用来复制/粘贴的,使用快捷键还是右键,可以根据自己的喜好和顺手度来选。比如
- 我在鼠标选中复制后,顺手就用鼠标右键来粘贴。
- 如果用【CTRL+C】在其它窗口复制了内容,【Alt + TAB】到
cygwin
,就顺手继续来键盘【SHIFT + Insert】来粘贴。
效果图
展示了 ls
、 grep
输出的彩色显示,和字体效果。
vi
的语法高亮就不再截图了。
一些最佳实践
后记
之前对 cygwin
这种适配的做法有偏见,觉得做得不会好。其实有了一个好点子,又有为之努力的人在,就会越来越好,从“丑小鸭”变成 惊艳 的“天鹅”。
谢谢这些为之不懈努力的人!
有了 cygwin
,让我对 MacBook Pro
的需求程度降低了,在 Windows
上还可以再呆一下子。 :)
OS
作为一个工作环境,帮我方便的完成要做的事,关注点是:
- 方便的大量的软件。
Windows
这一点太强。 - 高质量的
UI
。Linux
这一点太差。 - 对程序员来说,舒适的命令行环境是呼吸的空气。
Windows
的cmd
太弱,有了cygwin
可顶一下。
2014年2月24日补记
- 添加推荐软件一节
- 添加
cygwin
命令行包管理说明 - 加强『粘贴一节』
- 增加命令别名
alias vi=vim
- 修正排版和字句
PS:
2013年7月入了RMBP 15',对于程序员来说,生活质量确实提高不少 :)
# 这里不得不提 zsh
和 oh-my-zsh !其实 zsh
支持 cygwin
,网上有很多资料,改天补上简单的上手说明。
但是开了 Windows
虚拟机,因为
- 公司用旺旺作为
IM
,Windows
版本好很多。 - 有些
Windows
的软件确实不错:Beyond Compare
XManager
(XShell
)Tortiose
SVN
/Git
- 福昕阅读器
- ……
我不是Mac或是XXX的教徒,有优点、能舒服的解决问题,就采用。
每一个不曾起舞的日子,都是对生命的辜负。
But it is the same with man as with the tree. The more he seeks to rise into the height and light, the more vigorously do his roots struggle earthward, downward, into the dark, the deep - into evil.
其实人跟树是一样的,越是向往高处的阳光,它的根就越要伸向黑暗的地底。----尼采
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!