学习Linux从zsh的安装与配置开始

1.安装zsh

1
sudo apt install zsh  # 以ubuntu为例

或者通过源码安装

如果没有root权限,通过源码安装,下载解压之后:

  • 首先配置zsh,自定义安装路径

./configure --prefix=$HOME/.local

  • 然后编译

make -j4

  • 检查编译是否成功

make check

  • 如果没有编译错误,则安装zsh

make install -j4

2.将zsh设置为默认shell

如果使用root权限安装的zsh,直接终端运行chsh -s $(which zsh)即可。

如果没有root权限,通过源码安装zsh的话,则解决方法是在每次打开终端时执行exec <zsh-path>来替代当前的shell。在文件.bash_profile中加入:

[ -f $HOME/.local/bin/zsh ] && exec $HOME/.local/bin/zsh -l

如果上述两种方法都不能修改默认shell,安装 oh-my-zsh,安装时会自动切换shell成zsh。

3.安装oh-my-zsh

ArchLinux用户直接yay -S oh-my-zsh-git,然后cp /usr/share/oh-my-zsh/zshrc ~/.zshrc就完了。

sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

sh -c "$(wget -O- https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

如果上述方法出现问题,可以按照下面的方法进行:

1
2
3
4
cd ~ && \
git clone https://github.com/ohmyzsh/ohmyzsh.git && \
mv ohmyzsh .oh-my-zsh && \
cp .oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc
1
2
3
4
cd ~ && \
git clone https://gitee.com/lu_x/ohmyzsh.git && \
mv ohmyzsh .oh-my-zsh && \
cp .oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc

4.配置oh-my-zsh

vim .zshrc,切换ZSH_THEME,可以在这里预览。

想要隐藏用户名,export DEFAULT_USER="<user-name>"

5.插件配置

在.zshrc中找到plugins=(git),其中加入以下插件:

1
2
3
4
5
6
7
8
9
10
11
12
13
plugins=(
git
extract # 一个命令 `x` 解压全部压缩文件
z # cd的加强版,到达任意到过的位置,模糊匹配
rand-quote # 随机名言,命令quote
gitignore # 提供一条 gi 命令,用来查询 gitignore 模板 gi python > .gitignore
cp # 提供一个 cpv 命令,这个命令使用 rsync 实现带进度条的复制功能
vi-mode # vim输入模式
safe-paste # 往 zsh 粘贴脚本时,它不会被立刻运行
colored-man-pages # 给你带颜色的 man 命令
zsh-syntax-highlighting # 指令高亮
zsh-autosuggestions # 命令自动提示,方向键补全
)

其中插件zsh-syntax-highlighting和zsh-autosuggestions需要单独下载,方法如下:

1
2
3
4
# 下载zsh-syntax-highlighting
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
# 下载zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-autosuggestions.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
1
2
3
4
# 下载zsh-syntax-highlighting
git clone https://gitee.com/gulei666/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
# 下载zsh-autosuggestions
git clone https://gitee.com/githubClone/zsh-autosuggestions.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions

6.主题配置

修改后的主题文件已经保存在github仓库,可直接下载使用:

下载mytheme.zsh-theme.txt,重命名mytheme.zsh-theme~/.oh-my-zsh/themes,在~/.zshrc中声明ZSH_THEME="mytheme",然后source ~/.zshrc

1
2
3
4
git clone https://github.com/liqiming-whu/memorandum && \
cp memorandum/mytheme.zsh-theme.txt ~/.oh-my-zsh/themes/mytheme.zsh-theme && \
vim ~/.zshrc && \
source ~/.zshrc
1
2
3
4
git clone https://gitee.com/liqiming_whu/memorandum && \
cp memorandum/mytheme.zsh-theme.txt ~/.oh-my-zsh/themes/mytheme.zsh-theme && \
vim ~/.zshrc && \
source ~/.zshrc

当然你也可以自行配置主题,以下是我自己的配置过程:

7.自定义主题

默认的主题robbyrussel不显示用户名,自定义主题可以修改使其显示用户名

终端输入:

1
2
cd ~/.oh-my-zsh/themes
vim robbyrussell.zsh-theme

可以看到:

1
2
3
4
5
6
7
local ret_status="%(?:%{$fg_bold[green]%}➜ :%{$fg_bold[red]%}➜ )"
PROMPT='${ret_status} %{$fg[cyan]%}%c%{$reset_color%} $(git_prompt_info)'

ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg_bold[blue]%}git:(%{$fg[red]%}"
ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%} "
ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[blue]%}) %{$fg[yellow]%}✗"
ZSH_THEME_GIT_PROMPT_CLEAN="%{$fg[blue]%})"

PROMPT就是设置显示的用户名
​由于oh_my_zsh时常会有版本更新,为了避免我们修改的跟更新的版本有冲突,建议不要修改robbyrussell.zsh-theme,而是将其拷贝出来,命名为自己的主题文件,比如叫做mytheme.zsh-theme,然后只对mytheme-theme进行修改。

1
cp robbyrussell.zsh-theme mytheme.zsh-theme

修改后将 ~/.zshrc 中的ZSH_THEME="robbyrussell"改为ZSH_THEME="mytheme"

参考设置

1
PROMPT='%{$fg[green]%}%m@%{$fg[magenta]%}%(?..%?%1v)%n:%{$reset_color%}%{$fg[cyan]%}%~#'
1
PROMPT='%{$fg_bold[red]%}-> %{$fg_bold[green]%}%p%{$fg[cyan]%}%d %{$fg_bold[blue]%}$(git_prompt_info)%{$fg_bold[blue]%}% %{$reset_color%}~#:'
1
PROMPT='%{$fg_bold[red]%}-> %{$fg_bold[green]%}%p%{$fg[cyan]%}%d %{$fg_bold[blue]%}$(git_prompt_info)%{$fg_bold[blue]%}% %{$fg[magenta]%}%(?..%?%1v)%{$reset_color%}~#: '
1
PROMPT='%{$fg_bold[red]%}-> %{$fg_bold[magenta]%}%n%{$fg_bold[cyan]%}@%{$fg[green]%}%m %{$fg_bold[green]%}%p%{$fg[cyan]%}%~ %{$fg_bold[blue]%}$(git_prompt_info)%{$fg_bold[blue]%}% %{$fg[magenta]%}%(?..%?%1v)%{$fg_bold[blue]%}? %{$fg[yellow]%}# '
1
2
3
4
5
6
7
8
9
10
11
12
%T 系统时间(时:分)
%* 系统时间(时:分:秒)
%D 系统日期(年-月-日)
%n 你的用户名
%B - %b 开始到结束使用粗体打印
%U - %u 开始到结束使用下划线打印
%d 你目前的工作目录
%~ 你目前的工作目录相对于~的相对路径
%M 计算机的主机名
%m 计算机的主机名(在第一个句号之前截断)
%l 你当前的tty
%n 登录名

修改mytheme.zsh-theme文件

修改这一行:

PROMPT='${ret_status}%{$fg[magenta]%}%n@%{$fg[green]%}%m %{$fg[cyan]%}%c%{$reset_color%} $(git_prompt_info)'

文件全部内容:

1
2
3
4
5
6
local ret_status="%(?:%{$fg_bold[green]%}➜ :%{$fg_bold[red]%}➜ )"
PROMPT='${ret_status}%{$fg[magenta]%}%n@%{$fg[green]%}%m %{$fg[cyan]%}%c%{$reset_color%} $(git_prompt_info)'
ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg_bold[blue]%}git:(%{$fg[red]%}"
ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%} "
ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[blue]%}) %{$fg[yellow]%}✗"
ZSH_THEME_GIT_PROMPT_CLEAN="%{$fg[blue]%})"

8.随机主题

~/.zshrc 文件中设置主题为 random 即可开启随机主题,每次打开新的终端的时候,zsh 都会随机使用一个主题。

ZSH_THEME="random"