Zsh 安装与配置


共计 3684 个字符,预计需要花费 10 分钟才能阅读完成。

一、简介

zsh是一种Unix shell,类似于bash、sh、csh等命令行解释器。它是一种交互式的shell,可以让用户在终端中输入命令并与操作系统进行交互。zsh最初是为了扩展bash的功能而创建的,但现在已经成为了一种很受欢迎的 shell。

与 bash 相比,zsh 有许多优点,其中包括:

  1. 自动补全:zsh 的自动补全功能比 bash 更强大。它可以根据当前光标位置和历史记录,自动推测出用户想输入的命令或参数,极大地提高了操作效率。
  2. 主题和插件:zsh 具有丰富的主题和插件库,用户可以通过这些扩展来改善其外观和功能。
  3. 强大的别名:zsh 支持复杂的别名,这些别名可以包含参数、条件和内嵌命令。
  4. 可定制性:zsh 允许用户自定义其外观、行为和键绑定,以满足个人偏好和需求。
  5. 强大的历史命令:zsh 的历史命令比 bash 更强大,可以实现更高级的搜索和过滤功能。

二、安装

运行如下命令即可安装。

apt install git zsh -y

刚安装的 zsh 是极其朴素的,并且功能也比较弱。所以需要安装 oh-my-zsh,它提供了一套预配置的 Zsh 配置文件、主题和插件,这样可以轻松地定制和管理 zsh。

# curl 安装
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
# wget 安装
sh -c "$(wget -O- https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
# fetch 安装
sh -c "$(fetch -o - https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
# 卸载
# uninstall_oh_my_zsh 

以上命令选择一条运行进行安装 zsh,如果网络不好可能无法下载,毕竟是 github,这个时候找一台可以访问脚本的机器把内容复制到新建的脚本,再进行安装也是可以的。

三、配置

所有的配置修改后都需要执行:

source ~/.zshrc

1. 其他配置

为了更好的使用 zsh 的功能,准备将历史记录的条数增大一点,编辑 ~/.zshrc 文件,添加如下内容。

# 修改zcompdump生成的文件目录
source /etc/profile
export ZSH_COMPDUMP=$ZSH/cache/.zcompdump-$HOST

# 记录历史命令的文件
HISTFILE=~/.history
# 内存中记录历史命令条数
HISTSIZE=10000
# 历史文件中保存的历史命令数
SAVEHIST=10000
# 不同的终端会话历史命令合并到同一历史文件
setopt appendhistory

# 在source $ZSH/oh-my-zsh.sh之前配置升级相关内容
# 始终回复否从不升级,可以通过 omz update 进行更新
DISABLE_AUTO_UPDATE=true
# 始终回复是并自动升级
#DISABLE_UPDATE_PROMPT=true

使用 history -f 可以查看命令运行的时间。

2. 修改主题

zsh 有很多主题可选择,主题链接:https://github.com/ohmyzsh/ohmyzsh/wiki/Themes

选择 ~/.zshrc 文件,修改主题名称即可。

#ZSH_THEME="robbyrussell"
ZSH_THEME="agnoster"

这里可能报错:

(anon):12: character not in range

~/.zshrc 文件添加如下内容即可:

export LC_ALL=C.UTF-8
export LANGUAGE=C.UTF-8
export LANG=C.UTF-8

此外,可能还需要修改命令行的用户名或主机名。

全部隐藏

prompt_context(){}

只隐藏主机

prompt_context() {
  if [[ "$USER" != "$DEFAULT_USER" || -n "$SSH_CLIENT" ]]; then
    prompt_segment black default "%(!.%{%F{yellow}%}.)$USER"
  fi
}

只隐藏用户名

prompt_context() {
  if [[ "$USER" != "$DEFAULT_USER" || -n "$SSH_CLIENT" ]]; then
    prompt_segment black default "%(!.%{%F{yellow}%}.)$HOST"
  fi
}

还可以限制显示的目录数,比如最大只显示三个:

prompt_dir() {
   prompt_segment blue $CURRENT_FG '%3~'
}

3. 添加插件

插件列表:https://github.com/ohmyzsh/ohmyzsh/wiki/Plugins-Overview

这里只安装比较重要的两个插件:

  • zsh-autosuggestions插件:根据已经输入的命令,自动显示可能的补全建议
  • zsh-syntax-highlighting插件:高亮显示命令行语句
# 安装 zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
# 安装 zsh-syntax-highlighting
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting 

然后编辑 ~/.zshrc 文件,找到 plugins 选项:

plugins=(
        zsh-syntax-highlighting
        docker
        z
        colored-man-pages
)

4. 命令别名

以下是我的重命名,请根据自己需要进行设置。

# systemctl
alias syse='sudo systemctl enable --now'
alias sysd='sudo systemctl disable --now'
alias sysr='sudo systemctl restart'
alias syss='sudo systemctl status'

# tmux
alias tl='tmux ls'
alias tlw='tmux list-windows'
alias tlp='tmux list-panes'
alias tka='tmux kill-server'
alias tks='tmux kill-session'
alias ta='tmux a -t dev || tmux new -t dev'

# docker
alias dp='docker ps'
alias dr='docker restart'
alias dl='docker logs'  
alias dlf='docker logs -f'
alias dei='docker exec -it'
alias din='docker inspect -f "{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}"'
alias runlike='docker run --rm -v /var/run/docker.sock:/var/run/docker.sock assaflavie/runlike -p'
# 清理相关
alias dsd='docker system df'
alias dcp='docker container prune'
alias dvp='docker volume prune'
alias dip='docker image prune'
alias dsp='docker system prune'
alias dspa='docker system prune -a'

# other
alias dh='du -h ./ -d 1' # 查看当前目录占用
alias psg='ps aux | grep' 
alias ng='netstat -autnp | grep'
alias wget='wget -c' # 支持断点续传
alias now='date "+%Y-%m-%d %H:%M:%S"' # 查看并格式化当前时间
alias size='f(){ du -sh $1* | sort -hr; }; f' # 查看文件/目录大小 - size /
alias sek='f(){ find / -name $1; }; f' # 在根目录查找文件 - sek test
alias sekc='f(){ find ./ -name $1; }; f' # 在当前目录查找文件 - sekc test
alias ipe='curl ipinfo.io/ip' #  查看当前公网ip

5. 清理无关文件

# 删除历史记录文件
rm -f .zsh_history
# 删除zcompdump文件
rm -f .zcompdump*

提醒:本文发布于369天前,文中所关联的信息可能已发生改变,请知悉!

Tips:清朝云网络工作室

阅读剩余
THE END