https://blog.csdn.net/hustlei/article/details/86687588
在windows上安裝配置msys2
msys2安裝
啟動msys2
msys2中文亂碼問題
MSYS2 目錄映射問題
MSYS2 ln -s軟連接會復制目錄的問題
fastab配置文件目錄的方法
msys2配置國內鏡像源
更新msys2
安裝git和vim
安裝及配置zsh
安裝配置conemu
emacs安裝及簡單配置
#*#自動保存文件及*~備份文件配置
emacs 包管理及源設置
emacs安裝markdown模式
編程環境配置
gcc安裝
qt安裝
pyhon安裝
gcc找不到鏈接庫路徑問題
參考文章
msys2是一個在windows上模擬linux環境的軟件。在msys2上可以使用多數shell命令,現在(2018年)msys2還可以使用pacman安裝各種軟件和工具,包括emacs,vim,git, python,qt,mingw-gcc,clang等等。有了msys2可以拋棄虛擬機,在windows使用shell,交叉編譯程序了→_→。
msys2支持linux shell的常用命令,默認安裝了bash、dash等也可以安裝zsh。更為方便的是在msys2中,也可以直接運行windows程序,比如notepad, start命令等等,也能夠使用cmd的命令。
msys2安裝
windows上安裝msys2非常簡單,直接在msys2官網[http://msys2.github.io]上下載exe安裝包,雙擊運行安裝即可。
官網上有兩個版本可以下載,分別是32位和64位的。下載32位的即可以在32位windows上安裝也可以在64位windows上安裝,64位的安裝包只能在64位windows上安裝。
msys2-i686-20180531.exe:32位安裝包
msys2-x86_64-20180531.exe:64位安裝包
啟動msys2
msys2安裝完成后,開始菜單會有三個啟動方式:
MSYS2 MSYS
MSYS2 MinGW 64bit
MSYS2 MINGW 32bit
三種啟動方式區別主要在於編譯環境軟件包的不同,如gcc,clang等版本不同。通用的工具如:grep,git,vim,emacs等等在三種方式內都是一樣的。
運行環境說明:
為什么要有三個啟動方式?如果想知道,需要了解一下mingw編譯環境的歷史,可以參考大神的文章:[MinGW和 MinGW-W64的區別]。 本文簡單說明一下:
msys2上不支持64bit交叉編譯32bit,所以需要獨立部署mingw 32bit和mingw 64bit下的開發和運行環境。MSYS上也有一套“編譯系統”,三元組是*-pc-msys。和MinGW相比,MSYS更接近Cygwin(強調POSIX兼容性),提供了一個sysroot(下面有/bin啊/etc什么的),因此移植POSIX環境的程序一般更方便。但是是有代價的。MSYS環境下原生編譯的程序一般需要多依賴MSYS運行時庫(當然比Cygwin要輕量多了)。所以常規的實踐是,如果只是開發Windows程序,能用MinGW就不要用MSYS原生的編譯器來構建。當然,使用MSYS上的sh等工具還是沒問題,跟GNU工具配套怎么說比cmd總好用。(雖然也有不少瑣碎坑爹bug。)
所以個人大多數時間使用MSYS2 MinGW 64bit。
MSYS2三個啟動方式都是從msys2_shell.cmd腳本啟動的,三個啟動方式在腳本內僅僅在於為變量MSYSTEM設置了不同的值
MSYS2 MSYS:set MSYSTEM=MSYS
MSYS2 MinGW 32bit:set MSYSTEM=MINGW32
MSYS2 MinGW 64bit:set MSYSTEM=MINGW64
從etc/profile和etc/msystem配置文件可以看出。設置了MSYSTEM變量后,三種啟動方式分別從opt/bin,mingw32/bin,mingw64/bin文件夾內查找開發和運行環境軟件包。通用的工具如:grep,git,vim,emacs等等都安裝在/usr/bin內,三個方式都可以調用。
所以啟動Msys2,除了可以通過點擊開始菜單的快捷方式,還可以用下述命令啟動(平常沒必要,但是可以用於設置conemu等虛擬終端):
set MSYSTEM=MINGW64 & c:\msys64\usr\bin\bash --login
1
msys2中文亂碼問題
目前(2018年)msys2對中文支持已經非常好了。但是還是有少部分命令出現問題,比如msys2 ping中文會顯示亂碼:
$ ping baidu.com
▒▒▒▒ Ping baidu.com [220.181.57.217] ▒▒▒▒ 32 ▒ֽڵ▒▒▒▒▒:
▒▒▒▒ 220.181.57.217 ▒Ļظ▒: ▒ֽ▒=32 ʱ▒▒=19ms TTL=55
▒▒▒▒ 220.181.57.217 ▒Ļظ▒: ▒ֽ▒=32 ʱ▒▒=19ms TTL=55
▒▒▒▒ 220.181.57.217 ▒Ļظ▒: ▒ֽ▒=32 ʱ▒▒=19ms TTL=55
▒▒▒▒ 220.181.57.217 ▒Ļظ▒: ▒ֽ▒=32 ʱ▒▒=19ms TTL=55
220.181.57.217 ▒▒ Ping ͳ▒▒▒▒Ϣ:
▒▒▒ݰ▒: ▒ѷ▒▒▒ = 4▒▒▒ѽ▒▒▒ = 4▒▒▒▒ʧ = 0 (0% ▒▒ʧ)▒▒
▒▒▒▒▒г̵Ĺ▒▒▒ʱ▒▒(▒Ժ▒▒▒Ϊ▒▒λ):
▒▒▒ = 19ms▒▒▒ = 19ms▒▒ƽ▒▒ = 19ms
1
2
3
4
5
6
7
8
9
10
11
12
出現這個問題的命令很少,但是還是很影響心情。
解決方法
新建/bin/win文件,文件內容如下:
PS:msys2中根目錄/默認為msys2安裝地址C:/msys2。
#!usr/bin/bash
$@ |iconv -f gbk -t utf-8
1
2
新建/etc/profile.d/alias.sh文件,文件內容如下:
alias ls="/bin/ls --color=tty --show-control-chars"
alias grep="/bin/grep --color"
alias ll="/bin/ls --color=tty --show-control-chars -l"
alias ping="/bin/win ping"
alias netstat="/bin/win netstat"
alias nslookup="/bin/win nslookup"
1
2
3
4
5
6
7
重新啟動msys2后效果:
$ ping baidu.com
正在 Ping baidu.com [220.181.57.217] 具有 32 字節的數據:
來自 220.181.57.217 的回復: 字節=32 時間=19ms TTL=55
來自 220.181.57.217 的回復: 字節=32 時間=19ms TTL=55
來自 220.181.57.217 的回復: 字節=32 時間=19ms TTL=55
來自 220.181.57.217 的回復: 字節=32 時間=19ms TTL=55
220.181.57.217 的 Ping 統計信息:
數據包: 已發送 = 4,已接收 = 4,丟失 = 0 (0% 丟失),
往返行程的估計時間(以毫秒為單位):
最短 = 19ms,最長 = 19ms,平均 = 19ms
1
2
3
4
5
6
7
8
9
10
11
12
當然,不使用上述解決方法,使用conemu虛擬終端就不存在這個問題。
MSYS2 目錄映射問題
MSYS2 ln -s軟連接會復制目錄的問題
MSYS2在windows上用ln -s dir創建軟連接時,會復制所有文件到目標文件夾。
解決這個問題需要在/etc/profile文件里面加上一個關鍵變量:
export MSYS="winsymlinks:lnk"
1
添加后創建的目錄軟連接,就和linux上很類似了。直接cd就能進入被連接的目錄文件夾,非常方便。
fastab配置文件目錄的方法
在fstab中配置也可以映射目錄,個人更喜歡用ln -s軟連接。
在/etc/fstab配置文件目錄映射的方法:
直接在/etc/fstab后加入如下代碼,然后重啟msys2就可以了
C:\Users\adminstrator\Desktop /desktop
#目錄路徑中不能有空格。如果目錄路徑中有空格請使用轉義字符"\040"代替
1
2
上述命令配置完成后,在終端cd /desktop后可以直接切換到C:\Users\adminstrator\Desktop目錄下。
msys2配置國內鏡像源
用pacman命令安裝軟件會先從默認的源上下載軟件,pacman默認使用SF的源,但是在國內有時候會不太穩定,所以可以選擇添加國內的源。比如:
中國科學技術開源軟件鏡像
北京理工大學鏡像
日本北陸先端科學技術大學院大學SourceForge鏡像
The UK Mirror Service Sorceforge mirror
方法:修改msys2安裝目錄下的\etc\pacman.d文件夾里面的3個mirrorlist.*文件。
個人目前用的源配置如下:
mirrorlist.mingw32文件
## 2-bit Mingw-w64 repository mirrorlist
## Primary
Server = http://mirrors.ustc.edu.cn/msys2/mingw/i686/
Server = http://repo.msys2.org/mingw/i686
Server = http://downloads.sourceforge.net/project/msys2/REPOS/MINGW/i686
Server = http://www2.futureware.at/~nickoe/msys2-mirror/i686/
1
2
3
4
5
6
mirrorlist.mingw64文件
## 64-bit Mingw-w64 repository mirrorlist
## Primary
Server = http://mirrors.ustc.edu.cn/msys2/mingw/x86_64/
Server = http://repo.msys2.org/mingw/x86_64
Server = http://downloads.sourceforge.net/project/msys2/REPOS/MINGW/x86_64
Server = http://www2.futureware.at/~nickoe/msys2-mirror/x86_64/
Server = http://mirror.bit.edu.cn/msys2/REPOS/
1
2
3
4
5
6
7
mirrorlist.msys文件
## MSYS2 repository mirrorlist
## Primary
Server = http://mirrors.ustc.edu.cn/msys2/msys/$arch/
Server = http://repo.msys2.org/msys/$arch
Server = http://downloads.sourceforge.net/project/msys2/REPOS/MSYS2/$arch
Server = http://www2.futureware.at/~nickoe/msys2-mirror/msys/$arch/
1
2
3
4
5
6
更新msys2
msys2自帶有pacman管理和安裝軟件,類似ubuntu中的apt-get。pacman下載后的軟件包默認存放目錄msys64\var\cache\pacman\pkg。使用pacman可以用一個命令升級系統及所有已安裝的軟件。
pacman -Syu
1
之后需要關閉所有MSYS2 shell,然后運行msys2根目錄下autorebase.bat
pacman是從Arch linux移植過來的,pacman只支持系統完整升級,不支持部分升級。所以即使在msys2中,pacman -Syu也會升級整個系統。
如果升級時,網絡比較慢,覺得既浪費時間又浪費硬盤,實在不想升級那么多東西,可以逐個軟件包升級。用下面命令可以升級核心包:
#同步數據庫
pacman -Sy
#安裝核心包
pacman -S --needed filesystem msys2-runtime bash libreadline libiconv libarchive libgpgme libcurl pacman ncurses libintl
#升級其他軟件包
pacman -Su
1
2
3
4
5
6
安裝git和vim
pacman -S git
1
msys2中,git依賴curl,vim,perl,所以安裝git后,自動會安裝好vim。
git 中文顯示數字問題
git中如果存在中文文件名,則會顯示為\232\333這種形式,特別不方便,並且文件名變的特別長。
解決辦法:
git config --global core.quotepath false
1
安裝及配置zsh
shell的類型有很多種,linux下默認的是bash,雖然bash的功能已經很強大,但對於以懶惰為美德的程序員來說,bash的提示功能不夠強大,界面也不夠炫,並非理想工具。
而zsh的功能極其強大,只是配置過於復雜,起初只有極客才在用。后來,有個窮極無聊的程序員可能是實在看不下去廣大猿友一直只能使用單調的bash, 於是他創建了一個名為oh-my-zsh的開源項目
。自此,只需要簡單的安裝配置,小白程序員們都可以用上高檔大氣上檔次的zsh。
查看msys2是否安裝了zsh
cat /etc/shells
1
安裝zsh
pacman -S zsh
1
安裝 oh my zsh
[oh-my-zsh]源碼是放在github上,先確保你的機器上已安裝了git
安裝:
sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
1
或者
wget https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | sh
1
** 配置zsh為msys2默認shell**
msys2 不支持chsh命令修改默認shell。所以要么每次進入后直接用zsh切換到zsh,要么就修改msys2_shell。cmd文件。
在msys2的安裝目錄(c:\msys64)下打開msys2_shell.cmd文件。修改文件中LOGINSHELL變量如下:
set “LOGINSHELL=zsh”
重啟msys2就默認使用zsh了。
zsh主題選擇
oh-my-zsh有很多漂亮的主題,https://github.com/robbyrussell/oh-my-zsh/wiki/themes 上面可以查看主題列表。
國內比較流行的主題是ys,配置ys主題的方法為:
$ vim ~/.zshrc
ZSH_THEME="ys" #修改.zshrc中ZSH_THEME的值為ys
$ source ~/.zshrc #更新配置
1
2
3
** zsh自動補齊插件**
zsh的自動補全功能已經非常強大了,但是zsh的incr.zsh自動補全插件功能更強,可以在你輸入命令的過程中用灰色顯示推斷的后續命令。
##下載插件
wget http://mimosa-pudica.net/src/incr-0.2.zsh
##將此插件放到oh-my-zsh目錄的插件庫下
mkdir ~/.oh-my-zsh/plugins/incr
mv incr-0.2.zsh ~/.oh-my-zsh/plugins/incr
1
2
3
4
5
在~/.zshrc文件末尾加上source ~/.oh-my-zsh/plugins/incr/incr\*.zsh,然后更新配置
##shell中運行該命令更新配置
source ~/.zshrc
1
2
** incr.zsh與vim的提示相沖突的解決方案**
使用自動補全插件可能會與vim的提示功能相沖突,如會報以下錯誤:
$ vim t
_arguments:451: _vim_files: function definition file not found
1
2
解決方法:將~/.zcompdump*刪除即可
rm -rf ~/.zcompdump*
exec zsh
1
2
** zsh在使用git命令卡頓的問題**
在 oh-my-zsh 進入 包含 git 倉庫目錄時,會變的比平時慢/卡頓,原因是因為 oh-my-zsh 要獲取 git 更新信息。
解決辦法:
##設置 oh-my-zsh 不讀取文件變化信息(在 git 項目目錄執行下列命令)
git config --add oh-my-zsh.hide-dirty 1
##如果你還覺得慢,可以再設置 oh-my-zsh 不讀取任何 git 信息
git config --add oh-my-zsh.hide-status 1
1
2
3
4
okey 了,如果想恢復,設置成0就好
安裝配置conemu
conemu作為虛擬終端比msys2默認的mintty要好用。所以喜歡的同學可以使用conemu。
目前(2018年)msys2中用pacman -S安裝的conemu在漢字支持上有些bug。所以建議直接從conemu官網下載。
ConEmu官網下載地址:https://conemu.github.io/
以MSYS2 MingGW64為例,配置MSYS2任務:
打開conemu的settings對話框
選擇Startup>>Tasks選項
點擊+號,新建一個Task
修改Task名字為MSYS2::MingGW64
在commands下文本框內輸入如下代碼:
set MSYS2_PATH_TYPE=inherit & set MSYSTEM=mingw64 & set "D=C:\msys64" & %D%\usr\bin\bash --login -i -new_console:C:"%D%\msys2.ico"
1
MSYS2_PATH_TYPE=inherit表示合並windows系統的path變量。
如果安裝了zsh並想默認使用zsh可以,把代碼里的bash改為zsh
mingw32模式只需修改代碼中的MSYSTEM=mingw32即可,msys模式修改為MSYSTEM=msys
conemu有很多配置,如果需要配置更多選項,可以查看本站conemu配置相關文章。
emacs安裝及簡單配置
pacman -S emacs
1
emacs windows上中文問題及-nw問題
如果在windows下,直接下載安裝emacs,即使使用emacs -nw命令也只能顯示GUI界面,沒法在命令行模式下打開。此外,中文輸入也存在問題,只能使用emacs內部的輸入法,非常不方便。msys2里用pacman -S安裝的emacs則不存在這些問題。
所以,在windows下使用emacs建議最好用msys2的pacman安裝。
##自動保存文件及~備份文件配置
emacs總是會產生一堆file~文件和#file#文件,這都是什么文件呢,其實是自動備份和自動保存文件。
emacs保存文件的時候,會把上次保存的文件file修改為file,然后再保存在file里。file就是自動備份文件,用於防止文件損壞或丟失。
Emacs還有自動保存的功能,當你改動了一個文件還未存盤的話,所作的改動也許會由於系統崩潰而丟失。為防止這種情況發生,Emacs在編輯時為每個文件提供了“自動保存(auto save)”。自動保存的文件的文件名前后都有一個#號。例如,如果你編輯的文件名叫“hello.c”,自動保存的文件的文件名就叫 “#hello.c#”。當你正常的保存了文件后,Emacs會刪除這個自動保存的文件。如果遇到死機,打開文件(是你編輯的文件而不是自動保存的文件)后按M-x recover file 來恢復你的編輯。當提示確認時,輸入yes 來繼續恢復自動保存的數據。
如果不喜歡emacs的自動備份和自動保存文件,可以通過下面方法關閉:
在~/.emacs: 中添加
(setq auto-save-default nil) #關閉自動保存
(setq make-backup-files nil) #關閉自動備份
1
2
對於自動保存文件#file#,用下面方式把自動保存文件統一放在指定的文件夾下:
在~/.emacs: 中添加下面的lisp語句
(setq backup-directory-alist '(("" . "~/bak/")))
1
emacs 包管理及源設置
查看package列表及安裝包
方法一:
M-X list-packages 查看安裝好的和可以安裝的包。
C-n、C-p、C-v上下移動光標,或者按C-s搜索包
在對應的軟件包上回車,可以查看軟件包信息
按下 i 鍵,將其標記為待安裝的
按下 u 鍵,取消標記
按下 d 鍵,標記為待卸載的
然后按 x 鍵執行標記的項目。
按下 q 建,退出package列表
方法二:
使用M-x package-install命令也安裝包
源配置
在~/.emacs文件中添加:(package-initialize)。啟動時加載安裝的擴展
在~/.emacs文件中添加: (require 'package)。否則后邊的package命令無法執行
查看package源:C-h v package-archives
添加package源: M-x customize-variable RET package-archives
選擇 INS 回車,可以添加package源,例如:
name: melpa
URL: https://melpa.org/packages/
1
2
強制刷新packages:M-x package-refresh-contents。PS:刷新過程可能會有點慢,可以切換到其他文件先做別的事。
刷新后查看package,會比之前的多出來許多。
emacs安裝markdown模式
使用M-X list-packages 進入package列表,如果已在這個界面,按 r 鍵刷新。
C-n、C-p移動光標,或者按C-s搜索“markdown”
將光標置於“markdown-mode”那行
按下 i 鍵,將其標記為待安裝的,然后按 x 鍵執行標記為 i 的待安裝的項目。
按下 q 建,退出package列表
然后每次打開markdown文件就會自動切換到markdown模式,當然也可以用M-x markdown-mode手動切換。
編程環境配置
gcc安裝
隨便哪個msys2啟動方式都可以,只是安裝好后,只能在對應的環境下運行。
查看可用的安裝包
pacman -Ssq gcc #或者pacman -Sl | grep gcc
可以看到以下三個
mingw32 mingw-w64-i686-gcc
mingw64 mingw-w64-x86_64-gcc
msys gcc
分別對應於 msys 的三個環境。這里安裝64位版本,其他類似。
安裝
pacman -S mingw-w64-x86_64-gcc
不論你在哪個環境下安裝,MSYS2 都會自動將這個包裝在 msys64/mingw64 下。從之前的分析可知只有在 mingw64 環境下才能使用這個目錄下的程序。在其他兩個環境下雖然能夠安裝mingw-w64-x86_64-gcc,但是不能使用mingw-w64-x86_64-gcc。
運行
使用MinGW 64bit方式進入MSYS2:
gcc --version
gcc.exe (Rev3, Built by MSYS2 project) 4.9.1
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR P
1
2
3
4
5
qt安裝
qt類似,我們選擇安裝mingw-w64-x86_64-qt5。
pacman -S mingw-w64-x86_64-qt5
qt安裝后非常大,如果需要,請謹慎安裝。
pyhon安裝
python對windows的支持很好,並且即使下載windows版安裝包安裝后,在msys2里也能調用,所以不想折騰就直接用windows版本的python吧。
gcc找不到鏈接庫路徑問題
在pacman中安裝了SDL等庫,但是gcc鏈接的時候就是提示找不到sdl。
解決方法:在msys2_shell.cmd中加入如下代碼
set LIBRARY_PATH=C:\msys64\mingw64\lib
1
在shell里使用LIBRARY_PATH=/mingw64/lib是不行的
參考文章
MSYS2
msys2使用小結
MinGW和 MinGW-W64的區別
MSYS2 + MinGW-w64 + Git + gVim 環境配置
oh-my-zsh git 慢/卡頓問題解決
是否需要花哨的命令提示符
MSYS2開發環境搭建
emacs 產生的*~和#*#文件
vi/emacs編輯文件生成的#filename# 或者filename~能否指定到某一個位置
[emacs學習筆記(package列表查看&添加packages源&安裝packages)]{https://blog.csdn.net/mathadora/article/details/79463046}