由于使用者變量中的HOME由于需要使用Cadence的原因被迫改到E:\Cadence\SPB_Data下,MSYS2使用的ZSH的配置檔案都自動放在這一目錄下,然而想為Cygwin也配置ZSH發現産生亂碼,這并不是由于字型或者編碼問題導緻的,其原因是MSYS2和Cygwin共用HOME目錄下的.zshrc檔案,而.zshrc檔案中兩個系統使用的路徑表示不一樣,Cygwin需要在盤符前面加"/cygdrive",如在MSYS2使用的.zshrc中,ZSH的PATH配置語句為:
export ZSH="/e/Cadence/SPB_Data/.oh-my-zsh"
而Cygwin中則應為:
export ZSH="/cygdrive/c/Users/<userename>/.oh-my-zsh"
解決這個問題隻能通過更改Cygwin的HOME目錄的方式來解決(而不隻是啟動目錄設定)。
首先,Cygwin現在已有zsh包可通過setup程式安裝,不要再使用apt-cyg,它已經過時,經測驗安裝zsh會報錯。
經過測驗,https://superuser.com/questions/585331/is-it-possible-to-have-cygwin-ignore-the-windows-home-environment-variable上提出的在/etc/profile中添加
HOME=$(eval echo "~$USER")
的方法并不可行。你可以更改Cygwin的快捷方式為Cygwin.bat啟動,在Cygwin.bat中可以随意更改HOME等設定,但是這樣啟動使用的是Windows指令提示符的Shell,并非Cygwin自帶的mintty shell,這樣就會出現亂碼。另外經檢驗,https://stackoverflow.com/questions/1494658/how-can-i-change-my-cygwin-home-folder-after-installation中提出的在/etc/nsswitch.conf中将db_home的注釋去掉并改為/%H、/%H/cygwin、windows、/home/%U等等統統沒用,而且試圖執行mkpasswd、mkgroup語句或https://superuser.com/questions/289444/how-do-i-change-my-home-folder-in-cygwin中提出的更改/etc/passwd檔案等方法全部無效,而經http://mintty.github.io/mintty.1.html查mintty.exe的啟動參數也無計可施。
正确方法是:
- 在C:\Users\<username>中另安裝一個oh-my-zsh,可在該目錄下執行指令(用Cygwin執行):
或sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
等。sh -c "$(wget https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh -O -)"
- 編輯.zshrc檔案,确定語句:
并将ZSH_THEME更改為你喜歡的主題,我使用的是agnoster的變種zys主題。export ZSH="/cygdrive/c/Users/<userename>/.oh-my-zsh"
- 在/etc/bash.bashrc中添加:
其中第一句是真正地設定了Cygwin的HOME目錄,第二句是定義環境變量PATH,如沒有這一句則很多指令無法執行,第三句是自動啟動ZSH。HOME="C:\Users\<username>" PATH="/usr/local/bin:/usr/bin" exec zsh
- 在/etc/profile中添加:
這一句是設定了啟動目錄為~,其中~為C:\Users\<username>。HOME="C:\Users\<username>"
- 确認Cygwin快捷方式的目标為:
其中目錄請按照自己的安裝目錄修改,最後的-也可改為-~,都保證啟動目錄為~,但是如果沒有則啟動目錄變成快捷方式所在的目錄。經驗證,https://superuser.com/questions/940529/how-to-change-the-default-shell-in-cygwin/1134672#1134672和https://medium.com/@alllexsm/how-to-install-z-shell-zsh-on-cygwin-dd9ee380d783中所提出的自動啟動zsh的參數會導緻閃退,原因不明。D:\Program_Files\cygwin64\bin\mintty.exe -i /Cygwin-Terminal.ico -
另外如果想為Windows Terminal配置Cygwin可在profiles.json的"profiles"裡的"list"裡添加:
{
"guid": "{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}",
"name": "Cygwin64",
"commandline": "D:\\Program_Files\\cygwin64\\bin\\bash.exe",
"icon": "D:\\Program_Files\\cygwin64\\Cygwin.ico"
}
其中GUID可使用PowerShell指令
New-GUID
生成一個,其他個性化設定在此就不提供了,發現Windows Terminal可以完美運作Cygwin(Windows Terminal有自己的預設啟動目錄):
