别名 alias

基本用法

对于特别长的命令,可以使用 alias 来简化它,比如前文介绍的:

alias gg="git log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%ci) %C(bold blue) <%an>%Creset' --abbrev-commit"

如果存在同名的别名、函数、内置命令等,调用优先级是:

别名 > 单数 > 内置命令 > $PATH 路径下的可执行文件。

一般我们只用 alias 来简化固定的长命令,由于别名不支持参数,所以复杂的处理流程建议通过定义函数来解决。

高级别名

除了普通的 alias,我们还可以创建 后缀 alias 和 全局 alias。创建后缀 alias 的写法是:

alias -s txt='less -r'

它表示对于任意命令 xxx.txt,都会被重写为 less -r xxx.txt,也就是原来的命令作为别名的后缀出现。上面这个 alias 的作用是当我们要输出某个 txt 的文件内容时,只要输入 xxx.txt 就可以了,无需更多的命令。

全局 alias 就更强大了,它会对整个命令进行匹配和替换,举个栗子:

alias -g L='| less'

以前如果想用 less 去查看一个文件需要写成 cat xxx | less,由于有了全局别名,现在只要写成 cat xxx L 即可。

如果输入命令 alias xxx L -r 它会被替换成 alias xxx | less -r

相信读者已经能理解后缀 alias 和全局 alias 的用法,但请慎用,尤其是全局 alias,类似于 C 语言的宏定义,滥用可能会带来一些危险,建议先看看大神是怎么用的,这里面提供了很多 alias,如果不是必要,我建议尽量避免自行添加。

查看定义

如果只是想查看别名或者函数的定义,可以使用 which 命令:

但如果拿到别人的配置脚本,想自行定制。显然只知道定义是不够的,还得知道这个 alias 或者函数是在哪个文件里被定义的,这样才好去修改,此时建议使用我配置的 bswhich 命令:

这是因为查找 alias 定义位置和函数定义位置的方法还不一样,完整的写法是:

function bswhich() {
    if `type $1 | grep -q 'is a shell function'`; then
        type $1
        which $1
    elif `type $1 | grep -q 'is an alias'`; then
        PS4='+%x:%I>' zsh -i -x -c '' |& grep '>alias ' | grep "${1}="
    fi
}

results matching ""

    No results matching ""