五款让您在命令行上更高效的工具

最后更新于 作者:

Five Tools That Will Make You More Productive on the Command Line image

我整理了一些我认为会让您在命令行上成为更优秀、更高效的开发人员的 CLI 工具列表。这不是一个完整的列表,但我选择了五个我认为是我在命令行上处理文件和代码时最喜欢的效率提升工具之一的 CLI 工具。

让我们从我最喜欢的命令行工具之一开始:Fast Node Manager.

Fast Node Manager

您可能会问:“但是这篇文章不是关于如何更好地使用命令行吗?”虽然 Node.js 版本管理不一定能帮助您提高命令行技能,但它允许您有效地从一个项目切换到另一个项目,而无需考虑项目使用的 Node 版本以及您默认使用的 Node.js 版本。您也可以在几秒钟内快速安装新的 Node.js 版本,而无需离开命令行。

您可以选择 nvmfnm 或其他各种工具,但我喜欢 FNM,因为它在创建新的 shell 会话时启动速度更快。诚然,我已经有一段时间没有使用 NVM 了,因此 shell 启动时的性能可能已经有所提高。重点是这两个工具都支持 .nvmrc,因此您可以选择安装哪个工具。

引导到您的 Shell

我将假设您已经安装了您选择的工具。我假设 NVM 和其他工具具有类似的功能,但我会在示例中使用 FNM 来介绍设置的概念。

我首先要说明的是如何在 ~/.zshrc 文件中初始化 FNM

# ~/.zshrc file
 
# fnm
export 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 自动为您处理切换真的很棒。

Cycle through suggestions
FNM 在项目之间切换版本

设置

我喜欢做的第一件事是选择一个默认的 Node 版本。当您打开一个新的 shell 并且当前目录没有 .nvmrc 文件时,FMN 将默认使用此版本的 node。我维护一个点文件仓库,该仓库的一部分会在我的主文件夹中安装 ~/.nvmrc 文件,因此如果我导航到 ~/,FNM 将运行 fnm use 并设置该版本。

您仍然可以使用 fnm default 命令设置系统默认值,如下所示

fnm default v21
 
# The above is a shortcut for
fnm 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 自动建议”。

Cycle through suggestions
Fish 会建议在 fishshell.com 上找到的命令

这些自动建议对于快速重复您在键入时提示的命令非常有用,我将向您展示如何在不离开键盘主行的情况下完成它们!在查看之前,让我们看看我的设置方式。

设置

如今大多数 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 或打开一个新的终端会话后,我得到了一些闪亮的自动建议

My auto-suggestions using ZSH and Oh-My-ZSH
我使用 ZSH 和 Oh-My-ZSH 的自动建议

使用自动建议

命令行自动建议很简单,它们会根据您键入的内容建议最相关的内容。如果我键入 php,它将建议剩余部分(如果它是我之前运行过的命令)。此时,我可以使用箭头键在所有以 php 开头的命令中导航。

Cycle through suggestions
循环遍历建议

对我来说,使用自动建议时最重要的快捷键是完成命令。您可以通过将手移到右箭头键来实现,或者您可以点击 ctrl + f 来完成建议

