爲 win10 打造 Linux 終端(非 wsl)

本文中的部份內容可能過時,最新配置請前往 github 查看:github.com/xnng/my-git…html

1. 前言

因爲某些特殊緣由,習慣用 Linux Shell 的開發者會在 Windows 上作開發。git

這個時候就須要一套好用的 Linux 終端 + Linux 環境程序員

本文只討論 Linux 終端。github

至於在 Windows 上使用 Linux 環境,無非就是跑項目的時候想跟別的環境保持一致,或者安裝某些 windows 上不太好用的軟件,好比 Redis、Nginx 等。我認爲 Docker for Windows 目前來講是最佳解決方案。固然你也能夠在自帶的虛擬機 Hvper-V 或者第三方虛擬機 VmWare 上安裝 Linux 操做系統,再或者 Linux 子系統 WSL 你也能夠玩一下,不差錢的話服務器也是一個很棒的選擇。總之只要你想折騰,Windows 上不會缺 Linux 環境。docker

不缺 Linux 環境,難道缺 Linux 終端嗎?shell

其實也不缺,Cmder、xShell、ConEmu 這些比較主流的終端我也都玩過一段時間。可是最後發現,其實沒有必要那麼麻煩,Windows 自帶就有一個很是 nice 的終端,只是缺少改造而已。json

我想說的 Windows 自帶的終端實際上是 Git Bash,嚴格意義上來講它並不是自帶,但它是每一個程序員必裝的軟件,因此我且當它是自帶的了。vim

因此這篇文章都是在說怎麼進化它,不用擔憂,進化也並不麻煩,幾條甚至一條命令的事。windows

2. 我喜歡用的終端是什麼樣子的?

Git Bash 基於 mintty,有 Linux 文件系統,還有經常使用的一些 Linux 命令。它的性能也很高,還能很方便的嵌入到各類開發工具中。這是我選擇它的理由。緩存

但它也有一些缺點,好比太醜了、不能開多標籤、缺少某些重要的命令。只要解決這些問題,那麼它就是我心目中的完美終端。

3. 從設置快捷鍵開始

爲了可以快速打開 Git Bash,我建議下給它設置一個全局快捷鍵。

  • 按 Win 鍵,而後搜索 Git Bash,點擊「打開文件所在位置」

  • 右鍵快捷方式,點擊「屬性」,而後在這裏設置一個快捷鍵,同時點擊「高級」,把「以管理員身份運行」勾上,後面會在終端上改文件,勾選它能夠避免不少麻煩。

  • 解決快捷鍵延遲問題

    這個時候你可能會遇到一個問題,按下快捷鍵終端會延遲 3 秒纔打開。這是某些版本的 windows 上廣泛存在的的一個 bug。

    直接按 Win 鍵,搜索「服務」並打開,找到 sysMain,禁用它並重啓電腦可解決。

這個服務若是找不到,就找它的舊名 superFetch,此服務實際上是針對機械硬盤的緩存服務,對固態沒用,能夠放心禁用掉。

4. 修改命令提示符

默認的 Git Bash 長這樣,自帶的一些主題配色倒還能接受,可是這個命令提示符前的那一長串也太礙眼了,先來簡化這個命令提示符吧。

如下全部命令都須要在 Git Bash 中執行

下面這個文件是跟命令提示符有關的

$ vim /etc/profile.d/git-prompt.sh
複製代碼

若是不熟悉 vim,而且電腦上裝了 VSCode,能夠用如下命令打開文件

$ code /etc/profile.d/git-prompt.sh
複製代碼

將其修改成以下內容

