6 个提高程序员效率的命令行工具
最近,我在命令行上做了很多事情。我并不是一个终端的铁杆粉丝——我使用 VSCode 的次数比 Vim 多——但我总是惊讶于仅仅使用 POSIX 标准命令行工具(例如grep
、cat
和)就能完成如此多的复杂任务sort
。
工具的力量是无穷的。好的工具能让工作更轻松、更快捷,而优秀的工具则能释放新的潜能:以前不可能的事情现在变得可能,有时甚至变得轻而易举。
随着我学到的知识越来越多,我一直在向我的命令行工具箱中添加一些新工具,在本文中我想分享一些我发现有价值的工具。
broot
我不知道是怎么找到的broot
,但它确实很方便。如果你在一个小型目录中,想了解一下目录的大致情况,tree
它就很棒。
✗ tree
.
├── dartboard.png
├── header.jpg
├── opensign.png
├── quote1.png
└── trophy.png
0 directories, 5 files
但是,如果目录中有许多文件或子目录,tree
则帮助就小得多:当文件滚动经过您时,您只会看到最后一个充满信息的屏幕。
$ tree
< scrolling text for a long time >
├── banner.js
└── index.html
328 directories, 2028 files
broot
通过了解终端窗口的大小并调整其大小来解决这个问题。
您可以使用箭头键进行导航,并且通过传递标志( )broot
也有助于追踪磁盘空间使用情况:-w
broot -w
它可以做很多其他的事情,所以看看GitHub 指南,但对我来说它只是一个更好的tree
。
ℹ️ 安装 BRoot
使用 MacOS 安装brew
或按照其他环境的安装说明进行安装。
brew install broot
时髦
如果您经常使用终端,并且想将终端用作 IDE,那么让终端根据当前目录进行更改会很有帮助。有很多方法可以做到这一点。例如,当您进入目录时DirEnv
加载和卸载文件。与之类似。它允许您在切换到特定路径时运行 Shell 脚本——您可以启动和停止服务、更改提示符或执行任何其他您想要的操作。.env
smartcd
然而,在这个类型中我最喜欢的是名字奇怪的funky
,它“通过使 shell 函数更易于定义、更灵活、更具交互性,将 shell 函数提升到一个新的水平”。
它的工作原理funky
很简单:当你进入一个目录时,funky
它会查找一个.funky
包含 bash 函数列表的文件。它会加载这些函数,当你离开时,它会卸载它们。
这意味着当我进入这个 Jekyll 博客的目录时,我会加载一些别名,用于创建新帖子、检查 Markdown 文件、导入图片等等。我可以通过输入以下命令列出这些别名:funky
$ funky
lint() { markdownlint --fix "./_posts/*.md"; }
set-header() { cp "$(latest-image)" "$(image-folder)/header.jpg"; }
set-image() { cp "$(latest-image)" "$(image-folder)/$(date +%s).png"; }
funky
不过,它的功能远不止这些。它还支持交互式添加和编辑函数,以及注册全局函数和别名。不过,我喜欢的是能够在特定上下文中快速为命令添加一个简短的别名。
ℹ️ 安装 Funky
使用 pip 安装 Funky
pip3 install pyfunky
然后将钩子添加到您的.zshrc
或bashrc
等效项中:
## find where funky.sh was installed by pip and source it
source /usr/local/lib/python3.9/site-packages/scripts/shell/funky.sh
模糊查找器(FZF)
如果funky
提高broot
了我的工作效率,那么更多的工具只会让它更高效,对吧?所以我去了Lobste.rs,问大家还在用什么其他工具。FZF
结果发现有很多人用这个工具,现在我自己也开始用了。
FZF是一个命令行模糊查找器。它速度很快,并且能够以交互方式让你根据模糊关键字匹配来筛选选项,这在很多需要在命令行中输入值的地方都能实现。
如果您安装了附带的快捷方式(/usr/local/opt/fzf/install
),您可以**
在任何地方使用并获得交互式模糊查找器来缩小到所需的路径。FZF
还可以使您的搜索history
速度更快。
它是一个 unix 过滤器,它读取输入,向您显示一个您过滤的交互式列表,然后将选定的项目发送到另一端,但以这种方式描述低估了它的实用性。
我建议观看这个视频FZF
,其中 Alexey Samoshkin在舒缓的钢琴背景音乐下介绍了许多可能的用途。
ℹ️ 安装 FZF
使用您选择的包管理器安装 Funky :
brew install fzf
然后将钩子添加到您的.zshrc
或bashrc
等效项中:
#ZSH
source ~/.fzf.zsh
#BASH
source ~/.fzf.bash
麦克弗莱
FZF
当您想要打开文件时,非常适合在命令行中过滤文件路径(vim **
),但对于命令行完成,可用的信息比原始历史文件更多。McFly
尝试使用这些额外信息来提供更相关的结果。
还有什么额外的信息?首先,McFly 在其排序启发式算法中考虑了以下选项:
- 在该命令之前输入的命令。
- 您运行该命令的频率。
- 您最近运行该命令的时间是什么时候。
它在 SQLite 数据库中跟踪所有这些信息,同时还通过以下方式跟踪和权衡建议:
- 命令退出状态。
- 运行命令的目录。
- 如果您之前已经在 McFly 中选择过它。
被建议失败的命令是我最讨厌的事情,但我从未考虑过根据当前目录缩小选择范围或降低从未选择的项目的排名。
McFly
使用神经网络进行排名,一个可能的缺点是,如果 SQLite 数据库过大,建议的生成可能会出现延迟。不过,MCFLY_HISTORY_LIMIT
可以使用某种方法来限制这种增长。
我只使用了几天,所以我无法对它做出公正的评价,但这个概念让我非常有希望:使用额外的信息来定制工具以满足实际使用需求。
ℹ️ 安装 McFly
您可以通过多种方式安装 McFly 。以下是 brew::
brew tap cantino/mcfly
brew install mcfly
然后将钩子添加到您的.zshrc
或bashrc
等效项中:
eval "$(mcfly init zsh)"
事实上,二进制文件发出初始化脚本而不是将初始化脚本转储到我的主目录中,这是一个很好的设计。zoxide
- 以下工具 - 也可以做到这一点。
我发现这FZF
会干扰McFly,因此必须在初始化脚本中CTRL-R
注释掉此行FZF
才能使 McFly 正常工作。
更好的 CD
FZF
对于某些路径补全来说,它效果很好,但在使用 切换目录时,我发现它没什么用cd
:从我的主目录输入后cd **TAB
, 需要一段时间才能建立完整的列表选项。使用我现有的 ZSH 补全功能来导航到文件夹FZF
要快得多。cd TAB <choose a dir> TAB <choose a dir>
然而,有许多工具试图改进cd
。autojump
、z
和所有跟踪目录使用情况的工具,并为您提供一个用于更改为常用目录的Fasd
单键快捷方式。r/commandline
对这些各种替代品进行了详细的讨论cd
,但最有发展势头的是zoxide
。zoxide是用 Rust 重写的 z,并承诺提高速度。
安装后,您可以像cd
( z ~/path/foo/bar
) 一样使用它,但您还可以根据路径的排序文本匹配来更改目录 ( z bar
~= cd ~/path/foo/bar
)。无需提供完整路径即可更改位置,只需提供路径的唯一子字符串,系统zoxide
就会使用其使用历史记录将您带到所需位置。
为了便于采用,我选择使用zoxide
replace ,这就像在添加初始化 shell 代码时cd
使用标志一样简单( )。--cmd
eval "$(zoxide init zsh --cmd cd)"
ℹ️ 安装 zoxide
zoxide
有几种安装方法。以下是 brew:
brew install zoxide
然后将钩子添加到您的.zshrc
或bashrc
等效项中:
eval "$(zoxide init zsh --cmd cd)"
Git更新
这个工具是我在Lobste.rs帖子里发现的另一个工具。在处理 Git 分支时,我喜欢频繁提交工作。例如,在尝试删除博客文章中的大段文字之前,或者在尝试重构某段代码之前,我都会提交工作。当然,我稍后会压缩(或重构)这些提交,但为了方便起见,我使用了一个名为wip
('work in progress') 的 Git 别名,这样我就可以更轻松地提交。
git wip = !git add --all; git ci -m WIP
gitupdate
是此想法的简单改进。gitupdate .
提交文件时,会使用更改文件的文件名(而非扩展名)来创建更有意义的提交消息。当提交消息不重要时,这种方法非常有用。
ℹ️ 安装 GitUpdate
bash
git clone https://github.com/nikitavoloboev/gitupdate
go build
sudo cp gitupdate /usr/local/bin
其他工具
还有许多其他实用的命令行工具,一篇文章根本无法涵盖所有。JQ、mitmproxy
Pandoc和PSTree是我经常使用的工具。此外,还有一大批 Rust 重写了常用 POSIX 工具的工具,值得专门写一篇文章来介绍。
当然,Earthly本身是一个命令行工具,我经常用它来整合各种开发步骤。它和我用来检查代码行的工具已经成为我工作方式的标配。
你使用哪些不太常用的命令行工具?如果你有什么工具建议,我很乐意听听。
文章来源:https://dev.to/adamgordonbell/6-command-line-tools-for-productive-programmers-433l