为开发服务器配置 zsh

之前自己的服务器一直在使用 bash,虽然说没有什么短板,但是也没有什么亮点,中规中矩。后来偶然接触到了 Oh My ZSH 这个项目,发现了好多实用的功能,比如 extract/x 辅助解压命令、Git 工作区信息提示、z 跳转、zsh suggestions 智能补全等等,瞬间就想放弃 bash 了😂(喜新厌旧实锤)。

今天就整理记录一下自己在给开发服务器(Debian 10.10)折腾时遇到的一些坑。

一键运行脚本见文章末尾。

1 安装 zsh 及相关依赖包

首先需要通过 apt 安装 zsh 终端及一些与 Oh My Zsh 有关的依赖包,比如 curl、wget等:

apt install -y zsh git tar zip unzip p7zip-full curl wget build-essential

然后将默认终端切换至 zsh

chsh -s $(which zsh)

2 安装 Oh My Zsh

下载安装脚本并通过 unattended 标记来实现非交互式安装:

# 下载安装脚本
wget https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh
# 非交互式安装
sh install.sh --unattended

3 覆盖 zsh 配置

我们需要开启一些 zsh 常用的插件,比如 extract/x 自动解压插件、git 工作区提示等。不需要手动修改配置,我们使用 cat 命令来一键写入配置:

cat > $HOME/.zshrc <<'EOF'
export ZSH="/root/.oh-my-zsh"
ZSH_THEME="fino"
HIST_STAMPS="yyyy-mm-dd"
DISABLE_MAGIC_FUNCTIONS=true
plugins=(
    command-not-found
    cp
    extract
    git
    sudo
    zsh-syntax-highlighting
    zsh-autosuggestions
    z
)
source $ZSH/oh-my-zsh.sh

# Change to UTF-8
export LC_ALL=en_US.UTF-8  
export LANG=en_US.UTF-8

EOF

简单解释下 cat 命令的语法:

cat > $HOME/.zshrc <<'EOF'
something here
EOF

首先,cat 先通过输出符号 > 将输出文件声明为 $HOME/.zshrc,这里的 > 表示覆盖,即不论输出文件内是否有内容,下面的文字将会覆盖文件内的内容;

随后,通过输入符号 << 标记结束符号 EOF,这个标记可以自定义,只需要与最后的结束符合匹配即可;

我们需要保持原样的输入到配置文件,但是系统会将我们命令行中输入的变量进行替换,所以我们要给结束符合加上引号以表示“保持原样”,也就是 cat > file <<'EOF'

运行上面的命令,我们将会完成 zsh 的配置文件更改。

4 从 GitHub 导入外部插件

由于 zsh-syntax-highlightingzsh-autosuggestions 这两个插件并不是 Oh My Zsh 的内建插件,所以我们需要将其下载至本地:

git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
git clone https://github.com/zsh-users/zsh-autosuggestions.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions

5 修改系统监听文件限制

在开发的过程中我们经常需要启动 dev server 来监听文件修改并进行热加载,这时经常会触发文件系统监听数量限制。

解决这个问题只需要下面两行:

echo fs.inotify.max_user_watches=524288 | tee -a /etc/sysctl.conf
sysctl -p

至此,Oh My Zsh 的配置工作已经完成了,你可以通过退出终端并重新登录的方式来尝试使用 zsh 了。

Oh My Zsh 终端预览

下一篇文章我们将会配置一些常用的软件包来提高我们的开发效率。


附录:一键运行脚本

可以通过该 GitHub Gist 获取该脚本并执行:

wget -O - https://775.ink/2hx2zj0w4av4 | bash
从 GitHub Gist 获取并运行脚本
IInfinity

IInfinity

大道虽简,知易行难。
CN