Complete the autosuggestion with ctrl + f
点击 `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 设置别名)

# zoxide
eval "$(zoxide init zsh)"

刷新终端会话后,zoxide 就准备好开始学习我们的导航习惯了。

训练 Zoxide

我们可以通过几种方式帮助 zoxide 学习。我个人一开始不想给 cd 设置别名,所以我使用了 zoxide 为其设置的别名 z 命令。在这个阶段,你可以教 zoxide 了解你最常访问的目录。

z ~/code/github/paulredmond/secret-project
z ~/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 包是一个通用命令行模糊查找器,它可以过滤来自其他工具(如 zoxidevim)的结果。你可以用多种方式使用 fzf;但是,我建议你熟悉基本设置以及我推荐的一些 zsh 插件。

设置

按照项目自述文件中的 安装部分,你可以在 macOS 上通过 Homebrew、各种 Linux 包安装 fzf,也可以使用为 Windows 预编译的二进制文件。

安装 fzf 后,我建议运行 install 脚本。根据你的操作系统,路径会有所不同。我使用 Homebrew 安装了 fzf,所以对我来说,这个安装添加了我想要的所有东西。

$(brew --prefix)/opt/fzf/install
 
# Or just say yes to everything
yes | $(brew --prefix)/opt/fzf/install

完成安装后,你需要重新加载 shell 以获取添加到 shell 配置文件中的文件。你可以使用 which fzf 来验证 fzf 是否可用,以及你

fzf 基础

你可以尝试的第一件事是运行 ctrl + r 来模糊地查找历史记录(如果你选择 y 来安装按键绑定)。当你学习了 搜索语法 后,模糊查找的功能会变得非常强大,但即使没有任何知识,它也比在文件夹之间切换标签好得多。

Fuzzy find
通过 ctrl + r 使用 fzf 进行模糊查找。

我发现的一个很酷的功能是使用 ** 来在命令中间按下 Tab 键,而不是在你不确定确切名称的情况下取消命令。

subl app/**

当我输入上面的命令时,我可以按下 Tab 键,这将打开模糊查找器,允许我完成命令,而无需退出并执行类似 ls 的操作来找到文件路径。

Using ** to tab through files with fzf
使用 ** 通过 fzf 查找文件。

假设你在服务器或本地机器上,需要查找并终止进程——使用 fzf 可以轻松完成。无需先使用 pgrep,然后使用 kill -9,你只需运行 kill -9 **,然后模糊地找到要终止的进程。

Using kill -9 ** with fzf
使用 kill -9 ** 通过 fzf 查找并终止进程。

使用 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 查看分支时非常有用。

Using fzf-tab to checkout a branch from the command line
使用 fzf-tab 从命令行中检出分支。

正如我所说,当我第一次开始使用 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 命令,而无需在忘记确切命令名称的情况下扫描可用列表。

Using `fzf-tab` with the `zsh-artisan` plugin
fzf-tabzsh-artisan 插件结合使用。

RipGrep 用于快速的文件搜索

我有一篇专门的文章介绍了 程序员的命令行搜索工具,但 RipGrep 在这里提到了,因为根据我的经验,它是绝对最快的,也是我在命令行上最主要的搜索工具。

RipGrep 会自动尊重 .gitignore 规则,默认情况下会跳过二进制文件和隐藏目录。RipGrep 具有许多功能,所以熟悉它的最佳方法是阅读 man rg 页面。

以下是如何使用它在 PHP 文件中搜索特定字符串的简要示例。

$ rg --type=php Controller
app/Http/Controllers/Controller.php
3:namespace App\Http\Controllers;
5:abstract class Controller

了解更多

我希望你已经找到了可以添加到你的工具库中的有用 CLI 工具。我试图分享一些你可以协同使用的互补工具,但请慢慢来,这样你不会一次学习太多新东西!在你的最喜欢的社交媒体工具上告诉我们你最喜欢的 CLI 工具是什么吧!

Paul Redmond photo

Laravel News 的特约撰稿人。全栈 Web 开发人员和作家。

归档于
Cube

Laravel 新闻稿

加入 40,000 多名其他开发人员,永远不会错过新的提示、教程等。

Laravel Forge logo

Laravel Forge

轻松创建和管理服务器,并在几秒钟内部署 Laravel 应用程序。

Laravel Forge
Tinkerwell logo

Tinkerwell

Laravel 开发人员必备的代码运行器。使用 AI、自动完成和对本地和生产环境的即时反馈进行微调。

Tinkerwell
No Compromises logo

不妥协

Joel 和 Aaron,来自 No Compromises 播客的两名经验丰富的开发人员,现在可以为您的 Laravel 项目聘用。 ⬧ 固定价格 7500 美元/月。 ⬧ 没有冗长的销售流程。 ⬧ 没有合同。 ⬧ 100%退款保证。

不妥协
Kirschbaum logo

Kirschbaum

提供创新和稳定性,确保您的 Web 应用程序取得成功。

Kirschbaum
Shift logo

Shift

正在运行旧版本的 Laravel?即时、自动化的 Laravel 升级和代码现代化,让您的应用程序保持新鲜感。

Shift
Bacancy logo

Bacancy

每月只需 2500 美元,即可为您的项目配备经验丰富的 Laravel 开发人员,拥有 4-6 年的经验。获得 160 小时的专业知识和 15 天的免费试用。立即安排通话!

Bacancy
Lucky Media logo

Lucky Media

立即获得幸运 - Laravel 开发的理想选择,拥有十多年的经验!

Lucky Media
Lunar: Laravel E-Commerce logo

Lunar:Laravel 电子商务

Laravel 的电子商务。一个开源软件包,将现代无头电子商务功能的力量带到 Laravel。

Lunar:Laravel 电子商务
LaraJobs logo

LaraJobs

官方 Laravel 招聘网站

LaraJobs
SaaSykit: Laravel SaaS Starter Kit logo

SaaSykit:Laravel SaaS 启动工具包

SaaSykit 是一个 Laravel SaaS 启动工具包,它包含运行现代 SaaS 所需的所有功能。支付、美观的结账、管理面板、用户仪表板、身份验证、现成的组件、统计信息、博客、文档等等。

SaaSykit:Laravel SaaS 启动工具包
Rector logo

Rector

您无缝升级 Laravel、降低成本并加速创新的合作伙伴,为成功的企业提供助力。

Rector
MongoDB logo

MongoDB

通过强大的 MongoDB 和 Laravel 集成增强您的 PHP 应用程序,使开发人员能够轻松高效地构建应用程序。支持事务、搜索、分析和移动用例,同时使用熟悉的 Eloquent API。探索灵活的现代数据库 MongoDB 如何改变您的 Laravel 应用程序。

MongoDB
Maska is a Simple Zero-dependency Input Mask Library image

Maska 是一个简单的无依赖输入掩码库。

阅读文章
Add Swagger UI to Your Laravel Application image

将 Swagger UI 添加到您的 Laravel 应用程序中

阅读文章
Assert the Exact JSON Structure of a Response in Laravel 11.19 image

在 Laravel 11.19 中断言响应的精确 JSON 结构

阅读文章
Build SSH Apps with PHP and Laravel Prompts image

使用 PHP 和 Laravel 提示构建 SSH 应用程序

阅读文章
Building fast, fuzzy site search with Laravel and Typesense image

使用 Laravel 和 Typesense 构建快速、模糊的网站搜索

阅读文章
Add Comments to your Laravel Application with the Commenter Package image

使用 Commenter 包将评论添加到您的 Laravel 应用程序中

阅读文章