本指南将介绍通过扩展终端功能来提高工作效率的各种方法,包括:

  • zsh:一个强大的 shell,扩展了 bash 的功能集。

  • zsh 插件:自动建议、完成、语法高亮等。

  • 提示 + 主题:使用 Powerlevel10k 或 Posh 自定义显示上下文信息的干净提示。

我们将从这里开始:

[bash](https://res.cloudinary.com/practicaldev/image/fetch/s--kTez0CHg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads .s3.amazonaws.com/uploads/articles/15hhws1lffppj64y7wao.png)

对此:

[zsh](https://res.cloudinary.com/practicaldev/image/fetch/s--7TCzD5Vg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads .s3.amazonaws.com/uploads/articles/b4pd70jflqn9tnuo73t0.png)

入门

  1. 为任何基于 Unix 的 shell 或 WSL2 安装oh-my-zsh,它将zsh与一组插件和主题捆绑在一起。

2.下载一个Nerd Font并设置您喜欢的终端使用它。我最喜欢Cascaydia Cove Nerd Font

Zsh 插件

要启用插件在$HOME目录中找到您的.zshrc,然后添加到插件列表中:

plugins=(
  git
  ...
)

进入全屏模式 退出全屏模式

包含在 oh-my-zsh 中的插件

  • sudo:通过按两次 esc 轻松为当前或以前的命令添加sudo前缀。

  • dotenv:当您 cd 进入项目根目录时,自动从.env文件加载您的项目ENV变量。默认情况下,它会在加载前提示,但您可以通过将以下内容添加到您的.zshrc来关闭此功能(但请注意此操作的安全隐患):

export ZSH_DOTENV_PROMPT=false

进入全屏模式 退出全屏模式

  • copypath:将给定目录或文件的路径复制到系统剪贴板。

  • copyfile:将文件的内容放在系统剪贴板中,以便您可以将其粘贴到任何地方。

  • copybuffer:此插件将 ctrl-o 键盘快捷键绑定到将当前在命令行 ($BUFFER) 中键入的文本复制到系统剪贴板的命令。

  • command-not-found:如果找不到命令,请提供要安装的建议包。

  • web-search:此插件添加别名,用于使用 Google、Wiki、Bing、YouTube 和其他流行服务进行搜索。

  • history:为使用 history 命令检查命令行历史提供了几个方便的别名。

  • dirhistory:添加用于导航目录历史和层次结构的键盘快捷键。默认情况下使用 alt 箭头键,因此请确保它们不会与其他快捷键冲突。

  • colorize:语法高亮显示超过 300 种支持的语言和其他文本格式的文件内容。

  • colored-man-pages:为手册页添加颜色。

  • magic-enter:这个插件通过绑定常用命令,让你的回车键变得神奇。您可以自定义它使用的命令,并在 Git 存储库中运行特定命令:

MAGIC_ENTER_GIT_COMMAND='git status -sb .'
MAGIC_ENTER_OTHER_COMMAND='ls -la .'

进入全屏模式 退出全屏模式

  • jsontools:用于处理 json 数据的便捷命令行工具。

根据您使用的其他软件,有许多轻量级插件可以改善自动完成并提供别名等。我用:

  • git:Git 的别名

  • gh:GitHub cli 的完成

  • git-auto-fetch:定期运行git fetch

  • nvm:nvm 的完成

  • npm:npm 的完成 + 别名

  • aws:aws 的完成

  • docker:码头工人的完成

  • docker-compose:完成 + docker compose 的别名

  • kubectl" 完成 + kubectl 的别名

  • vscode:VS Code 或 VSCodium 编辑器的别名

  • python:python 的别名

  • pip:点子的自动完成

  • tmux:tmux 的别名

强大的插件

这些插件不附带oh-my-zsh,因此您必须先克隆 repos 并将它们放在~/ohmyzsh/custom/plugins/中,然后再将它们添加到.zshrc中的plugins列表中。

  • zsh-autosuggestions:根据历史记录和完成建议您键入的命令,然后可以使用 → 选择。 zsh-autosuggestions

  • 自动建议可以使用您的history或选项卡completion。使用ZSH_AUTOSUGGEST_STRATEGY变量进行设置。

  • 存在一些兼容性问题,在某些操作后建议未清除。要解决此问题,请将以下内容添加到您的.zshrc:

ZSH_AUTOSUGGEST_CLEAR_WIDGETS+=(bracketed-paste up-line-or-search down-line-or-search expand-or-complete accept-line push-line-or-edit)

进入全屏模式 退出全屏模式

  • zsh-syntax-highlighting:shell zsh 的语法高亮显示。 zsh-syntax-highlighting

  • zsh-autocomplete:除了历史菜单外,还在提示下方提供完成建议。这个很强大,但可能需要一些时间来适应。与自动建议一样,您可以选择是否要使用正常完成(目录、人等)或历史搜索。我喜欢自动完成正常完成和历史自动建议。 zsh-autocomplete 如果您像我一样不喜欢历史菜单,但想要所有其他功能,您可以更改键绑定以在您的.zshrc中使用简单的历史搜索(确保这是 after 插件已加载):

bindkey '\e[A' history-beginning-search-backward
bindkey '\eOA' history-beginning-search-backward
bindkey '\e[B' history-beginning-search-forward
bindkey '\eOB' history-beginning-search-forward
zle -A {.,}history-incremental-search-forward
zle -A {.,}history-incremental-search-backward

进入全屏模式 退出全屏模式

同样,要使用默认的制表符完成,请设置以下选项:

zstyle ':autocomplete:*' widget-style menu-select
bindkey -M menuselect '\r' accept-line

进入全屏模式 退出全屏模式

我也不喜欢过度移动提示的补全,尤其是对于多行提示。我们可以通过以下方式更改:

zstyle ':autocomplete:*' list-lines 7

进入全屏模式 退出全屏模式

该插件还存在一些问题,提示“”显示在某些完成和进食输入上。将此添加到您的.zshrc作为解决方法(但是这有时会完全放弃完成,但我仍然更喜欢这个而不是丢失输入):

zstyle ':completion:*' menu select=long

进入全屏模式 退出全屏模式

有关配置选项的完整列表,请转到此处。

  • zsh-z:快速跳转到您经常访问的目录的工具。

  • zsh-direnv:dotenv的替代品,它还提供了具有实用功能的.envrc的使用。

更进一步,我建议查看这个精选的插件列表。

主题 + 自定义提示

我们可以改进提示以包含其他信息,例如执行时间、性能指标,甚至是您当前的 Git 分支等信息。通过将以下内容添加到您的.zshrc来设置您的主题(设置为random,直到找到您喜欢的内容):

ZSH_THEME="mytheme"

进入全屏模式 退出全屏模式

我最喜欢agnoster:

[agnoster](https://res.cloudinary.com/practicaldev/image/fetch/s--ydj7Ucdm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads .s3.amazonaws.com/uploads/articles/ind73zeythcovna9u54a.png)

尽管我们的提示看起来不错,但我们可以更进一步。

我们有两个选择:

选项 A:Powerlevel10k

Powerlevel10k是一个高度可定制的 zsh 主题。它包括一些不错的功能,例如加载插件时的即时提示,以及一个让您入门的配置向导。

这是我的提示的样子:

[powerlevel10k](https://res.cloudinary.com/practicaldev/image/fetch/s--RSh0Jqw6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads .s3.amazonaws.com/uploads/articles/sjd33y95r6wcv3it5g8x.png)

我稍微修改了配置以使用特定目录的自定义图标并稍微清理了 git 状态。看我的.p10k.zsh

选项 B:哦,我的豪华

哦,我的豪华:

[clean-detailed](https://res.cloudinary.com/practicaldev/image/fetch/s--S5n5-Q2s--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev -to-uploads.s3.amazonaws.com/uploads/articles/576uc6ny0fjdzi0bo4x4.png)提供了广泛的主题可供选择,但缺少 Powerlevel10k 的一些功能,例如即时提示。

  • 按照安装说明,找到你喜欢的主题。我最喜欢的一些是clean-detailedblueishnu4a

  • 将所选主题的路径添加到.zshrc:

eval "$(oh-my-posh --init --shell zsh --config ~/.mytheme.omp.json)"

进入全屏模式 退出全屏模式

.zshrc 的其他自定义

供参考,见我完整的.zshrc

  • 禁用自动 zsh 更新:zstyle ':omz:update' mode disabled

  • 在等待完成加载时打印...(不适用于 zsh-autocomplete):COMPLETION_WAITING_DOTS="true"

  • 自定义别名。对于 oh-my-zsh,建议将别名放在不同的文件中:~/.oh-my-zsh/custom/aliases.zsh。一些我喜欢用于网络的东西:

alias get-ports="netstat -tulnp | grep LISTEN"
alias get-router="ip route | grep default"
alias get-ip="hostname -I"

进入全屏模式 退出全屏模式

您还可以使用参数](https://www.thorsten-hans.com/5-types-of-zsh-aliases)创建一个[别名函数。例如,要备份文件:

bak() {
  cp $1{,.bak}
}

进入全屏模式 退出全屏模式

我们可以在设置别名之前检查命令是否存在。例如,我们可以检查 docker 是否安装:

if [ -x "$(command -v docker)" ]; then
    alias dw="watch \"docker ps --format \\\"table {{.Names}}\t{{.Status}}\\\" -a\""
fi

进入全屏模式 退出全屏模式

在我的aliases.zsh中查看我的所有别名。请注意,对于 git 别名,最好在.gitconfig中定义它们。

  • 自定义键绑定。例如:bindkey '^H' backward-kill-word绑定 ctrl-bksp 按字删除。在此处找到键码。熟悉vim快捷键的朋友可以在自己的.zshrc后面加上bindkey -v。小心与其他keybinds/plugins冲突!

  • 通过将以下内容添加到我的.zshrc更改某些目录的默认颜色(在此处转到获取颜色代码):

zstyle ':completion:*:default' list-colors \
  "ow=30;43"

进入全屏模式 退出全屏模式

或者,您可以从文件中导出完整的配色方案:

eval "$(dircolors ~/.dircolors)";

进入全屏模式 退出全屏模式

  • 为特定文件设置首选编辑器:
alias -s {cs,ts,html,json,xml,md}=code

进入全屏模式 退出全屏模式

  • ssh设置首选编辑器,例如:
if [[ -n $SSH_CONNECTION ]]; then
  export EDITOR='vim'
else
  export EDITOR='code'
fi

进入全屏模式 退出全屏模式

  • 在另一个文件中组织所有环境变量:export $(cat ~/.my_env)

  • 可以自动安装包,例如可以安装nvm:

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

进入全屏模式 退出全屏模式

后续步骤

  • 在 shell 中安装tmux用于选项卡、窗格等。请参阅oh-my-tmux和我的tmux.conf.local

  • 安装更好的终端。我的建议:

  • 免费:瓜客

  • Windows:Windows 终端

  • MacOS:iTerm2

  • 阅读这个博客了解一些通用 CLI 实用程序,以进一步提高您的工作效率。

Logo

更多推荐