[Cygwin] Windows上Linux Bash工具 – Cygwin指南

介紹

Cygwin主要為在Windwos上運行POSIX系統(類Linux)。

另外可選解決方案: [WSL] Windows Subsystem for Linux (WSL2) 環境指南


基本設定

Cygwin捷徑

實際的執行檔與其參數如下:

cygwin64\bin\mintty.exe -

注意後面有-以利執行BAT所需

Cygwin Bootstrap啟用 (Cygwin ls command not found)

Cygwin的執行檔/bin/bash.exe以及/bin/mintty.exe若直接執行則commands都會失效,以下提供解法:

BAT預設啟用檔

在Cygwin目錄下有個BAT檔:/Cygwin.bat

直接執行此BAT檔則可正確開啟並登入Cygwin,即可正常使用Commands。

確保/Cygwin.bat內容正確,Cygwin安裝目錄符合安裝路徑,如下:

@echo off

C:
chdir D:\cygwin64\bin

bash --login -i

環境變數解決方法

  1. Right click on "My Computer" -> Properties -> Advanced -> Environment Variables
  2. Add a new environment variable, called CYGWIN_HOME and set its value to C:\cygwin
  3. Edit the PATH environment variable and add C:\cygwin\bin to it (usually separated by a ';').

上述指令中的C:\cygwin依照自己環境目錄設定,完成後bash.exemintty.exe皆可直接執行含Bash。

使用環境變數的好處是執行檔通用,之後在Windows File Explorer(檔案總管)的目錄位置輸入cygwin進入Cygwin且到當前目錄時,直接解決Bash問題。

[Windows] 環境變數設定(Environment Variables) - 如php, mysql, cygwin cmd.


Packages 推薦套件

WGET

wget為第一必裝,因為也只能從安裝程式安裝,有了wget才支援apt-cyg以脫離安裝程式,利用Commands維護套件。

wget

APT-CYG (apt-get)

APT-CYG Package

快速安裝:

lynx -source rawgit.com/transcode-open/apt-cyg/master/apt-cyg > apt-cyg
install apt-cyg /bin

至於apt-cyg所需套件就老方法從安裝程式選用安裝。

Others

呈上兩者搭配,就把Cygwin當類Ubuntu使用吧,利用apt-cyg安裝其他所需套件,例如:

openssh
vim

Cygwin整合至VSCode

直接將Cygwin.bat整合進去比較省事(且支援編碼):

{
    // Replace with your Cygwin.bat file path 
    "terminal.integrated.shell.windows": "C:\\cygwin64\\Cygwin.bat",
}

https://stackoverflow.com/questions/46061894/vs-code-cygwin-as-integrated-terminal/48545827#48545827


Cygwin整合至Cmder(ConEmu)

Cygwin算是一個很好的執行器,可以裝載於任何整合Console上,以整合進Cmder為例:

Cmder > Setting > Startup/Tasks

增加一個Cygwin的Task,可以設定為預設Command (Defautl task for new console)。

  • Task parameters: /icon <cygwin_dir>\Cygwin-Terminal.ico
  • Commands: <cygwin_dir>\cygwin.bat "-new_console:t:Tab Name"

Icon另一個選擇可用%CMDER_ROOT%\vendor\conemu-maximus5\ConEmu64.exe較好看。

完成,另外可以確認Startup > Specified named task是否設定。


Skill 小技巧

複製全部文字方法 - Copy All

Cygwin在進入vim後是無法複製全部文本至Windows的,能複製的就以Cygwin Screen selected area為主。

解決方法1 - 螢幕選取

使用cat去讀出文本至Screen上,在Bash模式下Cygwin選取文字後可以搭配滾輪與鍵盤拉動,即可徒法煉鋼全選出文本做複製。

解決方法2 - 終端機Copy all功能

Cmder或說ConEmu的Copy all是可以複製VIM游標移動掃描過的所有文字到clipboard:

Show system menu(預設在右下角功能icon) > Edit > Copy all

在VIM中直接將游標從第一行向下逐列移至最下方,再點選Copy all即可複製至clipboard。
(使用GG跳到底不會全部複製到)

複製後貼上問題

Cygwin若遇到複製的文字貼上vim後(無論用Ctrl-V或Shift-Insert),遇上縮排Tab沒對齊亂掉狀況。

解決方法

在vim貼上之前輸入指令切換到Paste模式:

:set paste

參考: https://unix.stackexchange.com/questions/199203/why-does-vim-indent-pasted-code-incorrectly

快捷鍵修改 (僅對Local生效,遠端ssh無效)

針對Cygwin視窗快捷鍵修改,這裡以Ctrl-V貼上修改作範例:

可以參考 How to paste in Cygwin bash using CTRL-V

將Cygwin Ctrl+V改為剪貼簿貼上,同原生Shift+Ins

  • ~/.inputrc: 加入以下

    "\C-v": paste-from-clipboard
  • ~/.bashrc: 加入以下 (取消stty對應、如沒對應的組合鍵則不須此步驟)

    stty lnext ^q stop undef start undef

指令參考表:$ bind -p
終端命令對應表:stty -a
按鍵Key查詢:在Cygwin Basg下按下組合鍵即會顯示出Key值,供.inputrc設定。

真正clear:reset清空重置

$ reset

Development 開發環境

Composer & Cygwin

Composer可以使用Cygwin PHP的Package,否則使用Windows PHP Alias可能會有檔案路徑解析錯誤問題。

Stack Overflow


PHP on Cygwin

大致上會用到的都列在下面:

apt-cyg install php php-json php-mbstring php-phar php-zip php-posix
apt-cyg install php-xmlwriter php-tokenizer php-ctype

Leave a Reply

Your email address will not be published. Required fields are marked *