📜  哦,我的 zsh 自动完成 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:23:01.098000             🧑  作者: Mango

哦,我的 ZSH 自动完成

在 Shell 编程中,自动完成是一个非常重要的功能。特别是在像 ZSH 这样的高级 Shell 中,它的自动完成功能非常强大。在这篇文章中,我们将介绍如何在 ZSH 中使用自动完成来提高工作效率。

安装和配置 ZSH

首先,我们需要安装和配置 ZSH。如果你已经安装了 ZSH,请跳过这一步。

安装 ZSH

在 Ubuntu 上,你可以通过以下命令来安装 ZSH:

sudo apt-get install zsh

在 CentOS 上,你可以通过以下命令来安装 ZSH:

sudo yum install zsh

如果你使用 macOS,你可以使用 Homebrew 来安装 ZSH:

brew install zsh
配置 ZSH

安装完成后,我们需要配置 ZSH 并设置它为默认的 Shell。我们可以通过以下命令将 ZSH 设置为默认的 Shell:

chsh -s /bin/zsh

然后我们需要重新启动终端命令行才能使更改生效。

配置自动完成

在 ZSH 中启用自动完成非常简单,只需执行以下命令:

autoload -Uz compinit && compinit

这将加载 ZSH 的自动完成模块并初始化自动完成。

一旦启用了自动完成,ZSH 就可以自动完成 Shell 命令、文件名和路径等内容。

自定义自动完成

ZSH 的自动完成接口非常灵活,你可以通过编写 Shell 脚本来自定义自动完成。

例如,如果你希望在输入 ssh 命令时,ZSH 可以自动完成主机名,并且可以自动加载已知主机列表,你可以编写以下 Shell 脚本:

# Define known_hosts array
known_hosts=(${(f)"$(cat ${HOME}/.ssh/known_hosts{,2}|cut -f 1 -d ' '|sed -e s/,.*//g"|sort -u)"})

# Define ssh completion function
_ssh_complete() {
  hosts=( ${=${${(f)~~"$(cat ~/.ssh/known_hosts{,2} | cut -f 1 -d ' ' | sed -e s/,.*//g )"}:^$(echo "%$1")}} )
  reply=( ${hosts} )
}

# Set ssh completion function
compdef _ssh_complete ssh

这将定义一个 _ssh_complete 函数,在输入 ssh 命令时会自动加载主机列表,并在输入主机名时自动完成。

要了解更多关于 ZSH 自动完成的信息,可以查看 ZSH 的文档。