新人的Shell配置指南

本人将为新人介绍常用的 Shell 配置和工具,帮助提升命令行效率。本文将涵盖 ZshOh My ZshZoxideFZFRipgrep 等工具的安装和配置和简单教学。


1 Zsh 安装和配置

你可能已经习惯了 Linux 默认的 Bash Shell,但现在是时候考虑升级到 Zsh 了。Zsh 提供了许多 Bash 不具备的强大功能,例如:

  • 更强大的自动补全Zsh 的自动补全功能非常智能,可以补全命令、文件路径、选项、甚至是 Git 分支等,大大减少你的输入量。
  • 命令历史共享:在多个 Zsh 会话中共享命令历史,方便你随时查找和重复执行之前的命令。
  • 主题和插件支持:通过各种主题美化你的终端界面,并通过插件扩展 Zsh 的功能,使其更加强大。

1.1 如何安装 Zsh

根据你的操作系统,安装 Zsh 的方法略有不同:

  • macOS: Zsh 通常已经预装。你可以通过运行 zsh --version 来检查。如果未安装,可以使用 Homebrew:
    1
    brew install zsh
  • Ubuntu/Debian:
    1
    2
    sudo apt update
    sudo apt install zsh
  • Fedora/RHEL:
    1
    sudo dnf install zsh

1.2 设置 Zsh 为默认 Shell

安装完成后,你需要将 Zsh 设置为你的默认 Shell:

1
chsh -s $(which zsh)

然后,你需要退出当前终端会话并重新登录,或者重新打开终端,Zsh 就会生效。

如果你选择安装后续的Oh My Zsh, 你可以跳过此步骤, 因为Oh My Zsh 会自动将 Zsh 设置为默认 Shell


2 Oh My Zsh:Zsh 配置框架

Oh My Zsh 是一个开源的、社区驱动的 Zsh 配置框架,它使得管理 Zsh 配置变得异常简单。它包含了数百个有用的函数、助手、主题和插件,可以帮助你快速构建一个功能强大的 Shell 环境。

官网: Oh My Zsh

2.1 安装 Oh My Zsh

安装 Oh My Zsh 非常简单,只需执行以下命令:

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

根据脚本的提升选择性按yn进行配置即可, 通常全部默认选y即可

2.2 强大的插件系统

Oh My Zsh 的核心优势之一在于其丰富的插件生态。你可以在 ~/.zshrc 文件中配置要启用的插件。找到 plugins=(git) 这一行,然后添加你需要的插件。

以下是一些常用且推荐的插件:

  • git: 提供了大量的 Git 别名和辅助函数,极大提高了 Git 操作的效率。
  • zsh-autosuggestions: 根据你的历史命令自动建议命令,按右箭头键即可补全。
    • 安装:
      1
      git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
    • 启用: 在 ~/.zshrc 中添加 zsh-autosuggestionsplugins 数组。
  • zsh-syntax-highlighting: 为命令提供语法高亮,让你的命令更易读,并能及时发现输入错误。
    • 安装:
      1
      git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
    • 启用: 在 ~/.zshrc 中添加 zsh-syntax-highlightingplugins 数组。

配置示例:

1
2
3
4
5
6
# ~/.zshrc
plugins=(
git
zsh-autosuggestions
zsh-syntax-highlighting
)

修改 ~/.zshrc 后,记得运行 source ~/.zshrc 来使更改生效。

2.3 Zsh 默认主题概览

zsh

上图显示的是 Zsh 默认主题。可以看到, 其相比较传统的bash提供了更多有用的信息和功能:

  1. 在安装git插件后, 当你处于git仓库目录时, zsh会自动将在prompt中显示当前分支名。
  2. zsh提供丰富的智能不全, 比如安装git插件后, 可以补全git的子命令
  3. 该默认主题箭头的颜色表达了上一个命令的执行状态:
    • 绿色表示上一个命令成功执行
    • 红色表示上一个命令执行失败

更多的插件请参考 Oh My Zsh 插件列表

3 Zoxide:更智能的目录切换

你是否厌倦了在命令行中频繁地 cd 到深层目录?Zoxide 是一个更智能的 cd 命令替代品,它会记住你访问过的目录,并允许你通过模糊匹配快速切换。

