Debian/Ubuntu 服务器终端环境配置:Zsh、Starship 与命令行增强

使用 Zsh、Starship、自动建议、语法高亮和 fzf,为 Debian、Ubuntu 服务器配置一套兼顾 Bash 使用习惯与交互体验的终端环境

发布于
作者是 GEMILUXVII · 收录在 纸上谈兵 · 标签 techlinuxzshstarshipserver · 约 4 分钟阅读 · 这里是

最近给几台服务器统一配置了一下终端环境,目标很简单:保留 Bash 的使用习惯,同时获得更舒服的提示符、历史命令建议和语法高亮。

服务器终端不需要配置得特别花哨,毕竟大部分时间还是在敲命令。只要提示符清楚一点、输过的命令能快速找回来、打错命令时能提前看出来,日常使用就会舒服很多。

最终方案是:

  • Zsh:作为默认 Shell
  • Starship:跨平台提示符
  • zsh-autosuggestions:输入时提示历史命令
  • zsh-syntax-highlighting:命令语法高亮
  • fzf:增强历史搜索体验

这套方案没有使用 Oh My Zsh,也不需要额外的插件管理器。配置不长,换服务器时复制起来也比较方便。

为什么不用 Fish#

Fish 的交互体验很好,默认就有自动建议和补全,但它和 Bash 的语法兼容性一般。服务器上经常会执行各种 Bash 脚本,所以我更倾向于使用 Zsh。

Zsh 能保留大部分 Bash 使用习惯,再通过插件实现接近 Fish 的体验。

当然,把 Zsh 设为默认 Shell 并不会影响带有正确 Shebang 的 Bash 脚本。这里主要考虑的还是交互环境:临时复制一段命令、改几个变量或者写一个简单循环时,不用在两套语法之间切换思路。

一键安装#

Debian / Ubuntu 可以直接执行下面的命令。它会安装需要的软件、生成 Starship 配置,并写入一份新的 ~/.zshrc

命令会覆盖当前用户已有的 ~/.zshrc,如有旧配置请先备份。非 root 用户需要给 apt 命令加上 sudo

apt update && apt install -y zsh zsh-autosuggestions zsh-syntax-highlighting fzf curl

mkdir -p ~/.config

command -v starship >/dev/null 2>&1 || curl -sS https://starship.rs/install.sh | sh -s -- -y

starship preset plain-text-symbols -o ~/.config/starship.toml

cat > ~/.zshrc <<'EOF'
# History
HISTSIZE=10000
SAVEHIST=10000
HISTFILE=~/.zsh_history
setopt HIST_IGNORE_DUPS
setopt INC_APPEND_HISTORY

# Completion
autoload -Uz compinit
compinit

# Keybindings
bindkey -e

# Starship prompt
eval "$(starship init zsh)"

# Autosuggestions
[ -f /usr/share/zsh-autosuggestions/zsh-autosuggestions.zsh ] && source /usr/share/zsh-autosuggestions/zsh-autosuggestions.zsh

# fzf: Ctrl+R history search and other keybindings
[ -f /usr/share/doc/fzf/examples/key-bindings.zsh ] && source /usr/share/doc/fzf/examples/key-bindings.zsh

# Syntax highlighting, keep near the end
[ -f /usr/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh ] && source /usr/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
EOF

exec zsh -l

配置中的几个细节#

历史记录保留了 10000 条,并在每次执行命令后及时写入 ~/.zsh_history,避免终端意外断开时丢失本次会话的记录。

zsh-autosuggestions 会在输入时显示灰色的历史命令建议,按方向键右键即可接受。fzf 的按键绑定则接管了 Ctrl+R,查找很久以前执行过的命令会方便不少。

Starship 使用的是 plain-text-symbols 预设。服务器通常会从不同设备登录,这个预设不依赖 Nerd Font,能减少图标显示成方框或乱码的情况。

zsh-syntax-highlighting 放在配置文件末尾是有意为之。它需要在其他组件之后加载,以后继续修改 .zshrc 时,尽量也让它保持在靠后的位置。

设为默认 Shell#

exec zsh -l 只会切换当前终端。确认配置正常后,可以将 Zsh 设为默认 Shell:

chsh -s "$(command -v zsh)"

退出并重新登录 SSH 后生效,可以执行 echo $SHELL 检查当前默认 Shell。

评论