介紹
Cygwin主要為在Windwos上運行POSIX系統(類Linux)。
基本設定
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
環境變數解決方法
- Right click on "My Computer" -> Properties -> Advanced -> Environment Variables
- Add a new environment variable, called CYGWIN_HOME and set its value to
C:\cygwin
- Edit the PATH environment variable and add
C:\cygwin\bin
to it (usually separated by a ';').
上述指令中的C:\cygwin
依照自己環境目錄設定,完成後bash.exe
及mintty.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)
快速安裝:
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貼上修改作範例:
將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可能會有檔案路徑解析錯誤問題。
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