配置oh-my-zsh
上一级页面:oh-my-zsh-好看好用的shell
初始化profile文件
如果是从bash切换到zsh的,bash的全局profile文件中有一部分脚本,它应当被复制到zsh的全局profile中,以正确的设置$FONTCONFIG_PATH
、$XDG_DATA_DIRS
等环境变量
见zsh的环境变量的加载-zprofile-zlogin-zshrc-zshenv
加载zsh的配置
见zsh的环境变量的加载-zprofile-zlogin-zshrc-zshenv
切换主题
打开 ~/.zshrc
文件,可以命令行用 vim 打开,也可以直接在资源管理器中打开,编辑其中的 ZSH_THEME
字段就可以更换它的主题,
通过如下命令可以查看可用的Theme
:
1 | ls ~/.oh-my-zsh/themes |
此时我们可以根据该项目 readme 切换主题
1 | sudo apt install vim #debain 默认命令 vi 并没有安装 vim |
修改
1 | ZSH_THEME="agnoster" |
保存后
1 | source ~/.zshrc |
可能发现主题中一些字显示不出来,需要更改terminal(比如vscode/windows terminal等)的字体,具体看文章尾部。见shell-字体配置
更改主题
有一个美妙的 zsh 主题叫做 powerlevel10k:它比较的美观,并且使用了某些方法解决了在 Windows Terminal 这种半透明终端中 PL 展示效果不佳的问题,还提供了比较人性化的解决方案,所以建议使用它:
1 | git clone https://github.com/romkatv/powerlevel10k.git $ZSH_CUSTOM/themes/powerlevel10k |
当然也可以手动克隆之后复制到 ~/.oh-my-zsh/theme
中;安装完成后修改 ~/.zshrc
文件来使用这个主题:
1 | ZSH_THEME="powerlevel10k/powerlevel10k" |
之所以要加上路径,是因为 oh my zsh 通过找到 .zsh
文件来找到安装的主题和插件;第一次使用该主题,会自动跳转到对于这个主题的配置页面:会有一个向导根据你终端对于 PowerLine 和图标的支持帮助你选择合理的不会出现乱码的主题,并且配置向导可以快速的通过 p10k configure
唤起,非常方便。
配置git
zsh扩展
在~/.zshrc
中找到plugins
关键字,就可以自定义启用的插件了,系统默认加载git
插件。
编辑 plugins=(git zsh-autosuggestions)
在括号中增加内容来启用插件;
git插件
在 ~/.zshrc
中配置
1 | plugins=(其他的插件 git) |
命令内容可以参考cat ~/.oh-my-zsh/plugins/git/git.plugin.zsh
。
常用的:
1 | gapa git add --patch |
完整列表:https://github.com/robbyrussell/oh-my-zsh/wiki/Plugin:git
查看插件列表
我们可以先查看oh-my-zsh都自带了什么插件
1 | ll ~/.oh-my-zsh/plugins/ |
extract
oh-my-zsh
自带的插件
解压文件用的,所有的压缩文件,都可以直接x filename
,不用记忆参数
查看其可用的参数
1 | x |
在 ~/.zshrc
中配置
1 | plugins=(其他的插件 extract) |
配置好后,记得source ~/.zshrc
,下同
当然,如果你想要用tar
命令,可以使用tar -
加tab
键,zsh会列出参数的含义。
autojump
先配置好git的ssh key,见git-安装-配置
官方文档介绍,
官方的readme中有一处错误,修正为
1 | git clone git@github.com:wting/autojump.git |
设置python3
在安装时,给与提醒
1 | ./install.py |
需要在~/.zshrc
中配置一下,除了在plugins
中增加autojump
之外,还需要添加以下内容:
1 |
|
Debian, Ubuntu, Linux Mint
安装好之后 ,根据官方文档
1 | cat /usr/share/doc/autojump/README.Debian |
在 ~/.zshrc
中配置
1 | plugins=(其他的插件 autojump) |
安装好之后,记得source ~/.zshrc
,然后你就可以通过j+目录名
快速进行目录跳转。支持目录名的模糊匹配和自动补全。
查看历史路径库:
1 | j --stat |
zsh-autosuggestions
官方安装文档:zsh-autosuggestions/INSTALL.md at master · zsh-users/zsh-autosuggestions (github.com)
1 | git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions |
在 ~/.zshrc
中配置
1 | plugins=(其他的插件 zsh-autosuggestions) |
默认设置的补全快捷键为箭头→
,并不太方便,可以选择在.zshrc
中自定义补全快捷键为逗号,但是也会遇到需要输入逗号的情况,所以,并不太推荐如下修改:
1 | bindkey ',' autosuggest-accept |
zsh-syntax-highlighting
zsh-syntax-highlighting/INSTALL.md at master · zsh-users/zsh-syntax-highlighting (github.com)
1 | git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting |
~/.zshrc
文件中配置:
1 | plugins=(其他的插件 zsh-syntax-highlighting) |
git-open
git-open插件可以在你git项目下打开远程仓库浏览项目。
1 | git clone https://github.com/paulirish/git-open.git $ZSH_CUSTOM/plugins/git-open |
~/.zshrc
文件中配置:
1 | plugins=(其他的插件 git-open) |
关闭oh-my-zsh自动更新
此外,oh-my-zsh
会定期的运行更新检查来从 Github
下载最新的更新;但是由于国内网络环境的因素,这个过程并不能流利地进行,这样就会导致在更新的时候卡在初始化终端,造成不好的体验;关闭自动更新也需要编辑 ~/.zshrc
文件,找到 DISABLE_AUTO_UPDATE
项目,并取消其默认的注释:
1 | - # DISABLE_AUTO_UPDATE="true" |
这样就关闭了 oh-my-zsh
定期的自动更新;如果需要手动更新,可以运行 upgrade_oh_my_zsh
。
解决 oh-my-zsh git 进入目录卡顿问题
调整终端命令历史记录
历史记录存储在 ~/.zsh_history
或 ~/.bash_history
或 ~/.history
中,具体取决于您的 shell。历史记录存储 1000 或 2000 行,具体取决于您的系统。您可以找到历史记录的数量:
1 | echo $HISTSIZE |
HISTSIZE
是会话中保留的最大行数,
SAVEHIST
并且是历史记录文件中保留的最大行数。
HISTFILE
是系统保存历史记录的文件名。
您可以通过将以下内容添加到 .zshrc 来更改这些数字。
1 | HISTSIZE=5000 |
反向 i 搜索
反向 i 搜索允许您从历史记录文件中搜索命令。
按下CTRL+r
以启动它,然后键入您记得要搜索的任何内容。
如果继续按CTRL+r
,终端将搜索历史记录文件中的下一个命令。
查看所有命令历史记录
您可以使用 bash 命令history
查看所有命令历史记录。
1 | shows all command history |
要从历史记录列表中删除命令(仅当该行的第一个字符是空格时),请将以下内容添加到您的:.zshrc
1 | setopt HIST_IGNORE_SPACE |
1 | # This won't work |
这将从历史记录列表中删除命令行 – 仅当该行的第一个字符是空格时。
您可能不希望在命令历史记录中记录常用命令如ll ls la cd man scp vim nvim less ping open file which whois drill uname md5sum traceroute
。
添加以下内容到zshrc
以防止命令历史记录中的命令。
1 | zshaddhistory() { |
创建别名
您可以将自己的别名添加到文件.zshrc
中。
1 | brew update && brew outdated && brew upgrade |
有用的命令
1 | # Repeat the last command |
文件回收站–rmtrash
我建议使用rmtrash
.它会将文件移动到系统的“废纸篓”(回收站),而不是使用rm
永久删除。
官方文档:PhrozenByte/rmtrash: Put files (and directories) in trash
如果你使用mac os,安装很简单,您可以使用以下命令进行安装:
1 | brew install rmtrash #os x |
如果你使用Ubuntu等发行版,首先安装依赖,然后手动安装rmtrash
安装依赖
1 | sudo apt install trash-cli |
手动安装rmtrash
,访问Release rmtrash 1.14 · PhrozenByte/rmtrash (github.com)
创建一个下载文件夹
1 | mkdir ~/src |
复制Release rmtrash 1.14 · PhrozenByte/rmtrash (github.com)页面的源文件链接,下载源文件
1 | wget https://github.com/PhrozenByte/rmtrash/archive/refs/tags/v1.14.tar.gz |
解压(我使用extract
解压,可以用tar
)
1 | x v1.14.tar.gz |
移动到/opt/
1 | sudo mv rmtrash-1.14 /opt/rmtrash-1.14 |
添加可执行权限
1 | sudo chmod +x /opt/rmtrash-1.14/rm* |
创建符号链接到/usr/local/bin
1 | sudo ln -s /opt/rmtrash-1.14/rmtrash /usr/local/bin/rmtrash |
在~/.zshrc
文件中创建别名:
1 | alias rm='rmtrash' |
现在安装完成。尝试删除下载目录中的文件:
1 | cd ~/downloads |
系统的回收站位置~/.local/share/Trash/
1 | cd ~/.local/share/Trash/s |
查看回收站内容
1 | ll ~/.local/share/Trash/* |
清空回收站
1 | trash-empty |
其他回收站命令
1 | trash-put 把文件或目录移动到回收站 |
详情见:andreafrancia/trash-cli: Command line interface to the freedesktop.org trashcan. (github.com)
常用快捷键
-
命令历史记录
- 一旦在 shell 敲入正确命令并能执行后,shell 就会存储你所敲入命令的历史记录(存放在
~/.zsh_history
文件中),方便再次运行之前的命令。可以按方向键↑
和↓
来查看之前执行过的命令 - 可以用
r
来执行上一条命令 - 使用
ctrl-r
来搜索命令历史记录
- 一旦在 shell 敲入正确命令并能执行后,shell 就会存储你所敲入命令的历史记录(存放在
-
命令别名
alias
- 可以简化命令输入,在
.zshrc
中添加alias shortcut='this is the origin command'
一行就相当于添加了别名 - 在命令行中输入
alias
可以查看所有的命令别名
- 可以简化命令输入,在
使用技巧
- 连按两次Tab会列出所有的补全列表并直接开始选择,补全项可以使用 ctrl+n/p/f/b上下左右切换
- 智能跳转,安装了
autojump
之后,zsh 会自动记录你访问过的目录,通过 j 目录名 可以直接进行目录跳转,而且目录名支持模糊匹配和自动补全,例如你访问过 hadoop-1.0.0 目录,输入j hado 即可正确跳转。j --stat 可以看你的历史路径库。 - 命令选项补全。在zsh中只需要键入
tar -<tab>
就会列出所有的选项和帮助说明 - 在当前目录下输入 … 或 … ,或直接输入当前目录名都可以跳转,你甚至不再需要输入
cd
命令了。在你知道路径的情况下,比如/usr/local/bin
你可以输入cd /u/l/b
然后按进行补全快速输入 - 目录浏览和跳转:输入 d,即可列出你在这个会话里访问的目录列表,输入列表前的序号,即可直接跳转。
- 命令参数补全。键入
kill <tab>
就会列出所有的进程名和对应的进程号 - 更智能的历史命令。在用或者方向上键查找历史命令时,zsh支持限制查找。比如,输入ls,然后再按方向上键,则只会查找用过的ls命令。而此时使用则会仍然按之前的方式查找,忽略 ls
- 多个终端会话共享历史记录
- 通配符搜索:
ls -l **/*.sh
,可以递归显示当前目录下的 shell 文件,文件少时可以代替find
。使用**/
来递归搜索 - 扩展环境变量,输入环境变量然后按 就可以转换成表达的值
- 在 .zshrc 中添加
setopt HIST_IGNORE_DUPS
可以消除重复记录,也可以利用sort -t ";" -k 2 -u ~/.zsh_history | sort -o ~/.zsh_history
手动清除
/etc/profile与/etc/zsh/zprofile
当默认shell从bash更换为zsh后,原本bash读取/etc/profile
,
与之对应,现在zsh读取/etc/zsh/zprofile
,之前bash读取的那些文件都不再读取。
详见:zsh的环境变量的加载-zprofile-zlogin-zshrc-zshenv
一篇很好的整合文章
一篇很好的整合文章:
The Ultimate Guide to Your Terminal Makeover | by Shinichi Okada | Towards Data Science
参考、引用、致谢
在 Windows 10 中使用 zsh 作为默认终端 - 七海の参考書 (shiraha.cn)
- WSL + oh my zsh 更好看的 shell - 知乎
- zsh+on-my-zsh配置教程指南(程序员必备)【已备份】 - SegmentFault 思否
- wting/autojump–官方文档
- powerline/fonts
- 终极 Shell macshuo.com!
- Setting up Windows Subsystem for Linux with zsh + oh-my-zsh + ConEmu blog.joaograssi.com!
- Oh-my-zsh’s icons don’t show correctly · Issue #1517 · microsoft/WSL github.com!
- chinanf-boy/bat-zh: 🇨🇳翻译
- 终极 Shell
- Ubuntu 16.04下安装zsh和oh-my-zsh
- Ubuntu 下安装oh-my-zsh
- 掘金-Shell 中的极品-- Zsh
- CentOS 7下autojump无法使用的可能原因
- oh-my-zsh配置你的zsh提高shell逼格终极选择
- zsh oh-my-zsh 插件推荐
- zsh 全程指南-推荐
- iterm主题下载
- 程序员内功系列–iTerm与Zsh篇
- Mac 下配置终端环境 iTerm2 + Zsh + Oh My Zsh + tmux
The Ultimate Guide to Your Terminal Makeover | by Shinichi Okada | Towards Data Science