# 介紹好用工具：Cmder ( 具有 Linux 溫度的 Windows 命令提示字元工具 )

在前端工程師的[鄙視鍊](http://baike.baidu.com/view/8316896.htm)中， Windows 一直以來都被 Mac OS X 的人所鄙視，我覺得其中有個癥結點在於 Mac OS X 的 Terminal 下可以做的事情很多，而且又與 Unix-like 的作業系統相容，很多指令都可以共用，又有很多 Shell 可以安裝，確實比 Windows 的命令提示字元 ( Command Prompt ) 或 PowerShell 來的方便許多。由於我個人也越來越常在 Windows 平台使用前端開發相關工具，因此也越來越常用命令提示字元進行指令列操作，直到最近把 [cmder](https://github.com/cmderdev/cmder) 裝起來玩，我的 Windows 才開始有了點 Linux 的溫度，本篇文章就讓我來好好介紹 [cmder](https://github.com/cmderdev/cmder) 這套前端工程師的逆天神器吧！

### 安裝 cmder

先到 [cmder](https://github.com/cmderdev/cmder) 官網下載此工具，基本上 cmder 並沒有安裝檔，他就是一個壓縮檔，下載回來解壓縮就能使用，你甚至可以放到 USB 就可以雖時帶著走，連調整過的設定都會放在這個目錄下，不會用到系統機碼 (Registry)，所以也很適合放在 Dropbox / Google Drive / OneDrive 共享於多台電腦。

下載的時候，有兩個版本，分別是 mini 與 full 版，唯一的差別在於有沒有內建 msysgit 工具，這是 [Git for Windows](http://git-scm.com/) 的標準配備，裡面不僅僅有 Git 工具程式，其實還包含了一些 Linux 環境下常用的工具程式，例如 less, grep, tar, unzip, grep, sed, … 等等，如果你確定電腦已經有安裝 [Git for Windows](http://git-scm.com/) 的話，可以直接下載 mini 版即可。

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/4d0abe987064b83feee9-image_2731.png)

解壓縮之後如下圖示，點擊 **Cmder.exe** 即可啟動程式：

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/f2b4fef8a788b73c199b-image_2732.png)

你也可以將 Cmder 安裝路徑加入到 PATH 使用者環境變數中，方便在任意命令提示字元模式下自動啟動 Cmder 程式。

### 首次使用微調

蠻多人第一次使用 Cmder 的時候都會遇到以下問題（如下圖示），這是因為目前 Cmder 預設會啟動 PowerShell 主控台 (Console)，但 Windows 內建的 PowerShell 預設的 ExecutionPolicy 是 AllSigned，也就是任何沒有簽章的 PowerShell 指令檔都是不允許執行的，而 Cmder 在啟動的時候需要執行一些初始化命令，但卻被 PowerShell 阻擋了。

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/58593b13252bf3229904-image_2733.png)

解決這個問題很簡單，只要輸入以下指令修改 ExecutePolicy 的預設值即可：

-   **Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser**

上述命令執行完畢後，你可以嘗試按下 **Alt+Shift+2** 在 Cmder 內再開啟一個新的 PowerShell Console，今後開啟 Cmder 就不會再看到錯誤了。

不過，像我通常習慣開啟「命令提示字元」主控台，所以我都會修改 Cmder 的預設值，讓每次開啟 Cmder 都直接進入傳統的「命令提示字元」主控台，其設定方式如下：

1.  按下 **Win+Alt+P** 開啟選項設定。
2.  切換到 Startup 頁籤，設定 Specified named task 並選取 **{cmd}**，然後儲存設定。如下圖示：  
    ![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/47ad5ac03503cd691787-image_2734.png)

第三個微調工作，則是我發現的一個問題，因為 Cmder 修改了預設的命列列提示符號，改用 **λ** 符號（如下圖示）

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/4a590a0f11ddd17e61e2-image_2735.png)

