五款让您在命令行上更高效的工具
最后更新于 作者: Paul Redmond
我整理了一些我认为会让您在命令行上成为更优秀、更高效的开发人员的 CLI 工具列表。这不是一个完整的列表,但我选择了五个我认为是我在命令行上处理文件和代码时最喜欢的效率提升工具之一的 CLI 工具。
让我们从我最喜欢的命令行工具之一开始:Fast Node Manager.
Fast Node Manager
您可能会问:“但是这篇文章不是关于如何更好地使用命令行吗?”虽然 Node.js 版本管理不一定能帮助您提高命令行技能,但它允许您有效地从一个项目切换到另一个项目,而无需考虑项目使用的 Node 版本以及您默认使用的 Node.js 版本。您也可以在几秒钟内快速安装新的 Node.js 版本,而无需离开命令行。
您可以选择 nvm、fnm 或其他各种工具,但我喜欢 FNM,因为它在创建新的 shell 会话时启动速度更快。诚然,我已经有一段时间没有使用 NVM 了,因此 shell 启动时的性能可能已经有所提高。重点是这两个工具都支持 .nvmrc
,因此您可以选择安装哪个工具。
引导到您的 Shell
我将假设您已经安装了您选择的工具。我假设 NVM 和其他工具具有类似的功能,但我会在示例中使用 FNM 来介绍设置的概念。
我首先要说明的是如何在 ~/.zshrc
文件中初始化 FNM
# ~/.zshrc file # fnmexport PATH="/Users/predmond/Library/Application Support/fnm:$PATH"eval "$(fnm env --use-on-cd)"
--use-on-cd
标志在 FNM README 的设置部分有说明,它的作用是在目录包含 .nvmrc
或 .node-version
文件时自动运行 fnm use
。这样,您就不必在项目之间导航时忘记运行 fnm use
。我不确定其他工具(如 NVM)是否具有此功能,但 FNM 自动为您处理切换真的很棒。
设置
我喜欢做的第一件事是选择一个默认的 Node 版本。当您打开一个新的 shell 并且当前目录没有 .nvmrc
文件时,FMN 将默认使用此版本的 node。我维护一个点文件仓库,该仓库的一部分会在我的主文件夹中安装 ~/.nvmrc
文件,因此如果我导航到 ~/
,FNM 将运行 fnm use
并设置该版本。
您仍然可以使用 fnm default
命令设置系统默认值,如下所示
fnm default v21 # The above is a shortcut forfnm alias default v21
运行完上述命令后,您可以查看已安装的版本、当前选定的版本以及默认版本
$ fnm list* v14.21.3 lts-fermium* v16.20.2 lts-gallium* v18.19.0* v20.10.0* v21.5.0 default, v21* system
注意 system
选项,它会绕过 FNM 并使用已安装的系统版本的 node。这很好,因为您可以退出 FNM,甚至可以将系统安装的 Node 设置为默认值。
FNM 使安装新版本变得方便,您可以使用 install
命令进行操作
fnm install v12
如果您不记得哪个版本或想查看所有可以安装的版本的列表,请使用 list-remote
命令
$ fnm list-remote # or aliases$ fnm ls # alias for list$ fnm ls-remote # alias for list-remote
虽然这似乎是一个要求,但我仍然认为像 FNM 这样的工具可以轻松地消除您在开发多个项目时需要安装各种 node 版本的担忧。即使您想查看升级,您也可以轻松地调整项目中的 .nvmrc
文件来升级您的应用程序。
自动建议
我第一次了解 ZSH 的命令行自动建议时,我听到它们被称为“类似于 Fish 的 ZSH 自动建议”。
这些自动建议对于快速重复您在键入时提示的命令非常有用,我将向您展示如何在不离开键盘主行的情况下完成它们!在查看之前,让我们看看我的设置方式。
设置
如今大多数 shell 都具有此功能,我选择的 shell 是 Z shell。我使用的软件包是 zsh-autosuggestions,您可以通过多种方式安装它。
我使用 Oh My Zsh,设置非常简单,只需将仓库克隆到您的插件文件夹并启用插件即可
$ git clone https://github.com/zsh-users/zsh-autosuggestions \ ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
然后我在 ~/.zshrc
文件中的 plugins()
中启用它
plugins=( # other plugins... zsh-autosuggestions)
运行 omz reload
或打开一个新的终端会话后,我得到了一些闪亮的自动建议
使用自动建议
命令行自动建议很简单,它们会根据您键入的内容建议最相关的内容。如果我键入 php
,它将建议剩余部分(如果它是我之前运行过的命令)。此时,我可以使用箭头键在所有以 php
开头的命令中导航。
对我来说,使用自动建议时最重要的快捷键是完成命令。您可以通过将手移到右箭头键来实现,或者您可以点击 ctrl + f
来完成建议
您还可以使用 forward-word
跳到建议中的下一个单词,对我来说,在 iTerm 2 中是 ctrl + ] f
。请查看 zsh-autosuggestions 仓库以获取其他自定义选项和技巧。
Zoxide:更智能的 CD 命令
我喜欢使用 ZSH 的 cdpath()
来配置我经常导航的公共目录。例如,我可能在 cdpath()
中有一个路径,用于我所有个人 GitHub 仓库,如下所示
cdpath=(~/code/github/paulredmond)
这使我能够使用 tab 补全快速导航到该路径中的项目
# from anywhere$ cd my-secret-project # ~/code/github/paulredmond/my-secret-project
我在命令行上使用另一个我喜欢使用的工具是 zoxide。它会记住您经常使用的目录,因此您可以用几个按键跳转到它们。它在自述文件中被称为“更智能的 cd 命令”,我认为您会喜欢它
设置
zoxide 的好消息是它有多种方法可以为每个操作系统安装软件包。我在 macOS 上,并使用 Rust,因此我使用 cargo 来安装。它有 Homebrew 和 MacPorts(我想这仍然是存在的)选项,以及其他各种选项。
由于我在 macOS 上,因此我只是将以下内容添加到我的 ~/.zshrc
文件中以初始化 zoxide(它也会为 z
设置别名)
# zoxideeval "$(zoxide init zsh)"
刷新终端会话后,zoxide 就准备好开始学习我们的导航习惯了。
训练 Zoxide
我们可以通过几种方式帮助 zoxide 学习。我个人一开始不想给 cd
设置别名,所以我使用了 zoxide 为其设置的别名 z
命令。在这个阶段,你可以教 zoxide 了解你最常访问的目录。
z ~/code/github/paulredmond/secret-projectz ~/code/work/z ~/.ssh/# ...
现在我只需要输入几个字符,zoxide 就能模糊地找到我的秘密项目。
$ z sec
真正方便的是(在我们设置好 fzf 后),你可以快速找到文件夹组,例如 laravel-
包。
z laravel
最后一点:如果你有多个路径具有相同名称,你可以将多个参数传递给 zoxide。
z se logs# which might navigate to secret-project/storage/logs
Zoxide 本身就是一个很棒的软件包,但它与 fzf
结合使用时更加出色。
fzf:一个命令行模糊查找器
The fzf 包是一个通用命令行模糊查找器,它可以过滤来自其他工具(如 zoxide
或 vim
)的结果。你可以用多种方式使用 fzf;但是,我建议你熟悉基本设置以及我推荐的一些 zsh 插件。
设置
按照项目自述文件中的 安装部分,你可以在 macOS 上通过 Homebrew、各种 Linux 包安装 fzf
,也可以使用为 Windows 预编译的二进制文件。
安装 fzf
后,我建议运行 install
脚本。根据你的操作系统,路径会有所不同。我使用 Homebrew 安装了 fzf
,所以对我来说,这个安装添加了我想要的所有东西。
$(brew --prefix)/opt/fzf/install # Or just say yes to everythingyes | $(brew --prefix)/opt/fzf/install
完成安装后,你需要重新加载 shell 以获取添加到 shell 配置文件中的文件。你可以使用 which fzf
来验证 fzf
是否可用,以及你
fzf 基础
你可以尝试的第一件事是运行 ctrl + r
来模糊地查找历史记录(如果你选择 y
来安装按键绑定)。当你学习了 搜索语法 后,模糊查找的功能会变得非常强大,但即使没有任何知识,它也比在文件夹之间切换标签好得多。
我发现的一个很酷的功能是使用 **
来在命令中间按下 Tab 键,而不是在你不确定确切名称的情况下取消命令。
subl app/**
当我输入上面的命令时,我可以按下 Tab 键,这将打开模糊查找器,允许我完成命令,而无需退出并执行类似 ls
的操作来找到文件路径。
假设你在服务器或本地机器上,需要查找并终止进程——使用 fzf
可以轻松完成。无需先使用 pgrep
,然后使用 kill -9
,你只需运行 kill -9 **
,然后模糊地找到要终止的进程。
使用 fzf
的应用似乎是无穷无尽的,所以我鼓励你看看这个插件可以帮助你做什么。我们没有介绍 fzf vim,但如果你是一个 vim 用户,你可能已经知道它了 😆。
fzf-tab
The fzf-tab 插件将 zsh 的默认完成选择菜单替换为 fzf。你可以通过多种方式安装它;我特别将 fzf-tab 作为 Oh My ZSH 的一个插件安装,但使用 fzf-tab 的唯一要求是你使用 z Shell。
我一开始使用 fzf-tab 感觉很不适应,因为它会劫持你在 shell 中使用 Tab 键完成的任何地方,并将其替换为 fzf。但是,它在导航文件系统或从 CLI 中使用 git
查看分支时非常有用。
正如我所说,当我第一次开始使用 fzf-tab
时,感觉很不适应,所以如果你想尝试一下,你可以在终端会话的中间使用禁用命令来停止使用 fzf-tab。
# Disable fzf-tab$ fzf-tab-disable # Reenable fzf-tab$ fzf-tab-enable # Or just remember one command for both$ toggle-fzf-tab
zsh-artisan 和 fzf-tab
我想要展示的关于 fzf-tab
的最后一件事是,将它与 zsh-artisan 插件结合使用,这样你就可以模糊地找到 Artisan 命令,而无需在忘记确切命令名称的情况下扫描可用列表。
RipGrep 用于快速的文件搜索
我有一篇专门的文章介绍了 程序员的命令行搜索工具,但 RipGrep 在这里提到了,因为根据我的经验,它是绝对最快的,也是我在命令行上最主要的搜索工具。
RipGrep 会自动尊重 .gitignore 规则,默认情况下会跳过二进制文件和隐藏目录。RipGrep 具有许多功能,所以熟悉它的最佳方法是阅读 man rg
页面。
以下是如何使用它在 PHP 文件中搜索特定字符串的简要示例。
$ rg --type=php Controllerapp/Http/Controllers/Controller.php 3:namespace App\Http\Controllers; 5:abstract class Controller
了解更多
我希望你已经找到了可以添加到你的工具库中的有用 CLI 工具。我试图分享一些你可以协同使用的互补工具,但请慢慢来,这样你不会一次学习太多新东西!在你的最喜欢的社交媒体工具上告诉我们你最喜欢的 CLI 工具是什么吧!