【Linux基础】zsh 和 Oh My Zsh


切换到Zsh

  • 查看当前使用的Shell:echo $SHELLecho $0chsh -l。还有更多方法:查看当前Linux使用的shell
  • 查看当前Linux的全部Shell:cat /etc/shells
  • 安装zsh:yum install zsh (MacOS默认使用zsh)
  • 切换到zsh:chsh -s [shell的二进制文件路径],如chsh -s /bin/zsh。切换后要重新打开shell才能生效(当前窗口不生效)

zsh为什么更受欢迎?

参考资料

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 | Linux 中国

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值