Henry Henry
  • JavaScript
  • TypeScript
  • Vue
  • ElementUI
  • React
  • HTML
  • CSS
  • 技术文档
  • GitHub 技巧
  • Nodejs
  • Chrome
  • VSCode
  • Other
  • Mac
  • Windows
  • Linux
  • Vim
  • VSCode
  • Chrome
  • iTerm
  • Mac
  • Obsidian
  • lazygit
  • Vim 技巧
  • 分类
  • 标签
  • 归档
  • 网站
  • 资源
  • Vue 资源
GitHub (opens new window)

Henry

小学生中的前端大佬
  • JavaScript
  • TypeScript
  • Vue
  • ElementUI
  • React
  • HTML
  • CSS
  • 技术文档
  • GitHub 技巧
  • Nodejs
  • Chrome
  • VSCode
  • Other
  • Mac
  • Windows
  • Linux
  • Vim
  • VSCode
  • Chrome
  • iTerm
  • Mac
  • Obsidian
  • lazygit
  • Vim 技巧
  • 分类
  • 标签
  • 归档
  • 网站
  • 资源
  • Vue 资源
GitHub (opens new window)
  • Mac

  • Windows

    • Windows 上有哪些值得推荐的常用软件
    • Git Bash 的配置
      • Git-Bash 的优点
        • WSL
        • CygWin
        • Git-Bash
      • Git-Bash 下载安装
      • Git-Bash 的主题配置
        • Git-Bash 配色主题设置
      • Git-Bash 修改提示符 PS1
        • 获取当前 PS1 配置
        • PS1 修改语法
        • PS1 修改步骤
      • Git-Bash 命令行基础
        • 一、常见命令
        • 二、命令行技巧
        • 三. 解决.bashrc 文件每次打开终端都需要 source 的问题
      • Git-Bash 快捷键
        • 基本操作
        • 控制命令
        • 编辑命令
        • 重新执行命令
      • 参考资料
    • Windows Terminal 设置与 zsh 安装【非 WSL】
    • 使用 ahk 实现 Manico 功能
  • Linux

  • ShowyEdge
  • 开发效率提升之工具篇
  • 操作系统
  • Windows
Henry
2019-05-05
目录

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
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

在 vim 编辑器下, 你可以使用方向键移动光标, 按 i 进入编辑模式, 编辑好后按 esc 退出编辑模式, 随后输入 :wq    并回车即可保存. 有关 Vim 的更多使用方法你可以参考这篇教程 (opens new window).

然后重启 Git-Bash , 即可看到新的主题配色, 以下是我的 Git-Bash 外观主题配置样例.

# Git-Bash 修改提示符 PS1

PS1 被称为 prompt (提示符), 是终端环境变量的其中之一, 主要用于 bash 命令前的提示词. 可以改成各种奇形怪状的内容, 自定义空间超大. 除了 PS1 , 还有 PS2-4 , 这些暂时没有用到. 搜索 linux ps1 能看到相关介绍.

default PS1

默认的 PS1 最前面的 用户名@主机名 一般我们是用不到的, 一层一层目录实在太长太占地方, 而且截屏时也不方便把全路径显示出来, git 分支没有提示当前状态, 配色也不太好看, 丑兮兮的

# 获取当前 PS1 配置

echo $PS1
1

# PS1 修改语法

# 引号里面可以写任何内容
export PS1="$"
1
2

# PS1 修改步骤

  1. 打开 bash 配置文件

    vi ~/.bash_profile
    
    1
  2. 添加 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 保存退出

  3. 生效配置

    source ~/.bash_profile
    
    1

changed PS1

以上配置大部分参考了这篇文章: 你不需要花哨的命令提示符 - 知乎 (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

# 需要注意的点

  1. 各种符号代表的含义
  • ~ : 用户目录: 我的电脑上就是 C:/Users/lih-y
  • / : 根目录, 一个 / 就是根目录, 不管你有多少个硬盘, 他会把所有硬盘联合起来当作一块
  • . : 一个点表示当前目录,
  • ../ : 两个点表示父目录
  • TAB 键可以补全文件名或者目录
  1. 绝对路径与相对路径
  • 如果一个路径是用 / 开始的, Windows 就从根目录开始找起(绝对路径), 否则就从当前目录开始找(相对路径).

# 二、命令行技巧

# 1. 打开 Git Bash 自动运行

  1. 首先在命令行输入 vi ~/.bashrc 创建一下这个文件
  2. 按 i 进入编辑模式编辑这个文件, 内容为 echo 'Hi'
  3. 你也可以用命令行编辑文件 echo "echo 'hi'" >> ~/.bashrc
  4. 关闭退出 Git Bash, 然后打开 Git Bash, 是不是看到了 Hi, 这说明每次进入 Git Bash, 就会优先运行 ~/.bashrc 里面的命令
  5. 如果没有看到 Hi, 运行 source ~/.bashrc , 作用是执行 ~/.bashrc
  6. 重新编辑 ~/.bashrc , 内容改为 cd ~/Desktop , 重启 Git Bash, 有没有发现默认就进入桌面目录了?
  7. 你可以用 ~/.bashrc 在进入 Git Bash 前执行任何命令, 十分方便.

# 2. alias 命令行缩写

  1. 在 ~/.bashrc 里新增一行 alias f="echo 'frank is awesome'" , 等于号两边不能有空格, 你最好一个字都不要错.

  2. 运行 source ~/.bashrc , 作用是执行 ~/.bashrc

  3. 运行 f , 就会看到 frank is awesome

  4. 也就是说, 现在 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
  5. 保存退出, 然后运行 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

hello

# 三. 解决.bashrc 文件每次打开终端都需要 source 的问题

这个问题困扰我很久, 我明明改了 ~/.bashrc 文件, 每次打开 Git Bash 都要手动输入 source ~/.bashrc , 配置才会生效, 很是头疼, 于是我就研究了一下解决办法以及问题的原因是什么.

# 解决方法

vi ~/.bash_profile 在文件内部输入:

# Loading .bashrc File
if test -f ~/.bashrc; then
  source ~/.bashrc
fi
1
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)
编辑 (opens new window)
#Git
上次更新: 5/27/2023, 1:02:05 PM
Windows 上有哪些值得推荐的常用软件
Windows Terminal 设置与 zsh 安装【非 WSL】

← Windows 上有哪些值得推荐的常用软件 Windows Terminal 设置与 zsh 安装【非 WSL】→

最近更新
01
version 1.15
07-01
02
version 1.14
06-27
03
version 1.13
06-27
更多文章>
Theme by Vdoing | Copyright © 2017-2023 HenryTSZ | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式