windows下cgywin的配置

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了: 程序員

  • 有Git命令的自動補全
  • 彩色顯示
  • 能夠用Bash功能(自動補全、歷史命令搜索等等)
  • bash腳本編程

昨天想到就倒騰了一下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的Shell

在cygwin.bat在第一行後加入set CYGWIN=title ntea(讓title的位置顯示當前目錄),運行cygwin,在根目錄下輸入,

      cd /bin
      mv sh.exe sh-original.exe
      ln –s bash.exe sh.exe

這樣sh就是bash了。

vi配置

在${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

說明:

  • syntax enable:打開語法高亮。cygwin的vi缺省沒有打開。
  • set nocompatible和set backspace:配置backspace鍵,缺省backspace不起做用。
  • set fileencoding和set fileencodings:缺省文件編碼和自動識別文件編碼順序
  • set number:顯示行號
  • set hlsearch:搜索到內容高亮

參考資料:

配置盤符的連接

到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

Windows和cygwin路徑的轉換

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?

在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
 
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命令的輸出中文亂碼,緣由是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可頂一下。

相關資料

相關文章
相關標籤/搜索