在我们的日常开发工作中,通常有一部分重复性的工作。这些工作一般复杂度很低,对认知要求不高,属于浮浅工作,存在很大的自动化空间,因此最适合在命令行中完成。将这类工作尽量简化,我们可以更专注的投入到更有价值的深度工作中,提升工作效率。

本文总结了帮助我节省了无数时间的一些经验,希望对你也有帮助。

目录定位

在终端中,定位到指定目录通常需要数次的 cdls,繁琐的操作让每一个想打开终端的人却步。

我们需要一个工具在目录之间快速跳转,而 fasd 正是这样的工具。fasd 帮助我们直接跳转切换过的目录。

$ j some_directory

对于一些已经在 Finder 中打开了目录的场景,可以使用 go2Shell 在命令行直接切换到当前目录。

在使用 fasd 的初期,它通常能百分百命中我们预期的目录。然而经过一段使用之后,这段时间内切换过的目录可能会污染 fasd 的预测结果。

简单查阅 fasd 的文档,可以知道它的数据存储在 ~/.fasd 文件中,每一行存储了目录的相关信息:

/Users/kukushi/Documents/Project|10.7195|1547211464

| 划分了目录,访问频率,上一次访问时间。利用这些信息,我们可以对 .fasd 进行一些清理。于是乎,我编写了一个脚本执行一些简单的清理,让跳转更加的精确。

将以下代码 .zshrc / .bashrc 下,终端每次启动时都会执行此脚本。

# 需要将这个路径改为你存放这个脚本的路径
cleanFASDScript=~/Documents/Scripts/script/clean_fasd.py
if [ -f "$cleanFASDScript" ]; then
  python3 "$cleanFASDScript" -s true
fi

打开工程

进入到工作目录后,我们需要打开工程文件。 对于 Xcode 工程,它提供了 xed 命令让开发者从命令行打开工程文件。

xed

Opens files for editing in XCode.

- Open file in XCode:
    xed file1

- Open file(s) in XCode, create if it doesn't exist:
    xed -c filename1

- Open a file in XCode and jump to line number 75:
    xed -l 75 filename

但是,在一些 Edge Cases,如目录下没有工程文件,xed 会尝试 Markdown 或其他文件,这通常不是我们需要的。

既然 Xcode 提供的不好用,不如让我们自己来做一个吧。编写简单的 bash 代码,利用简单的正则匹配,我们可以找到需要打开的工程文件。

oop() {
    file=$(find -E . -regex ".*xcworkspace" -maxdepth 1)
    fileLength=${#file}
    if [ "$fileLength" = 0 ]; then
        file=$(find -E . -regex ".*xcodeproj" -maxdepth 1)
    fi
    fileLength=${#file}

    if [ "$fileLength" = 0 ]; then
        echo ">>> 🤔  No Xcode Project Found!"
    else
        echo ">>> 💪  Opening $file"
        xcode=$(xcode-select -p)
        xcode=$(echo $xcode | cut -d'/' -f-3)
        open -a $xcode $file
    fi

习惯使用 AppCode 的话,可以把 Bash 代码中的 Xcode 替换为 AppCode。

同样的这份代码需要放到 .zshrc / .bashrc 下,改动之后需要 source .zshrc/.bashrc 让改动生效。

对于非 Xcode 工程,我习惯用 VSCode 编辑,它是如此常用,以至于我也为它设了一个别名:

alias c='code .'

提交代码

在每一个使用类 git-flow 开发流程的团队中,同步 dev 代码几乎是每日的例行公事。我们可以简单的将一些命令封装成一个 function:

syncdev() {
    git stash

    echo ">>> Updating dev"
    git checkout dev
    git pull origin dev

    echo ">>> Applying diff"
    git co -
    git rebase dev

    git stash pop
}

更快的 “Gitlab”

使用 lab,我们可以在命令行直接完成一些常规的 Gitlab 操作。

使用 brew 可以安装 lab:

$ brew install zaquestion/tap/lab

第一次使用 lab,需要输入一些 gitlab 的信息。

创建 MR

使用 lab,我们可以直接创建 MR:

$ lab mr create origin $branch -a $assigne -m $message1 -m $mesasge2

对于大部分的提交,MR 的第一行 Message (即 Title)可以简化为最近一次的 Commit Message。而对于有 Code Review 合码机制的团队,message 的第二行通常是需要进行 Review 的同事,因此我们的命令可以简化成:

# mmr $branch $reviewer
mmr () {
    latestMessage=$(git log -1 --pretty=%B)
    lab mr create origin $1 -a $2 -m $latestMessage -m $2
}

经过这轮简化,创建一个 MR 只需:

mmr dev @someone

你会爱上这种过感觉!

dotfiles

当习惯在命令行进行各种操作之后,我们会沉淀下很多有用的函数/别名/配置,这通常是开始构建自己的 dotfiles 的时候了,具体可以参考 dotfiles。dotfiles 帮助我们管理这些文件,作为一个 bouns point,我们可以在多个设备上”同步” dotfiles 了。

总结

本文总结了我在日常开发中使用命令行的一些经验,希望对其他同学有所帮助,也欢迎同学们交流。

每种工具都有长短,命令行长在执行一些操作,而 GUI 长在界面查看(如对比 Diff),没有必要局限于某种工具。重要是的 Picking the right tool for the job。