旅行伙伴加入: fuck'n fish
摘要
本篇文档和原实验文档无关,只是作为一个小彩蛋,但如果仔细完成,你的自主动手能力和后续实验的便捷程度会得到较大的提升。
我们的命令行
在 PA1 的过程中,想必大家已经开始逐渐熟悉命令行的使用了,我们在实验中用得比较多的几个命令,比如 git make 等,应该已经用过几十次了。
但偶尔,也会出现一些比较尴尬的情况……比如:
尤其是在一长串命令中,不小心手快了打错了一个字母,然后命令行突然沉默了一会,告诉你命令有错,这个时候错就有得好找了。
注意
我们出现了一个需求:需要在输入命令有一两个小的字符错误时,能够自动纠正过来。
我们的运气不错,确实存在一个这样的软件,能够帮助我们自动纠错命令。
新伙伴: fuck
这个软件完美地诠释了命令出现小错误时,屏幕前的人的心声。其使用方法大致如下:
当上一个命令输入有误时,使用 fuck 命令即可自动纠正,可上下切换多个可能的猜测,选择到你认为正确的一个时,按下回车即可执行。
获得 fuck
现在请你在你的 Linux 上安装 fuck 软件,能够做到以上的效果即可。
还是不满足?
现在我们已经拥有了对命令行的小纠错能力,但这还不够。
我们在完成 PA 时,实际上用得最多的指令就是 make xxx,而且往往会反复使用,比如在实现了一个新功能时,我们肯定会在接下来的几分钟里多次使用 make run ,如果每次都要从头开始敲,是很无聊,也很浪费时间的。
利用命令的“局部性”
我们又出现了一个新需求:能够利用命令的“局部性”,将重复性的命令输入自动化。
好在,我们真的有一个工具可以帮我们实现这个功能:fish。
新伙伴: fish
fish 是一个功能强大的 shell ,正如它的名字:Friendly Interactive SHell 。它比默认的 bash 更加用户友好,并且提供了很多便利的功能,比如自动补全、语法高亮等。
获得 fish
现在请你获得你的 fish 吧~
fish 会记录你输入过的命令,并且根据你当前输入的内容,提示可能的命令,并可以按右键自动补全。它还提供了很多其他便利的功能,如 tab 逐个选择自动补全。
但是,你会发现,虽然你已经安装了 fish ,但是每次启动终端时,默认打开的还是丑丑的 bash 。要是每次都要输入 fish 主动唤起才能打开 fish 就太不方便了,那该怎么办呢?
把 fish 设置成默认 shell
嗯,应该,是一个很简单的任务。
小惊喜(惊吓)
在安装了 fish 之后,你会发现, fuck 用不了了。
在 fish 中使用 fuck
赶紧想办法,让 fish 也能使用 fuck 吧。
更大的麻烦
坏了,现在在 nemu 中连 make 都不能用了!
别着急,这个问题你可能还不知道怎么解决(而且容易改错),我会直接一步步教你解决:
1.打开 ~/.bashrc 文件,找到 export NEMU_HOME= 和 export AM_HOME= 开头的行。
2.把那两行复制到 ~/.config/fish/config.fish 文件中。
(注意,如果你在 PA 的后续过程中遇到了 navy-apps ,请把 export NAVY_HOME= 那一行也复制到 ~/.config/fish/config.fish 文件中。)
有没有偷懒的办法?
正如我们前面所说,有需求就应该有自动化偷懒的办法,所以这个可以吗?
还真可以,我去问了问 AI ,可以使用以下命令实现:
grep -E '^\s*export\s+(NEMU_HOME|AM_HOME)=' ~/.bashrc | sed 's/export/set -x/; s/=/ /' >> ~/.config/fish/config.fish
所以,对于一个研究计算机的人来说,偷懒是生产力发展的第一动力(误)。
但注意,这只是个简易的命令,将配置追加到 fish 的配置文件中,所以使用一次就好,不要多次使用,不然 fish 的配置文件末尾会被追加一堆内容。如果使用后还是不能正常 make ,建议重启试试。同样,如果你后面使用了 navy-apps ,就回来再使用一次下面这个命令:
grep -E '^\s*export\s+(NAVY_HOME)=' ~/.bashrc | sed 's/export/set -x/; s/=/ /' >> ~/.config/fish/config.fish
经历了前面这些小小的麻烦事后,你就拥有了一个方便好用的 fish 了,相信它(以及这段安装工具的经历)会在你后续的实验里发挥重要作用!
总结
正如我们前面的文档中有说到过的,计算机领域的一个典型思路是“出现某一个需求→找到合适的工具→解决该需求”,因为这个世界上有很多人也在进行开发,所以绝大部分情况下,我们都不需要自己写一个工具,而是可以借用别人写好了的现成的工具。
以及,像我们上一篇文档中所说,程序设计的意义就是自动化,让技术解放人的重复劳动,不然,计算机就没有应用的意义了。
PA1 到此结束
收拾收拾,准备前往 PA2 吧。