配置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
2
sudo apt install vim #debain 默认命令 vi 并没有安装 vim
vi ~/.zshrc

修改

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

git-安装-配置

zsh扩展

~/.zshrc中找到plugins关键字,就可以自定义启用的插件了,系统默认加载git插件。

编辑 plugins=(git zsh-autosuggestions) 在括号中增加内容来启用插件;

git插件

~/.zshrc 中配置

1
plugins=(其他的插件 git)

命令内容可以参考cat ~/.oh-my-zsh/plugins/git/git.plugin.zsh

常用的:

1
2
3
4
5
6
7
8
9
10
11
12
13
gapa    git add --patch
gc! git commit -v --amend
gcl git clone --recursive
gclean git reset --hard && git clean -dfx
gcm git checkout master
gcmsg git commit -m
gco git checkout
gd git diff
gdca git diff --cached
gp git push
grbc git rebase --continue
gst git status
gup git pull --rebase

完整列表:https://github.com/robbyrussell/oh-my-zsh/wiki/Plugin:git

查看插件列表

我们可以先查看oh-my-zsh都自带了什么插件

1
ll ~/.oh-my-zsh/plugins/

Pasted image 20220608215802

extract

oh-my-zsh自带的插件

解压文件用的,所有的压缩文件,都可以直接x filename,不用记忆参数

查看其可用的参数

1
x

~/.zshrc 中配置

1
plugins=(其他的插件 extract)

配置好后,记得source ~/.zshrc,下同

当然,如果你想要用tar命令,可以使用tar -tab键,zsh会列出参数的含义。

autojump

先配置好git的ssh key,见git-安装-配置

官方文档介绍,

安装命令见wting/autojump: A cd command that learns - easily navigate directories from the command line (github.com)

官方的readme中有一处错误,修正为

1
git clone git@github.com:wting/autojump.git

设置python3

linux-安装python3并设置为默认python

在安装时,给与提醒

1
./install.py

Pasted%20image%2020221104085048.png

需要在~/.zshrc中配置一下,除了在plugins中增加autojump之外,还需要添加以下内容:

1
2
3
4
5
6
7
8

# Please manually add the following line(s) to ~/.zshrc:

[-s /home/boxlike/.autojump/etc/profile.d/autojump.sh](/%E9%85%8D%E7%BD%AEoh-my-zsh/../-s%20/home/boxlike/.autojump/etc/profile.d/autojump.sh%20) && source /home/boxlike/.autojump/etc/profile.d/autojump.sh

autoload -U compinit && compinit -u

# Please restart terminal(s) before running autojump.

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

官方安装文档: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
2
- # DISABLE_AUTO_UPDATE="true"  
+ DISABLE_AUTO_UPDATE="true"

这样就关闭了 oh-my-zsh 定期的自动更新;如果需要手动更新,可以运行 upgrade_oh_my_zsh

解决 oh-my-zsh git 进入目录卡顿问题

调整终端命令历史记录

历史记录存储在 ~/.zsh_history~/.bash_history~/.history 中,具体取决于您的 shell。历史记录存储 1000 或 2000 行,具体取决于您的系统。您可以找到历史记录的数量:

1
2
3
4
5
6
$ echo $HISTSIZE   
50000
$ echo $HISTFILE
/Users/shinokada/.zsh_history
$ echo $SAVEHIST
10000

HISTSIZE是会话中保留的最大行数,

SAVEHIST并且是历史记录文件中保留的最大行数。

HISTFILE是系统保存历史记录的文件名。

您可以通过将以下内容添加到 .zshrc 来更改这些数字。

1
2
HISTSIZE=5000  
SAVEHIST=5000

反向 i 搜索

反向 i 搜索允许您从历史记录文件中搜索命令。

按下CTRL+r以启动它,然后键入您记得要搜索的任何内容。

如果继续按CTRL+r ,终端将搜索历史记录文件中的下一个命令。

i search

查看所有命令历史记录

