惊艳的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 缺省没有选上的常用软件,可以根据自己需要选上:
curlvimsubversiongitmysqlperlpythonrubyed
这里特殊说一下 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 CompareXManager(XShell)TortioseSVN/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.
其实人跟树是一样的,越是向往高处的阳光,它的根就越要伸向黑暗的地底。----尼采

浙公网安备 33010602011771号