• 【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

  • 相关阅读:
    建筑建材行业B2B电子商务网站方案:赋能建材企业转型升级,实现降本提效
    应用特征感知与协同表示的高光谱图像分类方法
    TS 入门指南
    分布式事务中的那些事——微服务总结(二)
    C++ 函数
    分分钟让你学会栈和队列
    Redis 学习笔记
    5.Mybatis 基础知识
    Flutter SQLite 教程之笔记App 数据存储CRUD操作基于 Flutter Sqflite 插件
    ant-design-vue 库 Loading 组件封装
  • 原文地址:https://blog.csdn.net/qq_43413788/article/details/127080431