3.1 安装 Zoxide

  • macOS (Homebrew):
    1
    brew install zoxide
  • Ubuntu/Debian:
    1
    sudo apt install zoxide
  • 其他方式: 请参考 Zoxide 的 GitHub 仓库获取更详细的安装指南。

3.2 配置 Zoxide

安装完成后,你需要将 Zoxide 的初始化脚本添加到你的 Shell 配置文件中(对于 Zsh 是 ~/.zshrc)。在 ~/.zshrc 文件的末尾添加以下行:

1
2
# ~/.zshrc
eval "$(zoxide init zsh)"

然后运行 source ~/.zshrc

3.3 如何使用 Zoxide

现在,你可以直接输入目录名的部分或模糊匹配来切换目录,例如:

  • z myproj:切换到你最近访问过的名为 myproj 的目录。
  • z code:切换到包含 code 关键字的目录。
  • zi:启动交互式选择界面,通过模糊匹配选择要切换的目录。

4 FZF:命令行模糊查找利器

FZF(Fuzzy Finder)是一个通用的命令行模糊查找器,它可以与各种命令结合使用,实现快速、交互式的列表过滤和选择。无论是文件、历史命令、Git 分支,FZF 都能让你轻松找到所需。

4.1 安装 FZF

  • macOS (Homebrew):
    1
    brew install fzf
  • Linux (推荐 Git 克隆):
    1
    2
    git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
    ~/.fzf/install
    在安装过程中,它会询问你是否将 FZF 的键绑定和自动补全添加到你的 Shell 配置中,请选择 y

4.2 FZF 的常用场景

  • 文件查找:

    1
    vim $(fzf) # 使用 fzf 查找文件并用 vim 打开
  • 历史命令搜索: 按下 Ctrl + R(在 Zsh 中默认已配置),然后输入关键词进行历史命令的模糊搜索。

  • 进程查找:

    1
    ps aux | fzf # 查找并过滤进程
  • 历史命令搜索:
    fzf可以搜索历史命令,只需按下 Ctrl + R(在 Zsh 中默认已配置),然后输入关键词进行历史命令的模糊搜索。例如:

    fzf-ctrl-R


5 Ripgrep:极速文件内容搜索

Ripgrep 是一个极速的行式搜索工具,它递归地在当前目录中搜索正则表达式模式。它比 grep 更快,并且默认会忽略 .gitignore 中的文件,极大提高了搜索效率。

5.1 安装 Ripgrep

  • macOS (Homebrew):
    1
    brew install ripgrep
  • Ubuntu/Debian:
    1
    sudo apt install ripgrep
  • Fedora/RHEL:
    1
    sudo dnf install ripgrep

5.2 如何使用 Ripgrep

Ripgrep 的基本用法与 grep 类似,但速度更快且功能更强大。

  • 搜索文件内容:
    1
    rg "your_pattern" # 在当前目录递归搜索 "your_pattern"
  • 显示行号:
    1
    rg -n "your_pattern"
  • 只搜索特定类型文件:
    1
    rg "your_pattern" -t js # 只搜索 JavaScript 文件
  • 不区分大小写:
    1
    rg -i "your_pattern"

5.3 Ripgrep 与 Grep 的不同之处及默认行为

Ripgrep 在设计上旨在提供比传统 grep 更优越的体验。除了速度上的显著优势外,它还有一些默认行为与 grep 不同,这些差异通常能更好地满足现代开发的需求:

  • 默认忽略 .gitignore 文件: Ripgrep 会自动读取当前目录及其父目录中的 .gitignore 文件,并忽略其中指定的文件和目录。这意味着在搜索代码仓库时,您不必担心搜索到编译生成的文件、依赖包目录(如 node_modules)或其他无关文件,从而使搜索结果更加聚焦和准确。如果您需要搜索被 .gitignore 忽略的文件,可以使用 -u--unrestricted 选项:
    1
    rg -u "your_pattern" # 搜索所有文件,包括被 .gitignore 忽略的
  • 默认忽略隐藏文件和二进制文件: Ripgrep 默认情况下会跳过隐藏文件(以 . 开头的文件和目录)以及被识别为二进制的文件。这可以避免在搜索结果中出现大量无关的二进制数据,并提高搜索效率。
  • 智能识别文件类型: Ripgrep 能够智能地识别多种文件类型(例如 jspymd 等),并支持按文件类型进行过滤搜索,这比 grep 更为方便。