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了:
有Git命令的自動補全 彩色顯示 可以用Bash功能(自動補全,、歷史命令搜索等等) bash腳本編程
昨天想到就倒騰了一下cygwin ,,效果驚艷啊,!
安裝
在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 sort
alias grep = 'grep --color' # show differences in colour
alias egrep = 'egrep --color=auto' # show differences in colour
alias fgrep = 'fgrep --color=auto' # show differences in colour
alias ls = 'ls -h --color=tty' # classify files in colour
alias dir = 'ls --color=auto --format=vertical'
alias vdir = 'ls --color=auto --format=long'
alias ll = 'ls -l' # long list
alias 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
vi配置
在${HOME}/.vimrc
文件中加上:
# 沒有.vimrc
文件就新建。
set number
set hlsearch
set fileencoding = utf-8
set fileencodings = ucs-bom,utf-8 ,cp936,gb18030,big5,euc-jp,euc-kr,latin1
set nocompatible
set backspace = indent,eol,start
syntax enable
說明:
syntax enable:打開語法高亮,。cygwin的vi缺省沒有打開,。 set nocompatible和set backspace:配置backspace鍵,缺省backspace不起作用,。 set fileencoding和set fileencodings:缺省文件編碼和自動識別文件編碼順序 set number:顯示行號 set hlsearch:搜索到內(nèi)容高亮
參考資料:
配置盤符的鏈接
到D盤,,要/cygdrive/d
,可以新建符號鏈接/d
,,這樣可以減少錄入(MSYS 的做法)
ln -s /cygdrive/c /c
ln -s /cygdrive/d /d
ln -s /cygdrive/e /e
自動補全不區(qū)分大小寫
~/.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
Windows和cygwin路徑的轉(zhuǎn)換
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:\W INNT)
-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:\W indows\S ystem32\d rivers\e tc
cygwin的官方文檔:How do I convert between Windows and UNIX paths?
在cygwin的打開指定文件或文件夾到文件瀏覽器
常常會有這樣的需求,比如打開文件瀏覽器explorer
,,然后用烏龜看SVN日志等等,。
可以使用使用命令直接打開指定文件或文件夾的位置到explorer
。
打開文件或文件夾腳本,,可以這個腳本命名成xpl
,,放到PATH上。
# xpl
是explorer
的縮寫
#!/bin/bash
cygwin = false ;
case " ` uname ` " in
CYGWIN* ) cygwin = true ;;
esac
if [ " $1 " = "" ] ; then
XPATH = . # 缺省是當前目錄
else
XPATH = $1
if $cygwin ; then
XPATH = " $( cygpath -C ANSI -w " $XPATH " ) " ;
fi
fi
explorer $XPATH
打開文件或文件夾,,并選中的腳本,,可以這個腳本命名成xpf
,放到PATH上,。
# xpf
是explorer and select file
的縮寫
#!/bin/bash
cygwin = false ;
case " ` uname ` " in
CYGWIN* ) cygwin = true ;;
esac
if [ " $1 " = "" ] ; then
XPATH = . # 缺省是當前目錄
else
XPATH = $1
if $cygwin ; then
XPATH = " $( cygpath -C ANSI -w " $XPATH " ) " ;
fi
fi
explorer '/select,' $XPATH
文件權(quán)限問題
現(xiàn)象
Windows的文件的cygwin下沒有權(quán)限:
$ rm foo.txt
error: open( "foo.txt" ) : Permission denied
error: 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命令的輸出中文亂碼,原因是Windows命令輸出的編碼是GBK
,。cygwin控制臺mintty
的編碼缺省是UTF-8
,。mintty
的選項的【Text】把編碼改成GBK
即可。
參見:本文“文本配置:字體,、編碼”一節(jié)的截圖,。
命令窗口設(shè)置:字體、右鍵粘貼等等
這些設(shè)置對使用的舒適度至關(guān)重要,。
cygwin的執(zhí)行文件是mintty.exe
,,在命令窗口的標題的右鍵菜單上有【options】項,有這些配置項,。
外觀
配置光標顯示,、窗體透明。
文本配置:字體,、編碼
配置顯示字體,。
我喜歡用Consolas
字體,這是Windows上一款質(zhì)量很高的等寬字體,。
右鍵粘貼配置
配置右鍵用于粘貼,,缺省是彈出菜單。這個配置很方便,!
效果圖
展示了ls、grep輸出的彩色顯示,,容器的字體效果,。
vi的語法高亮就不再截圖了。
一些最佳實踐
把命令行輸出放在系統(tǒng)剪貼板上
后記
之前對cygwin這種適配的做法有偏見,,覺得做得不會好,。其實有了一個好點子,又有為之努力的人在,,就會越來越好,,從“丑小鴨”變成驚艷 的“天鵝”。
謝謝這些為之不懈努力的人,!
有了cygwin,,讓我對MacBook Pro的需求程度降低了,在Windows上還可以再呆一下子,。 :)
OS作為一個工作環(huán)境,,幫我方便的完成要做的事,關(guān)注點是:
方便的大量的軟件,。Windows這一點太強,。 高質(zhì)量的UI,。Linux這一點太差。 程序員要的舒適的命令行環(huán)境,。Windows的cmd太弱,,有了cygwin可頂一下。