5年前倒騰過一次cygwin,當時體驗感覺不好。到現(xiàn)在一直用的是GNU utilities for Win32,在Windows的CMD中使用*nix的命令工具包。
GNU utilities for Win32很久沒有更新,utils的版本太低,很多功能沒有(比如grep輸出不支持彩色輸出的選項–color)等等。另,在Windows的“cmd的自動補全”、“命令歷史”、“bat編程”太弱,一直忍受著~
# 以前寫過cmd相關(guān)的博文: Windows命令行CMD的使用小技巧、如何在Windows下使用GNU命令
最近大半年版本管理使用Git,用的是msysgit。msysgit帶了MSYS的Bash。用的過程中體驗不錯,很順暢很有Linux的Feel了:
昨天想到就倒騰了一下cygwin,效果驚艷?。?/p>
在cyginw的安裝頁面上下載setup.exe。
啟動選擇安裝目錄和Package的鏡像站點(自動會缺省163的Package鏡像站點),然后選擇和調(diào)整要安裝的Package。
# 163提供的鏡像讓Package下載分分鐘搞定。163也提供了Ubuntu的鏡像,163做得很贊!
安裝后要調(diào)整(比如新增、刪除)也使用setup來完成。
Package中有Git,需要就在安裝時選上就可以了。
bash_completion包(命令補全的增強包)讓cygwin補全更強勁,但會影響命令行自動補全速度和cygwin啟動速度,建議先安裝上,如果不能接受速度的變慢,就卸載掉這個包。
注:參見 有關(guān) SVN、CYGWIN 和 NOTEPAD++
第一次啟動時會生成Home目錄,在${cygwin}/home/${YOUR_USER_NAME}。
# ${cygwin}表示你的cygwin安裝目錄。
調(diào)整${HOME}/.bashrc文件,把注釋掉別名打開:
alias df='df -h'alias du='du -h'alias whence='type -a' # where, of a sortalias grep='grep --color' # show differences in colouralias egrep='egrep --color=auto' # show differences in colouralias fgrep='fgrep --color=auto' # show differences in colouralias ls='ls -h --color=tty' # classify files in colouralias dir='ls --color=auto --format=vertical'alias vdir='ls --color=auto --format=long'alias ll='ls -l' # long listalias la='ls -A' # all but . and ..alias l='ls -CF' #alias wch='which -a'
這樣調(diào)整后,可以ls、grep、dir輸出彩色顯示。
另外加上命令的-h選項,這樣文件大小以K、M、G顯示,方便人閱讀。
git輸出(比如log、status)彩色顯示,使用下面的命令配置:
git config --global color.ui auto
在${HOME}/.vimrc
文件中加上:# 沒有.vimrc
文件就新建。
set numberset hlsearchset fileencoding=utf-8set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1set nocompatibleset backspace=indent,eol,startsyntax enable
說明:
參考資料:
到D盤,要/cygdrive/d
,可以新建符號鏈接/d
,這樣可以減少錄入(MSYS的做法)
ln -s /cygdrive/c /cln -s /cygdrive/d /dln -s /cygdrive/e /e
~/.bashrc
文件中添加:
shopt -s nocaseglob
~/.inputrc
文件中添加:
set completion-ignore-case on
cygwin的官方文檔:How can I get bash filename completion to be case insensitive?
.inputrc
文件中添加:
# Ctrl+Left/Right to move by whole words"\e[1;5C": forward-word"\e[1;5D": backward-word# Ctrl+Backspace/Delete to delete whole words"\e[3;5~": kill-word"\C-_": backward-kill-word
參考資料:Ctrl-Arrow Keys, Ctrl-Backspace, Ctrl-Delete
cygwin的路徑和Windows的路徑表示不一樣。
要注意的是,cygwin下的cd
命令可以直接使用Windows的路徑表示。
$ cd 'C:\Windows\System32\drivers\etc'
注:不要忘了加上單引號,因為\
是bash元字符,用于轉(zhuǎn)義。不用上單引號cd
命令收到的參數(shù)值就不是C:\Windows\System32\drivers\etc
,運行報錯。
路徑轉(zhuǎn)換的需求減了大半。
有cygpath
命令來完成轉(zhuǎn)換,相關(guān)的選項是:
-a, --absolute output absolute path -w, --windows print Windows form of NAMEs (C:\WINNT) -u, --unix (default) print Unix form of NAMEs (/cygdrive/c/winnt)
執(zhí)行的例子:
$ cygpath -au 'C:\Windows\System32\drivers\etc'/cygdrive/c/Windows/System32/drivers/etc$ cygpath -aw '/cygdrive/c/Windows/System32/drivers/etc'C:\Windows\System32\drivers\etc
cygwin的官方文檔:How do I convert between Windows and UNIX paths?
常常會有這樣的需求,比如打開文件瀏覽器explorer
,然后用烏龜看SVN日志等等。
可以使用使用命令直接打開指定文件或文件夾的位置到explorer
。
打開文件或文件夾腳本,可以這個腳本命名成xpl
,放到PATH上。
# xpl
是explorer
的縮寫
#!/bin/bashcygwin=false;case "`uname`" in CYGWIN*) cygwin=true ;;esacif [ "$1" = "" ]; then XPATH=. # 缺省是當前目錄else XPATH=$1 if $cygwin; then XPATH="$(cygpath -C ANSI -w "$XPATH")"; fifiexplorer $XPATH
打開文件或文件夾,并選中的腳本,可以這個腳本命名成xpf
,放到PATH上。
# xpf
是explorer and select file
的縮寫
#!/bin/bashcygwin=false;case "`uname`" in CYGWIN*) cygwin=true ;;esacif [ "$1" = "" ]; then XPATH=. # 缺省是當前目錄else XPATH=$1 if $cygwin; then XPATH="$(cygpath -C ANSI -w "$XPATH")"; fifiexplorer '/select,' $XPATH
Windows的文件的cygwin下沒有權(quán)限:
$ rm foo.txterror: open("foo.txt"): Permission deniederror: unable to index file foo.txt$ ll foo.txt----------+ 1 Jerry None 486 Dec 24 14:16 foo.txt
文件的權(quán)限顯示的是----------+
,沒有讀寫的權(quán)限。
編輯/etc/fstab
,在末尾加上下面的一行:
none /cygdrive cygdrive binary,noacl,posix=0,user 0 0
關(guān)閉所有cygwin進程,再重啟cygwin命令行。
顯示文件權(quán)限已經(jīng)正常-rw-r--r--
:
$ 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命令輸出的編碼是GBK
。cygwin控制臺mintty
的編碼缺省是UTF-8
。mintty
的選項的【Text】把編碼改成GBK
即可。
參見:本文“文本配置:字體、編碼”一節(jié)的截圖。
這些設(shè)置對使用的舒適度至關(guān)重要。
cygwin的執(zhí)行文件是mintty.exe
,在命令窗口的標題的右鍵菜單上有【options】項,有這些配置項。
我喜歡用Consolas
字體,這是Windows上一款質(zhì)量很高的等寬字體。
展示了ls、grep輸出的彩色顯示,容器的字體效果。
vi的語法高亮就不再截圖了。
之前對cygwin這種適配的做法有偏見,覺得做得不會好。其實有了一個好點子,又有為之努力的人在,就會越來越好,從“丑小鴨”變成驚艷的“天鵝”。
謝謝這些為之不懈努力的人!
有了cygwin,讓我對MacBook Pro的需求程度降低了,在Windows上還可以再呆一下子。 :)
OS作為一個工作環(huán)境,幫我方便的完成要做的事,關(guān)注點是: