使用 Zsh + AutoComplete + 大修您的终端
本指南将介绍通过扩展终端功能来提高工作效率的各种方法,包括: zsh:一个强大的 shell,扩展了 bash 的功能集。 zsh 插件:自动建议、完成、语法高亮等。 提示 + 主题:使用 Powerlevel10k 或 Posh 自定义显示上下文信息的干净提示。 我们将从这里开始: [](https://res.cloudinary.com/practicaldev/image/fetch/s-
本指南将介绍通过扩展终端功能来提高工作效率的各种方法,包括:
-
zsh:一个强大的 shell,扩展了 bash 的功能集。
-
zsh 插件:自动建议、完成、语法高亮等。
-
提示 + 主题:使用 Powerlevel10k 或 Posh 自定义显示上下文信息的干净提示。
我们将从这里开始:
[](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)
对此:
[](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)
入门
- 为任何基于 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
:根据历史记录和完成建议您键入的命令,然后可以使用 → 选择。 -
自动建议可以使用您的
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-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
:
[](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 主题。它包括一些不错的功能,例如加载插件时的即时提示,以及一个让您入门的配置向导。
这是我的提示的样子:
[](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:哦,我的豪华
哦,我的豪华:
[](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-detailed
、blueish
或nu4a
。 -
将所选主题的路径添加到
.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 实用程序,以进一步提高您的工作效率。
更多推荐
所有评论(0)