我们在键盘上留下的余温, 也将随时代传递到更远的将来


:D 获取中...

通过这篇文章, 可以了解到:

  • 为什么要使用 Git-Bash, 以及 Git-Bash 的优点
  • Git-Bash 的外观主题配置
  • Git-Bash 修改提示符 PS1
  • Git-Bash 命令行基础
  • Git-Bash 快捷键

可以在这里 files/git-bash at master · HenryTSZ/files 获取设置文件, 下载后放到 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官网 上提供的一个 Git 开发工具包里的一个命令行组件.

Git-Bash 源自 MinGW , 是一个用于开发原生 Window 应用的开发环境, 提供了针对 Win32 应用的 GCC、GNUbinutils 等工具.

我们可以根据自己的需求, 进行选择, 这里我选择 Git-Bash 的原因, 是我的开发需求主要为启动前端服务及提交代码, 因此选择 Git-Bash 较为方便、简单.

Git-Bash 下载安装

可以在 Git 官网下载, 不过国内比较慢; 推荐从淘宝镜像下载

安装比较简单, 基本上就是傻瓜式安装: Windows Git 2.27.0的快速下载与安装 - 知乎

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 , 然后把以下内容添加到配置文件里面

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

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

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

Git-Bash 修改提示符 PS1

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

default PS1

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

获取当前 PS1 配置

1
echo $PS1

PS1 修改语法

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

PS1 修改步骤

  1. 打开 bash 配置文件

    1
    vi ~/.bash_profile
  2. 添加 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
    # 折叠路径
    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"

    :wq 保存退出

  3. 生效配置

    1
    source ~/.bash_profile

changed PS1

以上配置大部分参考了这篇文章: 你不需要花哨的命令提示符 - 知乎

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 > baidu.html
拷贝网页 wget -p -H -e robots=off https://www.baidu.com (整个网页所有文件)
磁盘占用 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' 的缩写了, 利用这个技巧, 我们可以把很多常见的命令缩写一下, 比如:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    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'
  5. 保存退出, 然后运行 source ~/.bashrc

    这样一来, 你的 Git 操作就会简单很多:

    1
    2
    3
    4
    gl
    gaa
    gcam 'msg'
    gp

3. 启动问候语

设想一下: 每次打开 Git Bash, 就会输出问候语, 告诉你当前时间, 今天天气状况, 是不是感觉一天的心情都是棒棒哒.

在命令行获取天气可以使用 chubin/wttr.in: The right way to check the weather 这个库

在 ~/.bashrc 里新增以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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

hello

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

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

解决方法

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

1
2
3
4
# Loading .bashrc File
if test -f ~/.bashrc; then
source ~/.bashrc
fi

在 .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 + . 使用上一条命令的最后一个参数

参考资料


 评论

 无法加载Disqus评论系统,请确保您的网络能够正常访问。