别名 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
}