N年前倒騰過一次cygwin,當時體驗感受很差。到如今一直用的是GNU utilities for Win32,在Windows的CMD中使用*nix的命令工具包。 html
GNU utilities for Win32好久沒有更新,utils的版本過低,不少功能沒有(好比grep輸出不支持彩色輸出的選項--color)等等。另,在Windows的「cmd的自動補全」、「命令歷史」、「bat編程」太弱,一直忍受着~
# 之前寫過cmd相關的博文: Windows命令行CMD的使用小技巧、如何在Windows下使用GNU命令 git
最近大半年版本管理使用Git,用的是msysgit。msysgit帶了MSYS的Bash。用的過程當中體驗不錯,很順暢頗有Linux的Feel了: 程序員
昨天想到就倒騰了一下cygwin,效果驚豔啊! shell
在cyginw的安裝頁面上下載setup.exe。 編程
啓動選擇安裝目錄和Package的鏡像站點(自動會缺省163的Package鏡像站點),而後選擇和調整要安裝的Package。
# 163提供的鏡像讓Package下載分分鐘搞定。163也提供了Ubuntu的鏡像,163作得很贊! vim
安裝後要調整(好比新增、刪除)也使用setup來完成。 windows
Package中有Git,須要就在安裝時選上就能夠了。 瀏覽器
bash_completion包(命令補全的加強包)讓cygwin補全更強勁,但會影響命令行自動補全速度和cygwin啓動速度,建議先安裝上,若是不能接受速度的變慢,就卸載掉這個包。
注:參見 有關 SVN、CYGWIN 和 NOTEPAD++ bash
第一次啓動時會生成Home目錄,在${cygwin}/home/${YOUR_USER_NAME}。
# ${cygwin}表示你的cygwin安裝目錄。 svn
調整${HOME}/.bashrc文件,把註釋掉別名打開:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
aliasdf='df -h'
aliasdu='du -h'
aliaswhence='type -a' # where, of a sort
aliasgrep='grep --color' # show differences in colour
aliasegrep='egrep --color=auto' # show differences in colour
aliasfgrep='fgrep --color=auto' # show differences in colour
aliasls='ls -h --color=tty' # classify files in colour
aliasdir='ls --color=auto --format=vertical'
aliasvdir='ls --color=auto --format=long'
aliasll='ls -l' # long list
aliasla='ls -A' # all but . and ..
aliasl='ls -CF' #
aliaswch='which -a'
|
這樣調整後,能夠ls、grep、dir輸出彩色顯示。
另外加上命令的-h選項,這樣文件大小以K、M、G顯示,方便人閱讀。
git輸出(好比log、status)彩色顯示,使用下面的命令配置:
1
|
git config --global color.ui auto
|
在cygwin.bat在第一行後加入set CYGWIN=title ntea(讓title的位置顯示當前目錄),運行cygwin,在根目錄下輸入,
cd /bin
mv sh.exe sh-original.exe
ln –s bash.exe sh.exe
這樣sh就是bash了。
在${HOME}/.vimrc文件中加上: # 沒有.vimrc文件就新建。
1
2
3
4
5
6
7
8
9
|
setnumber
sethlsearch
setfileencoding=utf-8
setfileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1
setnocompatible
setbackspace=indent,eol,start
syntaxenable
|
說明:
參考資料:
到D盤,要/cygdrive/d,能夠新建符號連接/d,這樣能夠減小錄入(MSYS的作法)
1
2
3
|
ln-s/cygdrive/c/c
ln-s/cygdrive/d/d
ln-s/cygdrive/e/e
|
~/.bashrc文件中添加:
1
|
shopt-s nocaseglob
|
~/.inputrc文件中添加:
1
|
setcompletion-ignore-caseon
|
cygwin的官方文檔:How can I get bash filename completion to be case insensitive?
.inputrc文件中添加:
1
2
3
4
5
6
7
|
# 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的路徑表示。
1
|
$cd'C:\Windows\System32\drivers\etc'
|
注:不要忘了加上單引號,由於\是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)
-u, --unix (default) print Unix form of NAMEs (/cygdrive/c/winnt)
|
執行的例子:
1
2
3
4
|
$ 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的縮寫
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#!/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的縮寫
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#!/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
|
Windows的文件的cygwin下沒有權限:
1
2
3
4
5
|
$rmfoo.txt
error:open("foo.txt"): Permission denied
error: unable to indexfilefoo.txt
$ ll foo.txt
----------+ 1 Jerry None 486 Dec 24 14:16 foo.txt
|
文件的權限顯示的是----------+,沒有讀寫的權限。
編輯/etc/fstab,在末尾加上下面的一行:
1
|
none/cygdrivecygdrive binary,noacl,posix=0,user 0 0
|
關閉全部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命令輸出的編碼是GBK。cygwin控制檯mintty的編碼缺省是UTF-8。mintty的選項的【Text】把編碼改爲GBK便可。
參見:本文「文本配置:字體、編碼」一節的截圖。
這些設置對使用的溫馨度相當重要。
cygwin的執行文件是mintty.exe,在命令窗口的標題的右鍵菜單上有【options】項,有這些配置項。
配置光標顯示、窗體透明。
配置顯示字體。
我喜歡用Consolas字體,這是Windows上一款質量很高的等寬字體。
配置右鍵用於粘貼,缺省是彈出菜單。這個配置很方便!
展現了ls、grep輸出的彩色顯示,容器的字體效果。
vi的語法高亮就再也不截圖了。
以前對cygwin這種適配的作法有偏見,以爲作得不會好。其實有了一個好點子,又有爲之努力的人在,就會愈來愈好,從「醜小鴨」變成驚豔的「天鵝」。
謝謝這些爲之不懈努力的人!
有了cygwin,讓我對MacBook Pro的需求程度下降了,在Windows上還能夠再呆一會兒。 :)
OS做爲一個工做環境,幫我方便的完成要作的事,關注點是: