高效程序员必备的六大命令行工具

程序员少不了和命令行打交道。而一个好的工具可以让工作变得更容易、更效率,一个好的工具可以解锁新的能力:将不可能化为可能,或者简单化一件事情。很明显当你使用一种工具时,它会驱使你走向某种类型的研究,这种研究方式会因为这个工具而更加轻松,因为你有了另一种思维方式,你的工具让其他任何人都做不到的事情得以发生,所以它能让你更有独创性。

我在earthly.dev找到了一个分享命令行工具的文章,以下是译文:

最近我向命令行工具箱添加了一些新工具,在本文,我想分享一些我发现的有价值的工具。

1、Broot


我不知道我是怎么认识Broot的,但它很实用。当你打开一个小目录,并想要查看land的位置,那么tree功能可以优秀地完成这点。

✗ tree.├── dartboard.png├── header.jpg├── opensign.png├── quote1.png└── trophy.png0 directories, 5 files

但是,如果目录有很多文件或子目录,tree就没有那么有用了:当文件滚动到你面前时,你只能看到最后一个屏幕上全是信息。

$ tree < scrolling text for a long time >├── banner.js└── index.html328 directories, 2028 files

Broot通过分析终端窗口的大小并调整其输出以适应它,来解决这个问题。

你可以在Broot中使用方向键进行导航,它也有助于通过传入-w标志(broot -w)来跟踪磁盘空间的使用情况:

它可以做很多其他的事情,可以看看GitHub guide的指南,但对我来说,它只是提供了一个更好的tree。

ℹ️ 安装 Broot

使用brew以在MacOS上安装,或者按照其他环境的安装说明安装。

brew install broot

2、Funky


如果你希望将终端用作IDE,那么根据当前目录更改终端是很有帮助的。有很多方法可以做到这一点,比如DirEnv。当进入目录时,DirEnv会加载和卸载.env文件;这点和smartcd类似。它允许在更改到特定路径时运行shell脚本——这让用户可以启动和停止服务,更改提示符,或任何用户想要的内容。

然而,我最喜欢用的是Funky,它有个很怪的名字。它通过“使shell函数更容易定义、更灵活、更具有交互性而将其提升到下一个层次。”

Funky的工作方式很简单:在进入一个目录时,Funky会查找一个包含bash函数列表的.funky文件。它会把这些文件加载,并在用户退出时卸载。

这意味着,当我进入这个Jekyll博客(一个ruby开发的博客系统)的目录时,我已经加载了新的别名,用于创建新文章、检查标记、拉入图像等等。
       我可以通过键入Funky列出这些:

$ funkylint() { 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

安装Funky需要用到pip:

pip3 install pyfunky

并在你的 .zshrcbashrc 或者类似的东西上加上hooks:

## find where funky.sh was installed by pip and source itsource /usr/local/lib/python3.9/site-packages/scripts/shell/funky.sh

3、 Fuzzy Finder (FZF)


为这篇文章使用fzf定位生成的图像

如果说Funky和Broot提高了生产力,那么更多的工具将如虎添翼。所以我去Lobste.rs询问人们还在使用什么其他工具。FZF被提到了很多次,而现在我也开始使用它了。

FZF是一个命令行模糊查找器。它的运行速度很快,而且在需要在命令行输入值的许多地方,它可以交互式地让你基于模糊关键字匹配筛选选项。

如果用户安装了快捷方式(/usr/local/opt/fzf/install),就可以通过在任何地方键入**,获得一个交互式模糊查找器来缩小到所需的路径。FZF还可以更快地搜索历史记录。

它是一个UNIX过滤器,它读取输入,显示一个可向下过滤的交互式列表,然后将选中的项发送到另一端,但这种描述低估了它的用处。

我推荐看这个视频,Alexey Samoshkin在舒缓的钢琴演奏的背景下介绍了FZF的许多可能的用途:https://www.youtube.com/embed/qgG5Jhi_Els

ℹ️ 安装 FZF

使用 软件包管理器作为一个选择 安装FZF:

brew install fzf

并在你的 .zshrcbashrc 或者类似的东西上加上hooks:

#ZSHsource ~/.fzf.zsh#BASHsource ~/.fzf.bash

4、 McFly


使用McFly在此路径中常见的普通命令

当你想要打开一个文件(vim **)时,FZF非常适合在命令行中过滤文件路径,但是对于完成命令行,有比原始历史文件更多的可用信息。McFly试图使用这些额外的信息来提供更多相关的结果。

额外的信息是什么?

首先,McFly在其启发式排名中考虑了以下选项:

  • 在命令之前输入的命令。

  • 你运行该命令的频率。

  • 你最近运行该命令的时间。

它在SQLite数据库中追踪所有这些信息,它还通过以下方式追踪和权衡建议:

  • 命令的退出状态。

  • 运行中命令的目录。

  • 如果你以前在McFly中选择了它。

被建议失败的命令是令人讨厌的,但是我从来没有考虑过基于当前目录或从未被选择的降级项来缩小选择范围。

McFly使用神经网络来进行排名,一个可能的缺点是,如果你的SQLite数据库太大,那么在提出建议时就会滞后。但是,可以使用MCFLY_HISTORY_LIMIT来限制这种增长。

我只使用了几天,所以我不能给它一个公平的评价,但这种概念——使用额外的信息来定制工具,以适应实际使用——令人充满希望。

ℹ️ 安装 McFly

许多方法可以安装McFly。 比如说brew:

brew tap cantino/mcflybrew install mcfly

并在你的 .zshrcbashrc 或者类似的东西上加上hooks:

eval "$(mcfly init zsh)"

二进制文件发出初始化脚本,而不是将初始化脚本转储到主目录,这是一种很好的做

法。而Zoxide——下面要介绍的工具——也能做到这一点。此外,FZF会干扰McFly的

CTRL-R,必须注释掉FZF初始化脚本中的这一行以使McFly正常工作。

5、Better CD


使用zoxide作为cd的替代品

对于一些完成路径,FZF工作得很好,但在使用cd更改目录时,它没有帮助:从主目录输入cd **TAB后,FZF需要一段时间来构建完整的列表选项。
       它比使用现有的ZSH完成的 “cd TAB <choose a dir> TAB <choose a dir> ” 导航到文件夹更快。

然而,有许多工具试图改进cd、autojumpzFasd的所有跟踪目录使用情况,并为你提供一个简单的快捷键来更改到常用访问的目录。
       R /commandline详细讨论了这些不同的cd替换,但其中最有动力的是Zoxide。Zoxide是用Rust语言重写的z,并且承诺可以提高速度。

安装之后,用户可以像cd (z ~/path/foo/bar)一样使用它,但是也可以根据路径的文本匹配(z bar ~= cd ~/path/foo/bar)来更改目录。
       不需要提供完整的路径,用户就能更改位置,只要提供路径的唯一子字符串,Zoxide就能使用它的使用历史记录来引导到想要的位置。

为了便于采用,我选择使用Zoxide替换cd,这就像在添加初始化shell代码时使用--cmd标志一样简单(eval "$(zoxide init zsh --cmd cd)")。

ℹ️ 安装 Zoxide

许多方法可以安装Zoxide。 比如说brew:

brew install zoxide

并在你的 .zshrcbashrc 或者类似的东西上加上hooks:

eval "$(zoxide init zsh --cmd cd)"

6、 GitUpdate


这个工具是在Lobste.rs上的另一个发现。 在Git分支上工作时,我喜欢经常提交我的工作。
        例如,在我试图删除博客文章中的一些巨大的文本块之前,或者在我尝试重构一些代码片段之前,我会提交我的工作。
        当然,我稍后会压缩或重组这些提交,但为了方便,我有一个名为wip(“工作在进行中”)的git别名,这让我的提交更轻松。

git wip = !git add --all; git ci -m WIP

Gitupdate是对这个想法的一个简单改进。
        Gitupdate可以提交文件,并使用更改文件的文件名(而不是扩展名)来创建更有意义的提交消息。当提交消息不重要时,它非常有用。

GitUpdate生成提交消息、提交和推送。

ℹ️安装 GitUpdate

git clone https://github.com/nikitavoloboev/gitupdatego build
(0)

相关推荐

  • 录制命令行工具--asciinema

    表白:黑白圣堂血天使,天剑鬼刀阿修罗.  讲解对象:/录制命令行工具--asciinema 作者:融水公子 rsgz 命令行大全 命令行大全 http://www.rsgz.top/post/778. ...

  • 局域网测网速?手把手教NAS、电脑、路由器、手机如何安装 iperf3

    大家好,我是晓飞影! 一个数码爱好者,也喜欢在众多平行领域探究摸索,让生活多一点乐趣. 家用宽带测速我喜欢用 speedtest,界面简洁,准确快速,不过这个是测互联网的速度,如果家里的设备多了,尤其 ...

  • iTerm--比Terminal(终端)更好用的命令行工具

    Terminal是Mac自带的命令行工具,对于开发者来说,是不得不使用的开发工具之一.然而Terminal的外观设置功能比较少,这对于每天都得跟它相处很久的我们来说,这是一个很大的悲伤.当然,你也可以 ...

  • 牛逼的终端命令行工具,助你成为 10 倍程序员 !

    大家好,我是小猿. 终端是程序员的必备工具之一,10 倍程序员的终端跟普通程序员有何不同?本文将介绍许多牛逼且实用的开源工具,用上这些工具后你不一定会变成 10 倍程序员,但绝对能够让你感觉自己像个 ...

  • 优秀程序员必备技能之如何高效阅读源码

    "我能熟练使用这个框架/软件/技术就行了, 为什么要看源码?" "平时不用看源码, 看源码太费时间,还容易忘记,工作中出现问题再针对性地阅读,效率更高." &q ...

  • 18 个终端命令行工具,绝对让你感觉自己像个 10 倍程序员

    终端是程序员的必备工具之一,10 倍程序员的终端跟普通程序员有何不同?本文将介绍许多牛逼且实用的开源工具,用上这些工具后你不一定会变成 10 倍程序员,但绝对能够让你感觉自己像个 10 倍程序员. 本 ...

  • 程序员必备的思维能力:结构化思维

    在日常工作中,我们时常会碰到这样的情况,有的人讲一件事情的时候逻辑非常混乱,说了很多事情的罗列,却说不到重点.有的人写代码,本身的业务逻辑并没有多复杂,但呈现出的代码却像一堆线团,混乱不堪,无法理解. ...

  • 【赠书】程序员必备!如何深入理解计算机系统

    周末到了,本次给大家赠送3本新书,这次赠送的书籍是<深入理解计算机系统:第3版>. 这是一本什么样的书 这是一本讲解计算机软硬件系统的书,从程序员视角全面剖析其实现细节,使读者深刻理解程序 ...

  • 优秀程序员必备以下五点能力,你都符合吗?

    与30年前相比,现在互联网时代的程序员已经有了很多细分的研发方向,比如前端.后端.算法.桌面软件.人工智能等等,不同的细分方向,也都有不同的要求.但不论选择什么方向,一名优秀的程序员都应具备下面这五点 ...

  • 编程新手该如何调优程序?程序员必备性能调优利器——火焰图

    让我们回想一下,曾经作为编程新手的我们是如何调优程序的?通常是在没有数据的情况下依靠主观臆断来瞎蒙,稍微有些经验的同学则会对差异代码进行二分或者逐段调试.这种定位问题的方式不仅耗时耗力,而且还不具有通 ...

  • 程序员必备的17个软件开发工具

    对于每一位开发者而言,软件开发工具的重要性显然不言而喻.事实上,除了个人能力之外,它们也在团队的效率及实际生产力层面扮演着关键性角色.   在今天的文章中,我们整理出17款软件开发工具,如果您尚未尝试 ...

  • 程序员必备工具包,请收藏!

    回复"000"获取大量电子书 古人云:工欲善其事,必先利其器.工匠想要使他的工作做好,一定要先让工具锋利.比喻要做好一件事,准备工作非常重要. 我们做软件开发者,每天都要和各种工具 ...