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


: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 自带的 CMDPowerShell 都不太好用, 而且在 Window 下的命令又与 LinuxMacOS 的命令不太一样, 如果需要经常跨平台操作, 学习 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 调用转换成 WindowAPI 调用, 从而实现相关功能.

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 原生的主题配色和 MacOSiTerm Solarized 主题配色差距甚大. 因此, 一是视觉上不统一, 看上去不习惯, 二是本着手贱的探索精神, 总希望做点特别的挑战, 就有了去修改 Git-Bash 主题的需求.

修改 Git-Bash 主题主要有两个困难: 一是 Git-Bash 自带的 OptionsText 设置有缺陷, 只有有限的字体可选, 一些系统上已经安装了的字体, 这里并没有得选择. 二要使用 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评论系统,请确保您的网络能够正常访问。