惊艳的cygwin——Windows下的Linux命令行环境的配置和使用
5年前倒騰過一次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做得很贊!
安裝后要調整(比如新增、刪除)也使用setup來完成。
Package中有Git,需要就在安裝時選上就可以了。
bash_completion包(命令補全的增強包)讓cygwin補全更強勁,但會影響命令行自動補全速度和cygwin啟動速度,建議先安裝上,如果不能接受速度的變慢,就卸載掉這個包。
注:參見?有關 SVN、CYGWIN 和 NOTEPAD++
第一次啟動時會生成Home目錄,在${cygwin}/home/${YOUR_USER_NAME}。
# ${cygwin}表示你的cygwin安裝目錄。
顯示
調整${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 colouralias?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'這樣調整后,可以ls、grep、dir輸出彩色顯示。
另外加上命令的-h選項,這樣文件大小以K、M、G顯示,方便人閱讀。
git輸出(比如log、status)彩色顯示,使用下面的命令配置:
git config --global color.ui autovi配置
在${HOME}/.vimrc文件中加上: # 沒有.vimrc文件就新建。
set?number set?hlsearch set?fileencoding=utf-8 set?fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1set?nocompatible set?backspace=indent,eol,startsyntax enable說明:
- syntax enable:打開語法高亮。cygwin的vi缺省沒有打開。
- set nocompatible和set backspace:配置backspace鍵,缺省backspace不起作用。
- set fileencoding和set fileencodings:缺省文件編碼和自動識別文件編碼順序
- set number:顯示行號
- set hlsearch:搜索到內容高亮
參考資料:
- Cygwin中VIM的設置
- VIM文件編碼識別與亂碼處理
配置盤符的鏈接
到D盤,要/cygdrive/d,可以新建符號鏈接/d,這樣可以減少錄入(MSYS的做法)
ln -s /cygdrive/c /c ln -s /cygdrive/d /d ln -s /cygdrive/e /e自動補全不區分大小寫
~/.bashrc文件中添加:
shopt -s nocaseglob~/.inputrc文件中添加:
set?completion-ignore-case oncygwin的官方文檔: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路徑的轉換
cygwin的路徑和Windows的路徑表示不一樣。
要注意的是,cygwin下的cd命令可以直接使用Windows的路徑表示。
$?cd 'C:\Windows\System32\drivers\etc'注:不要忘了加上單引號,因為\是bash元字符,用于轉義。不用上單引號cd命令收到的參數值就不是C:\Windows\System32\drivers\etc,運行報錯。
路徑轉換的需求減了大半。
有cygpath命令來完成轉換,相關的選項是:
-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)執行的例子:
$?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\etccygwin的官方文檔:How do I convert between Windows and UNIX paths?
在cygwin的打開指定文件或文件夾到文件瀏覽器
常常會有這樣的需求,比如打開文件瀏覽器explorer,然后用烏龜看SVN日志等等。
可以使用使用命令直接打開指定文件或文件夾的位置到explorer。
打開文件或文件夾腳本,可以這個腳本命名成xpl,放到PATH上。
#?xpl是explorer的縮寫
打開文件或文件夾,并選中的腳本,可以這個腳本命名成xpf,放到PATH上。
#?xpf是explorer and select file的縮寫
文件權限問題
現象
Windows的文件的cygwin下沒有權限:
$?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文件的權限顯示的是----------+,沒有讀寫的權限。
解決方法
編輯/etc/fstab,在末尾加上下面的一行:
none /cygdrive cygdrive binary,noacl,posix=0,user 0 0關閉所有cygwin進程,再重啟cygwin命令行。
顯示文件權限已經正常-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即可。
參見:本文“文本配置:字體、編碼”一節的截圖。
命令窗口設置:字體、右鍵粘貼等等
這些設置對使用的舒適度至關重要。
cygwin的執行文件是mintty.exe,在命令窗口的標題的右鍵菜單上有【options】項,有這些配置項。
外觀
配置光標顯示、窗體透明。
文本配置:字體、編碼
配置顯示字體。
我喜歡用Consolas字體,這是Windows上一款質量很高的等寬字體。
右鍵粘貼配置
配置右鍵用于粘貼,缺省是彈出菜單。這個配置很方便!
效果圖
展示了ls、grep輸出的彩色顯示,容器的字體效果。
vi的語法高亮就不再截圖了。
一些最佳實踐
把命令行輸出放在系統剪貼板上
后記
之前對cygwin這種適配的做法有偏見,覺得做得不會好。其實有了一個好點子,又有為之努力的人在,就會越來越好,從“丑小鴨”變成驚艷的“天鵝”。
謝謝這些為之不懈努力的人!
有了cygwin,讓我對MacBook Pro的需求程度降低了,在Windows上還可以再呆一下子。 :)
OS作為一個工作環境,幫我方便的完成要做的事,關注點是:
- 方便的大量的軟件。Windows這一點太強。
- 高質量的UI。Linux這一點太差。
- 程序員要的舒適的命令行環境。Windows的cmd太弱,有了cygwin可頂一下。
相關資料
- cygwin官方文檔
- Msys/MinGW與Cygwin/gcc
- MinGW,MSYS,cygwin區別
- Cygwin與MinGW/MSYS,如何選擇?
- PuTTYcyg的替代者mintty
- 使用Git、Git GUI和TortoiseGit
- git亂碼解決方案匯總
- 在cygwin中調用JAVA程序
from:?http://oldratlee.com/post/2012-12-22/stunning-cygwin
總結
以上是生活随笔為你收集整理的惊艳的cygwin——Windows下的Linux命令行环境的配置和使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 远程调用服务(RPC)和消息(Messa
- 下一篇: 常用的绘图约定——提高绘图和读图的效率