Git Bash 的配置
通过这篇文章, 可以了解到:
- 为什么要使用 Git-Bash, 以及 Git-Bash 的优点
- Git-Bash 的外观主题配置
- Git-Bash 修改提示符 PS1
- Git-Bash 命令行基础
- Git-Bash 快捷键
可以在这里 files/git-bash at master · HenryTSZ/files (opens new window) 获取设置文件, 下载后放到 C:\Users\你电脑的用户名
# Git-Bash 的优点
在开发的过程中, 我们可能需要使用大量的命令行工具, 或者远程连接到服务器进行操作. 然而, 由于 Window
自带的 CMD
和 PowerShell
都不太好用, 而且在 Window
下的命令又与 Linux
和 MacOS
的命令不太一样, 如果需要经常跨平台操作, 学习 Window
的命令行命令无疑是增加了学习成本, 因此就有了需要一个能做到通用命令的工具.
在 Window
下使用类似 Linux
命令的工具有很多, 例如 Window10
上提供的 WSL(Window Sub Linux)
, CygWin
以及 Git-Bash
.
# WSL
The Windows Subsystem for Linux lets developers run Linux environments -- including most command-line tools, utilities, and applications -- directly on Windows, unmodified, without the overhead of a virtual machine.
WSL
是微软提供的一套可以运行 Linux
环境而又不用加载虚拟机的子系统. 使用 WSL
可以像使用 Ubuntu
一样的操作, 而且还能访问 Window
上的文件系统.
# CygWin
CygWin
是运行在 Window
平台的类 Unix
环境, CygWIn
通过将部分 Posix
调用转换成 Window
的 API
调用, 从而实现相关功能.
# Git-Bash
我们这篇文章介绍的 Git-Bash
, 是 Git官网 (opens new window) 上提供的一个 Git
开发工具包里的一个命令行组件.
Git-Bash
源自 MinGW
, 是一个用于开发原生 Window
应用的开发环境, 提供了针对 Win32
应用的 GCC、GNUbinutils
等工具.
我们可以根据自己的需求, 进行选择, 这里我选择 Git-Bash
的原因, 是我的开发需求主要为启动前端服务及提交代码, 因此选择 Git-Bash
较为方便、简单.
# Git-Bash 下载安装
可以在 Git 官网 (opens new window)下载, 不过国内比较慢; 推荐从淘宝镜像 (opens new window)下载
安装比较简单, 基本上就是傻瓜式安装: Windows Git 2.27.0的快速下载与安装 - 知乎 (opens new window)
# Git-Bash 的主题配置
Git-Bash
原生的主题, 其实也并不难看, 更换 Git-Bash
的需求主要在于: Git-Bash
原生的主题配色和 MacOS
下 iTerm Solarized
主题配色差距甚大. 因此, 一是视觉上不统一, 看上去不习惯, 二是本着手贱的探索精神, 总希望做点特别的挑战, 就有了去修改 Git-Bash
主题的需求.
修改 Git-Bash
主题主要有两个困难: 一是 Git-Bash
自带的 Options
下 Text
设置有缺陷, 只有有限的字体可选, 一些系统上已经安装了的字体, 这里并没有得选择. 二要使用 Git-Bash SSH
连接使用了 agnoster
主题的 ZSH
, 需要一种含特殊字符的字体 Powerline
, 没有了这种字体, 就会出现乱码.
# Git-Bash 配色主题设置
配置方法很简单, 在 Git-Bash
中我们输入以下代码: vi ~/.minttyrc
, 然后把以下内容添加到配置文件里面
BoldAsFont=yes
FontHeight=12
Scrollbar=none
Term=xterm-256color
BoldAsColour=yes
Black=7,54,66
Red=220,50,47
Green=133,153,0
Yellow=181,137,0
Blue=38,139,210
Magenta=211,54,130
Cyan=42,161,152
White=238,232,213
BoldBlack=0,43,54
BoldRed=203,75,22
BoldGreen=88,110,117
BoldYellow=101,123,131
BoldBlue=131,148,150
BoldMagenta=108,113,196
BoldCyan=147,161,161
BoldWhite=253,246,227
ForegroundColour=192,192,192
BackgroundColour=0,43,54
CursorColour=133,153,0
Columns=80
Rows=25
BoldAsFont=-1
Locale=zh_CN
Charset=UTF-8
Font=Consolas
Transparency=off
CursorType=block
CursorBlinks=yes
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
在 vim
编辑器下, 你可以使用方向键移动光标, 按 i
进入编辑模式, 编辑好后按 esc
退出编辑模式, 随后输入 :wq
并回车即可保存. 有关 Vim
的更多使用方法你可以参考这篇教程 (opens new window).
然后重启 Git-Bash
, 即可看到新的主题配色, 以下是我的 Git-Bash
外观主题配置样例.
# Git-Bash 修改提示符 PS1
PS1
被称为 prompt
(提示符), 是终端环境变量的其中之一, 主要用于 bash
命令前的提示词. 可以改成各种奇形怪状的内容, 自定义空间超大. 除了 PS1
, 还有 PS2-4
, 这些暂时没有用到. 搜索 linux ps1
能看到相关介绍.
默认的 PS1
最前面的 用户名@主机名 一般我们是用不到的, 一层一层目录实在太长太占地方, 而且截屏时也不方便把全路径显示出来, git
分支没有提示当前状态, 配色也不太好看, 丑兮兮的
# 获取当前 PS1 配置
echo $PS1
# PS1 修改语法
# 引号里面可以写任何内容
export PS1="$"
2
# PS1 修改步骤
打开 bash 配置文件
vi ~/.bash_profile
1添加 PS1 配置
# 折叠路径 function _getShortPwd() { echo -n `pwd | sed -e "s!$HOME!~!" | sed "s:\([^/]\)[^/]*/:\1/:g"` } # git function _getGitPS1() { git status > /dev/null 2>&1 if [ $? == 0 ]; then local branch= `git branch | grep \* | cut -d ' ' -f2` status= `git status 2>&1 | tee` dirty= `echo -n "${status}" 2> /dev/null | grep "modified:" &> /dev/null; echo "$?"` untracked= `echo -n "${status}" 2> /dev/null | grep "Untracked files" &> /dev/null; echo "$?"` ahead= `echo -n "${status}" 2> /dev/null | grep "Your branch is ahead of" &> /dev/null; echo "$?"` newfile= `echo -n "${status}" 2> /dev/null | grep "new file:" &> /dev/null; echo "$?"` renamed= `echo -n "${status}" 2> /dev/null | grep "renamed:" &> /dev/null; echo "$?"` deleted= `echo -n "${status}" 2> /dev/null | grep "deleted:" &> /dev/null; echo "$?"` bits='' if [ "${renamed}" == "0" ]; then bits=">${bits}" fi if [ "${ahead}" == "0" ]; then bits="*${bits}" fi if [ "${newfile}" == "0" ]; then bits="+${bits}" fi if [ "${untracked}" == "0" ]; then bits="?${bits}" fi if [ "${deleted}" == "0" ]; then bits="x${bits}" fi if [ "${dirty}" == "0" ]; then bits="!${bits}" fi if [ ! "${bits}" == "" ]; then echo " $branch $bits" else echo " $branch" fi fi } PS1='\[\e[38;5;166m\]$(_getShortPwd)\[\e[0m\]\[\e[38;5;135m\] >\[\e[0m\]\[\e[38;5;118m\]$(_getGitPS1)\[\e[0m\] \$ ' # title show path export PS1="\[\e]0;\w\a\]$PS1"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47:wq
保存退出生效配置
source ~/.bash_profile
1
以上配置大部分参考了这篇文章: 你不需要花哨的命令提示符 - 知乎 (opens new window)
PS1
具体配置可以看这篇文章: linux 下 PS1 命令提示符设置, 这里就不再详述
# Git-Bash 命令行基础
# 一、常见命令
操作 | 命令 |
---|---|
进入目录 | cd |
显示当前目录 | pwd |
创建目录 | mkdir 目录名 |
创建目录 | mkdir -p 目录路径 |
我是谁 | whoami |
查看路径 | ls 路径 |
查看路径 | ls -a 路径(显示隐藏文件) |
查看路径 | ls -l 路径(显示更多信息(drwx:d 是否是目录, rw 是否可以读写, x 是否可以执行)) |
查看路径 | ls -al 路径 (显示隐藏信息和详细信息) |
创建文件 | echo '1' > 文件路径 (并且把内容"1"写入文件) |
强制创建文件 | echo '1' >! 文件路径(只能用在 linux, windows 出错)强制重定向, 覆盖原来有的内容 |
追加文件内容 | echo '1' >> 文件路径(只能用在 linux, windows 出错) |
创建文件 | touch 文件名 |
改变文件更新时间 | touch 文件名 |
复制文件 | cp 源路径 目标路径(可以覆盖原来有的文件) |
复制目录 | cp -r 源路径 目标路径 |
移动节点 | mv 源路径 目标路径(修改文件名) |
删除文件 | rm 文件路径 |
强制删除文件 | rm -f 文件路径 |
删除目录 | rm -r 目录路径 |
强制删除目录 | rm -rf 目录路径 |
查看目录结构 | tree(windows 不支持) |
建立软链接 | ln -s 真实文件 链接 |
下载文件 | curl -L https://www.baidu.com (opens new window) > baidu.html |
拷贝网页 | wget -p -H -e robots=off https://www.baidu.com (opens new window) (整个网页所有文件) |
磁盘占用 | df -kh |
当前目录大小 | du -sh . |
各文件大小 | du -h |
查看文件内容 | cat |
# 需要注意的点
- 各种符号代表的含义
~
: 用户目录: 我的电脑上就是C:/Users/lih-y
/
: 根目录, 一个/
就是根目录, 不管你有多少个硬盘, 他会把所有硬盘联合起来当作一块.
: 一个点表示当前目录,../
: 两个点表示父目录- TAB 键可以补全文件名或者目录
- 绝对路径与相对路径
- 如果一个路径是用
/
开始的, Windows 就从根目录开始找起(绝对路径), 否则就从当前目录开始找(相对路径).
# 二、命令行技巧
# 1. 打开 Git Bash 自动运行
- 首先在命令行输入
vi ~/.bashrc
创建一下这个文件 - 按
i
进入编辑模式编辑这个文件, 内容为echo 'Hi'
- 你也可以用命令行编辑文件
echo "echo 'hi'" >> ~/.bashrc
- 关闭退出 Git Bash, 然后打开 Git Bash, 是不是看到了 Hi, 这说明每次进入 Git Bash, 就会优先运行
~/.bashrc
里面的命令 - 如果没有看到 Hi, 运行
source ~/.bashrc
, 作用是执行~/.bashrc
- 重新编辑
~/.bashrc
, 内容改为cd ~/Desktop
, 重启 Git Bash, 有没有发现默认就进入桌面目录了? - 你可以用
~/.bashrc
在进入 Git Bash 前执行任何命令, 十分方便.
# 2. alias
命令行缩写
在
~/.bashrc
里新增一行alias f="echo 'frank is awesome'"
, 等于号两边不能有空格, 你最好一个字都不要错.运行
source ~/.bashrc
, 作用是执行~/.bashrc
运行
f
, 就会看到frank is awesome
也就是说, 现在
f
就是echo 'frank is awesome'
的缩写了, 利用这个技巧, 我们可以把很多常见的命令缩写一下, 比如:alias ll='ls -l' alias .='../' alias ..='../../' alias ...='../../../' alias gl='git pull' alias gaa='git add .' alias gcmsg='git commit -m' alias gcam='git commit -a -m' alias gp='git push' alias gco='git checkout' alias gm='git merge' alias gss='git status -s' alias glol='git log –graph –pretty = format:’%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset’ –abbrev-commit' alias grh='git reset HEAD' alias gba='git branch -a' alias gcf='git config –list' alias gcl='git clone –recursive' alias gd='git diff' alias ghh='git help' alias ns='npm run serve' alias nb='npm run build' alias nd='npm run dev'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24保存退出, 然后运行
source ~/.bashrc
这样一来, 你的 Git 操作就会简单很多:
gl gaa gcam 'msg' gp
1
2
3
4
# 3. 启动问候语
设想一下: 每次打开 Git Bash, 就会输出问候语, 告诉你当前时间, 今天天气状况, 是不是感觉一天的心情都是棒棒哒.
在命令行获取天气可以使用 chubin/wttr.in: The right way to check the weather (opens new window) 这个库
在 ~/.bashrc
里新增以下代码:
hello() {
weather=$(curl wttr.in/?format="%E6%82%A8%E7%8E%B0%E5%9C%A8%E7%9A%84%E4%BD%8D%E7%BD%AE%E5%9C%A8:%20%l,%20%E5%A4%A9%E6%B0%94%E4%B8%BA:%20%C,%20%E6%B8%A9%E5%BA%A6%E4%B8%BA:%20%t,%20%E6%B9%BF%E5%BA%A6%E4%B8%BA:%20%h,%20%E9%A3%8E%E5%8A%9B%E4%B8%BA:%20%w,%20%E9%99%8D%E6%B0%B4%E4%B8%BA:%20%p&lang=zh" -#)
me="亲爱的 $(whoami),"
time="今天是 $(date "+%F %T %A"),"
arr=('Hi!' ${me} ${time} ${weather})
i=0
l=${#arr[*]}
while [ $i -le $l ]
do
if [ $i == $l ]
then
echo ${arr[$i]}
else
echo -e "${arr[$i]} \c"
fi
let "i++"
sleep 0.2
wait
done
}
hello
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 三. 解决.bashrc 文件每次打开终端都需要 source 的问题
这个问题困扰我很久, 我明明改了 ~/.bashrc
文件, 每次打开 Git Bash 都要手动输入 source ~/.bashrc
, 配置才会生效, 很是头疼, 于是我就研究了一下解决办法以及问题的原因是什么.
# 解决方法
vi ~/.bash_profile
在文件内部输入:
# Loading .bashrc File
if test -f ~/.bashrc; then
source ~/.bashrc
fi
2
3
4
在 .bash_profile
文件中自动加载 .bashrc
文件.
# Git-Bash 快捷键
# 基本操作
命令 | 介绍 |
---|---|
Ctrl + Insert | 复制 |
Shift + Insert | 黏贴 |
# 控制命令
命令 | 介绍 |
---|---|
Ctrl + l | 清屏 |
Ctrl + o | 执行当前命令, 并选择上一条命令 |
Ctrl + s | 阻止屏幕输出 |
Ctrl + q | 允许屏幕输出 |
Ctrl + c | 终止命令 |
Ctrl + z | 挂起命令 |
# 编辑命令
命令 | 介绍 |
---|---|
Ctrl + a | 移到命令行首 |
Ctrl + e | 移到命令行尾 |
Ctrl + f | 按字符前移(右向) |
Ctrl + b | 按字符后移(左向) |
Alt + f | 按单词前移(右向) |
Alt + b | 按单词后移(左向) |
Ctrl + xx | 在命令行首和光标之间移动 |
Ctrl + u | 从光标处删除至命令行首 |
Ctrl + k | 从光标处删除至命令行尾 |
Ctrl + w | 从光标处删除至字首 |
Alt + d | 从光标处删除至字尾 |
Ctrl + d | 删除光标处的字符 |
Ctrl + h | 删除光标前的字符 |
Ctrl + y | 粘贴至光标后 |
Alt + c | 从光标处更改为首字母大写的单词 |
Alt + u | 从光标处更改为全部大写的单词 |
Alt + l | 从光标处更改为全部小写的单词 |
Ctrl + t | 交换光标处和之前的字符 |
Alt + t | 交换光标处和之前的单词 |
Alt + Backspace | 与 Ctrl + w 类似, 分隔符有些差别 |
# 重新执行命令
命令 | 介绍 |
---|---|
Ctrl + r | 逆向搜索命令历史 |
Ctrl + g | 从历史搜索模式退出 |
Ctrl + p | 历史中的上一条命令 |
Ctrl + n | 历史中的下一条命令 |
Alt + . | 使用上一条命令的最后一个参数 |
# 参考资料
- Window 平台 Git-Bash 的主题配置 - 简书 (opens new window)
- Git Bash 主题配置 - 码农教程 (opens new window)
- Bash shell / Zsh 里修改前缀 (隐藏用户@主机, 添加 Git 分支名称) - 简书 (opens new window)
- 终端可以使用 emoji🖖🏻 表情作为提示词呢-Coder们, 来搞一个花哨的终端吧! - 简书 (opens new window)
- 你不需要花哨的命令提示符 - 知乎 (opens new window)
- Git Bash 命令行基础 - 马涛涛的博客——前端的征途 - SegmentFault 思否 (opens new window)
- 解决.bashrc 文件每次打开终端都需要 source 的问题 - 简书 (opens new window)
- Git Bash 使用技巧 · Laravel 5.5 学习笔记 · 看云 (opens new window)