您可以使用 bash 命令history 查看所有命令历史记录。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# shows all command history
$ history

# shows first 10 commands
$ history | head

# shows last 10 commands
$ hisotry | tail

# shows less history
$ history | less

# Use grep to search your command history
$ history | grep Search-word

# Use grep to do a case-insensitive search of your command history
$ hisotry | grep -i search-word

要从历史记录列表中删除命令(仅当该行的第一个字符是空格时),请将以下内容添加到您的:.zshrc

1
setopt HIST_IGNORE_SPACE
1
2
3
4
# This won't work  
$ cd ~
# This will work because there is a space before the command
$ cd ~

这将从历史记录列表中删除命令行 – 仅当该行的第一个字符是空格时。

您可能不希望在命令历史记录中记录常用命令如ll ls la cd man scp vim nvim less ping open file which whois drill uname md5sum traceroute

添加以下内容到zshrc以防止命令历史记录中的命令。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
zshaddhistory() {
local line=${1%%$'\n'}
local cmd=${line%% *}
# Only those that satisfy all of the following conditions are added to the history
[[ ${#line} -ge 5
&& ${cmd} != ll
&& ${cmd} != ls
&& ${cmd} != la
&& ${cmd} != cd
&& ${cmd} != man
&& ${cmd} != scp
&& ${cmd} != vim
&& ${cmd} != nvim
&& ${cmd} != less
&& ${cmd} != ping
&& ${cmd} != open
&& ${cmd} != file
&& ${cmd} != which
&& ${cmd} != whois
&& ${cmd} != drill
&& ${cmd} != uname
&& ${cmd} != md5sum
&& ${cmd} != pacman
&& ${cmd} != xdg-open
&& ${cmd} != traceroute
&& ${cmd} != speedtest-cli
]]
}
# exec it.
zshaddhistory

创建别名

您可以将自己的别名添加到文件.zshrc中。

1
2
3
4
5
# brew update && brew outdated && brew upgrade
alias buou="brew update && brew outdated && brew upgrade && brew cleanup"

# npm outdated -g --depth=0 && npm update -g
alias npmou="npm outdated -g --depth=0 && npm update -g"

有用的命令

1
2
3
4
5
6
7
# Repeat the last command  
$ !!

# Clear the screen
$ clear

# Or you can clear the screen with CTRL+l, as well

文件回收站–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
2
mkdir ~/src
cd ~/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
2
3
sudo ln -s /opt/rmtrash-1.14/rmtrash /usr/local/bin/rmtrash

sudo ln -s /opt/rmtrash-1.14/rmdirtrash /usr/local/bin/rmdirtrash

~/.zshrc文件中创建别名:

1
2
3
4
5
6
alias rm='rmtrash'
alias rmdir='rmdirtrash'

alias del="rmtrash"
alias deldir='rmdirtrash'

现在安装完成。尝试删除下载目录中的文件:

1
2
cd ~/downloads
del ./*.zip

系统的回收站位置~/.local/share/Trash/

1
cd ~/.local/share/Trash/s

查看回收站内容

1
ll ~/.local/share/Trash/*

清空回收站

1
trash-empty

其他回收站命令

1
2
3
4
5
trash-put           把文件或目录移动到回收站
trash-empty 清空回收站
trash-list 列出回收站文件
trash-restore 恢复回收站文件
trash-rm 删除回收站文件

详情见:andreafrancia/trash-cli: Command line interface to the freedesktop.org trashcan. (github.com)

常用快捷键

  • 命令历史记录

    • 一旦在 shell 敲入正确命令并能执行后,shell 就会存储你所敲入命令的历史记录(存放在~/.zsh_history 文件中),方便再次运行之前的命令。可以按方向键来查看之前执行过的命令
    • 可以用 r来执行上一条命令
    • 使用 ctrl-r 来搜索命令历史记录
  • 命令别名 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)

The Ultimate Guide to Your Terminal Makeover | by Shinichi Okada | Towards Data Science