if test -f /etc/profile.d/git-sdk.sh
then
	TITLEPREFIX=SDK-${MSYSTEM#MINGW}
else
	TITLEPREFIX=$MSYSTEM
fi

if test -f ~/.config/git/git-prompt.sh
then
	. ~/.config/git/git-prompt.sh
else
	PS1='\[\033]0;Bash\007\]'      # 窗口標題
	PS1="$PS1"'\n'                 # 換行
	PS1="$PS1"'\[\033[32;1m\]'     # 高亮綠色
	PS1="$PS1"'➜ '               # unicode 字符,右箭頭
	PS1="$PS1"'\[\033[33;1m\]'     # 高亮黃色
	PS1="$PS1"'\W'                 # 當前目錄
	if test -z "$WINELOADERNOEXEC"
	then
		GIT_EXEC_PATH="$(git --exec-path 2>/dev/null)"
		COMPLETION_PATH="${GIT_EXEC_PATH%/libexec/git-core}"
		COMPLETION_PATH="${COMPLETION_PATH%/lib/git-core}"
		COMPLETION_PATH="$COMPLETION_PATH/share/git/completion"
		if test -f "$COMPLETION_PATH/git-prompt.sh"
		then
			. "$COMPLETION_PATH/git-completion.bash"
			. "$COMPLETION_PATH/git-prompt.sh"
			PS1="$PS1"'\[\033[31m\]'   # 紅色
			PS1="$PS1"'`__git_ps1`'    # git 插件
		fi
	fi
	PS1="$PS1"'\[\033[36m\] '      # 青色
fi

MSYS2_PS1="$PS1"
複製代碼

效果以下:

命令提示符被修改爲了,右箭頭 + 當前目錄,這個很是像 oh-my-zsh 的默認主題,文字的顏色也改爲了青色,窗口的標題也被簡化了。

改的地方很少,就幾行,都有註釋,若是想自行修改能夠參考這篇文章,寫的很詳細。

解決 Unicode 字符顯示異常問題

這裏其實還有個坑。某些版本的 Win 10 存在 Unicode 字符顯示異常的問題,好比 1809,具體的表現是,上面的那個右箭頭會顯示成方框。改編碼方式是無效的,修改字體可解決。

點擊這裏下載 DejaVu Sans Mono 字體

執行如下命令,會打開字體文件夾,將字體託進去會自動安裝,而後將修改 Git Bash 的字體就能正常顯示 Unicode 字符了。(start 是 cmd 所提供的命令)

$ start c://Windows//Fonts
複製代碼

5. 修改主題

Git Bash 自帶的那一套主題我是不太喜歡的,因此我本身改了一套,在用戶目錄下建立 .minttyrc 並寫入如下內容便可

注意:這個文件中的第一行設置了字體,此字體若是上面沒有安裝的話,就把這行刪了,不然會報錯

$ vim ~/.minttyrc
複製代碼
Font=DejaVu Sans Mono for Powerline
FontHeight=14
Transparency=low
FontSmoothing=default
Locale=C
Charset=UTF-8
Columns=88
Rows=26
OpaqueWhenFocused=no
Scrollbar=none
Language=zh_CN

ForegroundColour=131,148,150
BackgroundColour=0,43,54
CursorColour=220,130,71

BoldBlack=128,128,128
Red=255,64,40
BoldRed=255,128,64
Green=64,200,64
BoldGreen=64,255,64
Yellow=190,190,0
BoldYellow=255,255,64
Blue=0,128,255
BoldBlue=128,160,255
Magenta=211,54,130
BoldMagenta=255,128,255
Cyan=64,190,190
BoldCyan=128,255,255
White=200,200,200
BoldWhite=255,255,255

BellTaskbar=no
Term=xterm
FontWeight=400
FontIsBold=no
複製代碼

效果以下:

你也能夠在這裏本身設計一套。

6. 使用 alias 強化 Git Bash

alias 是命令的別名,能夠把多條命令設置一個簡寫。在用戶目錄建立 .bash_profile 文件,將 alias 寫在此文件中。

下面是我列舉的部分 alias,例如鍵盤敲出 gitauto 就能自動提交一次代碼、敲出 e 而後回車就能退出終端,節省了不少時間。

能夠把本身的經常使用操做放到這裏面來能夠大大提升效率。

$ vim ~/.bash_profile
複製代碼
alias bashalias='code ~/.bash_profile'
alias bashcolor='code ~/.minttyrc'
alias bashconfig='code /etc/profile.d/git-prompt.sh'
alias gitconfig='code ~/.gitconfig'

alias .='cd ~'
alias ..='cd ..'
alias ...='cd ../..'
alias e='exit'
alias cls='clear'

alias gs='git status'
alias ga='git add .'
alias gc='git commit -m'
alias gp='git push'
alias gitauto='git add . && git commit -m "auto deploy" && git push'

alias sysoff='shutdown -s -t 0'
alias sysre='shutdown -r -t 0'

alias host='code /c/Windows/System32/drivers/etc/hosts'
複製代碼

7. 使用 tmux 打造高效終端

tmux 是終端複用神器,能夠解決 Git Bash 沒有多標籤功能的問題

首先感謝 hongwenjun 提取的 tmux for windows,讓 windows 安裝 tmux 變得如此簡單,只須要執行如下幾條命令便可:

$ git clone https://github.com/xnng/bash.git
$ cd bash
$ cp tmux/bin/* /usr/bin
$ cp tmux/share/* /usr/share -r
複製代碼

建立配置文件支持鼠標拖動窗口分隔線

$ vim ~/.tmux.conf
複製代碼
setw -g mouse
set-option -g history-limit 20000
set-option -g mouse on
bind -n WheelUpPane select-pane -t= \; copy-mode -e \; send-keys -M
bind -n WheelDownPane select-pane -t= \; send-keys -M
複製代碼

若是你還不瞭解 tmux,建議看下掘金的這篇文章學習下。

我在這裏演示下 tmux 的兩個重要操做,來看下使用它的好處:

  • 首先是使用會話代替多標籤功能,只須要幾個快捷鍵就能完成

  • 而後是分屏功能,還支持鼠標自由拖動和點擊

8. 拓展命令

Git Bash 有時可能沒有本身須要的某些命令,好比 treewget

個人建議是,若是能找到這些命令的 windows 版,就儘可能找一下。把命令的 exe 文件放到 /usr/bin 目錄下便可。

能夠經過下面的方式快速安裝我找的這兩個命令

$ git clone https://github.com/xnng/bash.git
$ cd bash
$ cp tools/* /usr/bin
複製代碼

若是沒找到某些命令的 windows 版怎麼辦?我不建議安裝一個包管理器,例如 Chocolatey,它在國內的網絡環境上並很差用,反而徒增煩惱。

微軟推出的 Linux 子系統 WSL 是一個很好的選擇。這裏就不介紹怎麼安裝 WSL 了。

擁有了 WSL 就至關於擁有了一個 Linux 操做系統的包管理器,間接的就至關於擁有了一切 Linux 命令。

執行如下命令能夠進入到 WSL:

$ winpty wsl
複製代碼

我我的認爲 WSL 適合用來拓展 Git Bash 的命令,但不適合用來作爲開發環境使用,性能跟不上是一方面,坑多又是另外一方面。

9. 在開發工具中使用 Git Bash

  • 在 VSCode 中使用

    settings.json 中添加以下配置,其中 bash.exe 的路徑 要改爲本身的。

    {
      "terminal.integrated.shell.windows": "C:\\Program Files\\Git\\bin\\bash.exe",
      "terminal.integrated.shellArgs.windows": ["--login", "-i"],
    }
    複製代碼

    效果以下:

  • 若是你用的是 JetBrain 家的軟件,那也很簡單,在設置裏把 shell 的路徑改一下就能夠了。

其它的就不一一列舉了。

相關文章
相關標籤/搜索