作者:Mintimate
博客:www.mintimate.cn
Mintimate's Blog,只为与你分享
Zsh
几个月前,我们就介绍了ZSH(z shell),并介绍配置了Oh-my-zsh:Linux/Mac如何配置ZSH并使用Oh-my-zsh?让你的终端更加实用、美观:https://cloud.tencent.com/developer/article/1784739
macOS和Arch Linux都默认使用Zsh作为默认Shell,你可以在Terminal输入:
代码语言:shell复制# 直接看环境变量
echo $SHELL
# 或者用$0查看
echo $0
如果你显示的是
bash
或者/bin/bash
,那么说明你使用的是Bash。你可以在看完本篇文章后,配合上文提到的文章,按需定制的你Shell,助力开发。
Oh-my-zsh
上篇文章,我们安装好Zsh,其实就相当于做好了一辆车?的骨架,还需要安装轮子和发动机等等。而使用Oh-my-zsh这样的Zsh配置框架,能快速帮我们组装好这样汽车,让它能跑起来。
激活oh-my-zsh,可以直接直观体会到:
- 丰富的代码提示:oh-my-zsh默认对文件和文件夹或注释和代码进行颜色分阶显示,增加Terminal在操作时候的可读性。
- 命令自动填充:对一些目录和文件操作的时候,我们甚至不需要提前用
ls
或ll
等命令对文件进行扫描或记忆,只需要按Tab键即可遍历或填充
。
实际上,Oh-my-zsh还支持很多丰富的插件,甚至可以说,Oh-my-zsh自带了很多丰富的插件,等着你去激活。
虽然很多人觉得Oh-my-zsh过于臃肿,以至于Terminal在启动过程中,需要花费好几秒去读取配置。但是,实际上你激活的插件适当,不是激活那么多插件,Oh-my-zsh并不会拖慢多少速度。如果实在觉得Oh-my-zsh臃肿,那么下次我介绍一下
zimfw
?
本次教程就推荐大家我常用的插件,并演示如何使用。
前置依赖
本次教程和演示,需要的前置依赖:
- Linux或macOS已经配置了Zsh
如果你实现并没有配置Z sh,你可以参考文章:https://cloud.tencent.com/developer/article/1784739
另外,本次教程使用腾讯云轻量应用服务器的Debian系统进行操作,同是支持腾讯云轻量应用服务器的CentOS系统以及macOS系统。
如果一些Linux新手,之前并没有使用Linux,十分推荐一开始就换Zsh,也很推荐买一台腾讯云轻量应用服务器进行学习,效果可比本地虚拟机好多了。
致开发者
如果你也是开发者,而且使用或者希望使用腾讯云的产品,或者对腾讯云产品有什么意见或建议。欢迎各位开发者加入腾讯TDP哦,当然也可以进来交流交流代码技术或Linux使用(比如:怎么样的Shell才是最好的Shell……哈哈?):
配置思路
本次教程使用Oh-my-zsh作为Zsh框架进行插件的配置,你可以根据自己的喜好,使用其他Zsh框架进行插件配置。
内置插件
Oh-my-zsh其实已经默认自带一些插件,如果你已经安装好Oh-my-zsh,可以进入$HOME/.oh.my-zsh/plugins
内查看:
另外,如果想看Oh-my-zsh自带那些插件,也可以Web上查看:https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins。
这些自带插件,会随着Oh-my-zsh的更新而更新:
本次教程,就和大家介绍我常用的自带插件:encode64
、git
、cp
和sudo
插件:
有没有小伙伴好奇,我安装的brew和nvm插件呢?
encode64
先介绍一个好玩,关键时候有点用的插件。
简单“滴”说,这个插件就是文本和Base64互转。再也不用搜索引擎搜索“Base64在线转码了”
。
首先是$HOME/.zshrc
文件内的存在一个plugin
配置项,实际上这个是一个数组对象,在里面添加encode64
来激活我们的encode64插件:
之后,不要忘记重载环境变量(source命令):
代码语言:shell复制source ~/.zshrc
不出意外就可以使用了:
代码语言:shell复制# Base64编码
e64 "Hello World"
encode64 "Hello World"
# Base64解码
d64 SGVsbG8gV29ybGQ=
decode64 SGVsbG8gV29ybGQ=
当然,如果是一些Zsh关键字,比如
"
、<
等,记得转义哦。
现在,可以看到插件也不是很难,我们看看更多实用的插件。
git
这个插件,实际上是Oh-my-zsh安装时候,就自动激活的。目的很简单:简化git命令,原理是使用了alias
来给命令取别名。
举个例子,我本来使用git命令,添加当前文件夹里所有文件进行,以备commit
,是不是需要:
git add --all
但是,我们可以编写一条alias
来简化:
alias gaa='git add --all'
把这个简化命令,写到$HOME/.zshrc
等环境变量后,就可以用gaa
命令来调用git add --all
了。
事实上,Oh-my-zsh里的git
插件就是这样简化的。
部分命令简化表:
简化后的命令 | 原命令 |
---|---|
g | git |
ga | git add |
gaa | git add --all |
gapa | git add --patch |
gau | git add --update |
gav | git add --verbose |
gap | git apply |
gapt | git apply --3way |
gb | git branch |
gba | git branch -a |
gcan! | git commit -v -a --no-edit --amend |
gcans! | git commit -v -a -s --no-edit --amend |
gcam | git commit -a -m |
gcas | git commit -a -s |
gcasm | git commit -a -s -m |
gcsm | git commit -s -m |
gcb | git checkout -b |
gcf | git config --list |
gcl | git clone --recurse-submodules |
gccd | git clone --recurse-submodules "$@" && cd "$(basename $_ .git)" |
gclean | git clean -id |
gpristine | git reset --hard && git clean -dffx |
gignore | git update-index --assume-unchanged |
gignored | git ls-files -v | grep "^:lower:" |
git-svn-dcommit-push | git svn dcommit && git push github $(git_main_branch):svntrunk |
gk | gitk --all --branches &! |
gke | gitk --all $(git log -g --pretty=%h) &! |
gl | git pull |
当然,还要看你用不用的喜欢了。有些小伙伴,平时就是push
、commit
和pull
,也没必要简化。或者用GitHub Desktop
感觉很够用,也没必要简化了。
cp
cp插件,我平常也有使用,原理是使用rsync
让你获得特性和更好的安全性:
这个插件也是和刚刚encode64
的激活方法一样(在$HOME/.zshrc
内的plugins
里插入,并重载环境变量)。
插件定义后,就会有一个cpv的命令。比如,我们移动文件夹:
代码语言:shell复制cpv payload_dumper-master temp --progress -r -hhh
其中:
--progress
:显示进度条-r
:递归-hhh
:同free
、du
等命令的-h
有点像cp命令,加带-v
命令:
cp -v -r payload_dumper-master temp
sudo
其实我挺喜欢这个插件的。平时我用腾讯云轻量应用服务器的Debian系统比较多,并且都是用root
用户直接操作。但是,用Ubuntu系统时候,用ubuntu
用户操作时候,经常忘记加sudo
提权限。
举个例子,我在Linux上,使用systemctl
去操作启动,已经输入完命令,却发现自己没有在命令前,加提权的sudo
,这个时候要把光标移动到最前面添加sudo
么?
systemctl restart aria2
过去是这样的,但是如果使用sudo插件
就不需要了。 在$HOME/.zshrc
内添加sudo
:
之后,source文件后,我们遇到上述情况,只需要按两下ESC,即可自动填充。
非内置插件
终于到非内存插件了。这里我就讲两个插件:
- zsh-syntax-highlighting
- zsh-autosuggestions
可以说是非常好用。非内置插件,是安装在$HOME/.oh-my-zsh/custom/plugins
内:
zsh-syntax-highlighting
首先是zsh-syntax-highlighting:https://github.com/zsh-users/zsh-syntax-highlighting
这个可以说,真的是让你Terminal更加好看让你的Terminal命令更有可读性╮( ̄▽ ̄"")╭。
其实就是输入命令时候,对文件夹、文件进行下划线标识。命令使用高亮颜色标识:
或者看看官方用例:
安装方法很简单啦,毕竟我们用Oh-my-zsh框架。只需要Git到Oh-my-zsh的plugins文件夹后激活即可:
代码语言:shell复制git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
之后,在$HOME/.zshrc
内激活即可:
zsh-autosuggestions
接下来是第二个第三方插件:https://github.com/zsh-users/zsh-autosuggestions。看名字,相信大家都知道这个是干什么的了:自动给出建议?
确实是这样,有点想编译器给出代码提示,比如:
可以看到,有灰色的提示。这个是根据你的$HOME/.zsh_history
来给你命令提示。
如果你觉得这个提示就是你想要的,只需要按方向键->
,即可自动填充。
安装这个插件很简单(毕竟用了Oh-my-zsh框架(*≧ω≦*))
和刚刚一样,进行Git操作:
代码语言:shell复制git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
之后,和刚刚一样去激活即可:
不要忘记重载环境变量:
脚本配置
和之前配置oh-my-zsh一样,我也写了一个一键配置脚本。让大家更快使用,首先需要注意:
$HOME/.zshrc
内已经配置的环境变量注意保存,否则脚本会备份为zshrcBak
$HOME/.oh-my-zsh
也需要注意(如果有修改,比如:安装其他插件),否则备份为oh-my-zsh-Bak
一键脚本:
代码语言:shell复制zsh -c "$(curl -fsSL 'https://api.host.mintimate.cn/fileHost/public/download/2Kof')"
这样的脚本,时候一开始使用oh-my-zsh就配置嗷。可以把文章收藏,以后用~~
END
到此,我们的Oh-my-zsh配置Zsh插件就结束了。你的终端有没有更强大呢?或者说,你的Linux武器有没有更强大?哈哈,本次分享就到这里嗷。有机会讲讲其他Zsh框架。
最后,新年快乐嗷~~~