用這個字元是蠻酷的，不過卻引發「畫面殘留文字」的問題，打指令的時候只要輸入 5 個字元以上，當你按下 Ctrl+Z 復原輸入就會讓畫面上殘留一些刪除不掉的文字。如下圖示：

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/01a9e5fc4a9d69aa6a6b-image_2736.png)

上述殘留文字問題，只要按下 **Ctrl+L** 或輸入 **cls** 命令清空畫面就可以解決，但還是有點惱人，所以我會將這個字元改成 Mac / Linux 環境下常見的 **$** 符號。

請編輯 Cmder 安裝目錄下的 **vendor\\init.bat** 檔案，只到第 12 行，把：

@prompt $E\[1;32;40m$P$S{git}{hg}$S$\_$E\[1;30;40m{lamb}$S$E\[0m

修改成以下即可：

@prompt $E\[1;32;40m$P$S{git}{hg}$S$\_$E\[1;30;40m$$$S$E\[0m

第四個微調工作則是將 **Ctrl+W** 快速鍵關閉，因為 Cmder 預設將 **Ctrl+W** 設定為關閉目前主控台，不過我們在 Linux 環境下 **Ctrl+W** 主要是用來刪除一段文字用的，這功能被拿掉就真的礙手礙腳了，所以建議將此快速鍵關閉。

1.  按下 **Win+Alt+P** 開啟選項設定。
2.  切換到 Keys & Macro 頁籤，找到 Close active console 並把 hotkey 給清除掉即可。如下圖示：  
    ![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/f53d9765de4c7fdf2203-image_2737.png)

### 介紹 cmder 畫面功能

cmder 功能極為強大，功能也非常多，但從視窗畫面上看不太出其強大實力，我們就先來介紹「看的見」的功能，本文稍後再來介紹其他特性。

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/adf8b3370f4162f2b49f-image_2738.png)

如上圖示編號的部分說明如下：

1.  可以利用 **Ctrl+T** 建立新頁籤，利用 **Ctrl+W** 關閉頁籤，還可以透過 **Ctrl+Tab** 切換頁籤，跟一般瀏覽器頁籤操作習慣一致。  
    **Alt+F4**     ： 關閉所有頁籤  
    **Alt+Shift+1**： 開啟 cmd.exe  
    **Alt+Shift+2**： 開啟 powershell.exe  
    **Alt+Shift+3**： 開啟 powershell.exe (系統管理員權限)  
    **Ctrl+1**     ： 快速切換到第 1 個頁籤 Ctrl + 2 ： 快速切換到第 2 個頁籤  
    **Ctrl+n**     ： 快速切換到第 n 個頁籤 ( n 值無上限 )
2.  可在視窗內搜尋畫面上出現過的任意關鍵字。
3.  新增頁籤按鈕，可透過滑鼠新增頁籤。
4.  切換頁籤按鈕，可透過滑鼠切換頁籤。
5.  鎖定視窗，讓視窗無法再輸入。
6.  切換視窗是否提供卷軸功能，啟動時可查詢之前顯示過的內容。
7.  按下滑鼠左鍵可開啟系統選單，滑鼠右鍵可開啟工具選項視窗。  
    **Win+Alt+P**  ： 開啟工具選項視窗

### 關於 cmder 的元件組成

cmder 其實結合了多套軟體，其中包括 [msysgit](https://github.com/msysgit/msysgit) 與最重要的 [ConEmu](http://conemu.github.io/) 與 [Clink](http://mridgers.github.io/clink/) 軟體，而 [ConEmu](http://conemu.github.io/) 與 [Clink](http://mridgers.github.io/clink/) 這兩套軟體就是 cmder 真正的核心元件。

-   [msysgit](https://github.com/msysgit/msysgit)
    -   除了提供 Git for Windows 相關工具外，其實還提供了多套 Unix/Linux 環境下常用的指令列工具，例如 less, ls, tar, unzip, md5sum, grep, sed, … 等多套工具。
    -   光是一個 grep 就不知道比 Windows 內建的 findstr 強幾百倍了！
-   [ConEmu](http://conemu.github.io/)
    -   ConEmu 是一套 Windows 主控台模擬器 (console emulator)，其背後其實隱含了一個真正的 Windows 命令提示字元視窗，只是被隱藏起來而已，原本命令提示字元中的訊息都會轉送到模擬器上，並且輸出到 ConEmu 自己的主控台顯示，因此使用者感覺不出差異，但事實上你在視窗上打的字、輸入的快速鍵，都是在 ConEmu 自己的視窗上作業的，你在視窗上輸入的文字與指令也都是他幫你把輸入的結果傳到背後隱藏的 Windows 命令提示字元視窗而已。
    -   ConEmu 也提供了許多能夠自由客製化的設定，我大概摘要一些重要功能如下：
        -   改變視窗大小變得非常容易 (原本的命令提示字元改變視窗大小很麻煩，而且限制很多)
        -   額外加上了頁籤 (Tabs) 功能
        -   可自訂 cmder 剛啟動時的預設頁籤屬性
        -   可輸入 **Alt+Enter** 將視窗設為全螢幕，再按一次 **Alt+Enter** 就會復原回原本的視窗大小
        -   可設定字形反鋸齒選項：Standard, ClearType, Disabled
        -   自訂模擬器的顯示字型 ( Windows Fonts )
        -   支援正體中文顯示!
        -   支援用鍵盤控制卷軸，其快速鍵與 Linux 終端機模式下的快速鍵一致。  
            **Shift+PgUp**  ： 往上捲動一頁  
            **Shift+PgDown**： 往下捲動一頁
        -   支援滑鼠的**文字選取**與**區塊選取**功能
            -   **文字選取**：直接用滑鼠在畫面上選字就可以選取，選取的文字會自動複製到剪貼簿。
            -   **區塊選取**：先按下 **Alt** 鍵在用滑鼠在畫面上選字就可以進行區塊選取，選取的文字會自動複製到剪貼簿。
        -   可設定視窗透明度
    -   完整功能請自行參閱文件
        -   [Documentation](http://conemu.github.io/en/TableOfContents.html)
        -   [Settings pages](http://conemu.github.io/en/Settings.html)
        -   [What's New](http://conemu.github.io/en/Whats_New.html)
-   [Clink](http://mridgers.github.io/clink/)
    -   Clink 將 GNU Readline 函式庫整合進原生的 Windows 命令提示字元視窗，提供命令列模式下強大的編輯與輸入能力，這也是用了 cmder 之後會這麼像在 Linux 環境下使用的感覺。
    -   GNU Readline 函式庫提供的非常豐富的指令自動完成功能 ( auto-completion )、查詢歷史指令 ( history )、基本行內編輯功能 ( line-editing capabilities )
    -   自動完成功能 ( auto-completion )
        -   鍵盤輸入 “Tab” 就會自動完成打到一半的指令或參數
        -   輸入命令到一半時，輸入 “Tab” 會自動顯示可能的命令清單，所有在 PATH 環境變數下的那些目錄全部都會搜尋出來，超實用啊！
        -   支援執行檔、檔案名稱、目錄名稱的自動完成
        -   支援環境變數自動完成 ( 輸入 **%user** 按 Tab 鍵兩下就會提供所有 user 開頭的環境變數名稱 )
        -   支援第三方工具的參數自動完成功能，例如 [Git](http://git-scm.com/), [Mercurial](https://www.mercurial-scm.org/), [SVN](https://subversion.apache.org/), [Go](https://golang.org/), [P4](http://www.perforce.com/) (Perforce), [npm](https://www.npmjs.com/), [Chocolatey](https://chocolatey.org/), … 等等，如果不夠用還可以自行擴充 。
    -   查詢歷史指令
        -   按下 **Ctrl+R** 就可以開始搜尋之前輸入過的指令 ( 天啊，跟 Bash 一樣，好貼心喔 )
    -   基本行內編輯功能 (line-editing capabilities)
        -   **Ctrl+LeftKey  ( ← )**：鍵盤游標可向左移動一個字
        -   **Ctrl+RightKey ( → )**：鍵盤游標可向右移動一個字
        -   **Ctrl+A**：鍵盤游標直接移到最左邊（最前面）
        -   **Ctrl+E**：鍵盤游標直接移到最右邊（最後面）
        -   **Ctrl+H**：等同於 Backspace 按鍵
        -   **ESC**   ：清除目前輸入的整行
        -   **Ctrl+Alt+J**：將指令輸入切換至 vim 模式 (進階用法，不會用 vim 的人不要用喔)
        -   **Ctrl+E**    ：在 vim 模式可按下 **Ctrl+E** 切換回預設模式 (Emacs)
        -   所有行內編輯功能幾乎與 Bash 操作一模一樣！
    -   支援多種鍵盤快速鍵使用
        -   **Ctrl+V**    ： 貼上剪貼簿中的文字內容
        -   **Ctrl+Z**    ： 復原輸入 ( Undo )
        -   **Ctrl+Alt+U**： 回上一層 ( 等於幫你輸入了 cd .. 命令，超方便的 )
        -   **Alt+H**     ： 顯示所有快速鍵清單
    -   Clink 可以直接跟原生的 Cmd.exe 搭配使用
        -   執行 **vendor\\clink\\clink.bat** 即可啟用 Clink 功能。
        -   以系統管理員身分執行 **vendor\\clink\\clink.bat autorun -i** 可將 Clink 自動注入到 Cmd.exe 之中。
        -   如要移除 Clink 綁定，可執行 **vendor\\clink\\clink.bat autorun -u** 即可。
    -   完整功能請自行參閱文件
        -   [clink/clink.md at master · mridgers/clink](https://github.com/mridgers/clink/blob/master/docs/clink.md)

### 其他功能

除了上述功能外，Cmder 還增加了 **alias** 功能，可以讓你就像在 Linux 底下那樣設定許多常指令的別名 ( Alias )，讓你用短短的指令執行一些常見但指令超長又難以記憶的語法。

![image](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/4f099c892116bd97ac56-image_2739.png "image")

像我常會需要在命令提示字元下開啟檔案總管並且自動瀏覽到當前目錄，以往我都會打 **start .** 開啟目錄，我就自己建立了一個 **e.** 別名命令，以後只要打 **e.** 就可以開啟檔案總管，超棒的啊！ ^\_^

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/458f18fda0f0b40216ba-image_2740.png)

最後還有主控台文字自動放大縮小功能，你只要按下 **Ctrl+滑鼠滾輪** 就可以辦到，如果你用支援兩點觸控的筆電，也可以在觸控板上用兩指放大的手勢調整文字大小。

### 心得分享

想當年在玩 Linux 的時候，很多棘手的工作都可以透過簡單的指令完成，相較於 Windows 平台就很少有這種體驗，大多還是要靠其他人寫好的 GUI 工具才能快速解決問題，像我之前就曾經分享過 [grepWin](/post/2008/01/29/Useful-tool-grepWin)、[Everything Search Engine](/post/2011/01/07/Useful-tool-Everything-Search-Engine) 工具，這些工具在 Linux 底下老早就有相對應的 grep, locate 等工具可以輔助，但 Windows 就一直沒有內建。

遇到 Cmder 之後，終於找回當年玩 Linux 打指令時的熟悉感，你也一起試試吧！ ^\_^

**相關連結**

-   [cmder | Console Emulator](https://github.com/cmderdev/cmder)
    -   [bliker/cmder](https://github.com/bliker/cmder) ( GitHub )
-   [ConEmu - Handy Windows Terminal](https://conemu.github.io/)
    -   [Maximus5/ConEmu](https://github.com/Maximus5/ConEmu) ( GitHub )
-   [Clink](https://mridgers.github.io/clink/)
    -   [mridgers/clink](https://github.com/mridgers/clink) ( GitHub )
    -   [clink/clink.md at master · mridgers/clink](https://github.com/mridgers/clink/blob/master/docs/clink.md)
-   [Get Rid of Windows Console and Embrace Cmder — Medium](https://medium.com/@saaguero/get-rid-of-windows-console-and-embrace-cmder-63aa49818781)
