本文中的部份内容可能过时,最新配置请前往 github 查看:github.com/xnng/my-git…html
因为某些特殊缘由,习惯用 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
Git Bash
基于 mintty,有 Linux 文件系统,还有经常使用的一些 Linux 命令。它的性能也很高,还能很方便的嵌入到各类开发工具中。这是我选择它的理由。缓存
但它也有一些缺点,好比太丑了、不能开多标签、缺少某些重要的命令。只要解决这些问题,那么它就是我心目中的完美终端。
为了可以快速打开 Git Bash,我建议下给它设置一个全局快捷键。
Git Bash
,点击「打开文件所在位置」解决快捷键延迟问题
这个时候你可能会遇到一个问题,按下快捷键终端会延迟 3 秒才打开。这是某些版本的 windows 上广泛存在的的一个 bug。
直接按 Win 键,搜索「服务」并打开,找到 sysMain
,禁用它并重启电脑可解决。
这个服务若是找不到,就找它的旧名 superFetch
,此服务实际上是针对机械硬盘的缓存服务,对固态没用,能够放心禁用掉。
默认的 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
复制代码
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
复制代码
效果以下:
你也能够在这里本身设计一套。
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'
复制代码
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 的两个重要操做,来看下使用它的好处:
Git Bash 有时可能没有本身须要的某些命令,好比 tree
和 wget
。
个人建议是,若是能找到这些命令的 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
的命令,但不适合用来作为开发环境使用,性能跟不上是一方面,坑多又是另外一方面。
在 VSCode 中使用
在 settings.json
中添加以下配置,其中 bash.exe
的路径 要改为本身的。
{
"terminal.integrated.shell.windows": "C:\\Program Files\\Git\\bin\\bash.exe",
"terminal.integrated.shellArgs.windows": ["--login", "-i"],
}
复制代码
效果以下:
其它的就不一一列举了。