切换到Zsh
- 查看当前使用的Shell:
echo $SHELL
、echo $0
或chsh -l
。还有更多方法:查看当前Linux使用的shell - 查看当前Linux的全部Shell:
cat /etc/shells
- 安装zsh:
yum install zsh
(MacOS默认使用zsh) - 切换到zsh:
chsh -s [shell的二进制文件路径]
,如chsh -s /bin/zsh
。切换后要重新打开shell才能生效(当前窗口不生效)
zsh为什么更受欢迎?
参考资料
- Arch-Linux:Zsh 改进了Tab 补全和通配符等功能
- Zsh FAQ:介绍Zsh的擅长
- 为什么说 zsh 是 shell 中的极品?
Zsh是MacOS的默认shell
强大的tab补全
这是bash的补全,每次按tab都会刷一次提示,且不区分大小写。不论是补全路径还是命令都是这样
wushu@wushudeMacBook-Pro ~ $ ls
Applications Public
Desktop Sunlogin Files
Develop dump.rdb
Documents go
Downloads go1.18
wushu@wushudeMacBook-Pro ~ $ cd D#tab
Desktop/ Develop/ Documents/ Downloads/
wushu@wushudeMacBook-Pro ~ $ cd D#tab
Desktop/ Develop/ Documents/ Downloads/
wushu@wushudeMacBook-Pro ~ $ cd D
而zsh的补全,每次按tab,都会在当前行填充可行项
补全路径
wushu@wushudeMacBook-Pro ~ % cd D#tab。继续按tab会在当前行依次填充以下可行项
Desktop/ Develop/ Documents/ Downloads/
补全命令。补全命令名
wushu@wushudeMacBook-Pro / % ja#tab
jar jasper javac javah javapackager
jarsigner java javadoc javap javaws
补全参数、选项,减轻记忆负担。好像是通过插件拓展的,支持一些常用的命令(git、svn、tar等)
wushu@wushudeMacBook-Pro ~ % git #tab (注意git后面有个空格)
add -- add file contents to index
am -- apply patches from a mailbox
apply -- apply patch to files and/or to index
archimport -- import an Arch repository into git
archive -- create archive of files from named tree
bisect -- find, by binary search, change that introduced a bug
blame -- show what revision and author last modified each line
...
wushu@wushudeMacBook-Pro ~ % git a#tab
add -- add file contents to index
am -- apply patches from a mailbox
apply -- apply patch to files and/or to index
archimport -- import an Arch repository into git
archive -- create archive of files from named tree
wushu@wushudeMacBook-Pro ~ % ls -#tab
-1 -- single column output
-@ -- display extended attribute keys and sizes in long listing
-A -- list all except . and ..
-B -- print octal escapes for control characters
-C -- list entries in columns sorted vertically
-F -- append file type indicators
-G -- enable colorized output
...
补全变量名
wushu@wushudeMacBook-Pro ~ % echo $H#tab
HISTCHARS HOMEBREW_BOTTLE_DOMAIN histchars
HISTCMD HOMEBREW_CELLAR history
HISTFILE HOMEBREW_PREFIX historywords
HISTSIZE HOMEBREW_REPOSITORY
HOME HOST
查找历史命令
和bash一样,zsh也通过“上下箭头”按键来查找历史命令。
但bash只是简单地按顺序显示历史命令,而zsh则会根据当前命令行已有的命令部分,匹配显示上一个相同前缀的命令。
例如有这两条历史命令,根据时间排序
cd Develop/ProjectsForCLion/cpp-study/build/
cd Documents/Adobe/
在bash和zsh中,命令行没有任何输入时,按↑
键,会填充cd Documents/Adobe/
而当命令行有cd Dev
时,按↑
键,bash依然会填充cd Documents/Adobe/
,但zsh会填充cd Develop/ProjectsForCLion/cpp-study/build/
。显然zsh要更加灵活易用。
别名
zsh 不仅支持普通 alias,还支持针对文件类型的 alias
alias -s zip='unzip'
alias -s tgz='tar -zxvf'
alias -s sh=vim
这样配置后,在zsh中
输入xx.sh
,会自动用vim打开
输入xx.tgz
,将执行tar -zxvf
解压
输入xx.zip
,将执行unzip
解压
热键绑定
zsh 里面使用 bindkey
命令可以设置一系列热键,用来运行某一个 zsh 内部命令或者某个 shell 命令,谁规定终端只能敲字母呢?
我们还可以按热键,比如从网上下载了一个 tar 包解开后要稍微浏览一下里面的内容,用的最多的两条命令是啥呢?第一条是 ls 命令,每到一个子目录都要先按一下,还有就是 cd … 对吧,配置:
bindkey -s '\eo' 'cd ..\n' # 按下ALT+O 就执行 cd .. 命令
bindkey -s '\e;' 'ls -l\n' # 按下 ALT+; 就执行 ls -l 命令
更优雅的语法
shell编程(脚本)语法:zsh开发指南
丰富的插件
zsh-autosuggestions
:这个是自动建议插件,能够自动提示你需要的命令
zsh-syntax-highlighting
:这个是代码高亮插件,能够使你的命令行各个命令清晰明了
zsh-theme-powerlevel10k
这个主题提供漂亮的提示符,可以显示当前路径、时间、命令执行成功与否,还能够支持 git 分支显示等等。
Oh My Zsh
Oh My Zsh是一个令人愉快的、开源的、社区驱动的框架,用于管理您的 Zsh 配置。它捆绑了数千个有用的功能、助手、插件、主题和一些让你大喊wocao的东西… “哦,我的ZSH!”
使用Oh My Zsh,我们可以非常方便的启用/关闭插件、切换主题等等。
Oh My Zsh官网提供有一键安装命令。注意:安装成功后会覆写~/.zshrc
文件,旧的~/.zshrc
会备份到~/.zshrc.pre-oh-my-zsh
,如果有自己写的东西(如环境变量)要手动添加过来。
官网提供的脚本国内很可能下载不到,可以用这个:
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
安装完成后建议读一遍~/.zshrc
的内容。
————
(MacOS安装时)提示两个目录的权限过多
[oh-my-zsh] Insecure completion-dependent directories detected:
drwxrwxr-x 3 wushu admin 96 2 10 2022 /usr/local/share/zsh
drwxrwxr-x 4 wushu admin 128 3 24 2022 /usr/local/share/zsh/site-functions
执行chmod 755 /usr/local/share/zsh /usr/local/share/zsh/site-functions
即可。
————
zsh捆绑了很多插件和主题,并默认开启了一些
- 安装完成后命令提示符的格式会被改变,
ls
打印的文件名也有颜色了
- 使用tab补全时,按两下
tab
后进入"选择模式",可以用方向键来选择可用项
插件设置
标准插件
标准插件即ohmyzsh自带的插件,都在$ZSH/plugins/
目录下
见官方wiki-Plugins
第三方插件
自定义(第三方)插件也应该添加到$ZSH_CUSTOM/plugins/
。
比如自动补全插件:zsh-autosuggestions
,就需要自己下载并放到$ZSH_CUSTOM/plugins/
通常都可以使用git下载第三方插件,如自动补全插件:zsh-autosuggestions
使用git clone git://github.com/zsh-users/zsh-autosuggestions $ZSH_CUSTOM/plugins/zsh-autosuggestions
,该命令还指定了下载目录为$ZSH_CUSTOM/plugins/
然后在~/.zshrc
中找到plugins=(git)
这一行,修改为plugins=(git zsh-autosuggestions)
即可启用此插件。
其它插件的下载和启用与此同理。
两个常用的插件:自动补全
zsh-autosuggestion
、语法高亮zsh-syntax-highlighting
主题设置
见官方wiki-Themes
我喜欢这个主题af-magic
!