我每天都用Shell,几乎一秒也离不开。我想重复一下上一个命令,或稍微修改下再重复执行它。一种快捷的方法是使用向上箭头来获取最新使用的命令。另一个常见技巧是使用Ctrl-R逐步搜索以前使用的命令。


另外,还有两个其他技巧可以重复我使用的历史命令,这些命令并不为人所知。


我最喜欢的命令行快捷方式_java


escape-dot(\. 或!$)


通常,您只想重复上一个命令的最后一个参数。例如,假设你想运行git diff path/to/tests,然后git add path/to/tests。对于第二个命令,您可以键入git add escape-dot(转义后跟一个小圆点),它将扩展为path/to/tests(上一个命令的最后一个参数)。


我发现我经常想在同一个参数上运行另一个命令,而escape-dot是最方便的方法。它也可以使用!$而不是escape-dot,但是输入稍微有些难度,所以我不咋太使用它了。


history配合!


有时候我知道曾经使用过一个命令,但是我用Ctrl+R搜索不着一个合适的字符串(或者在找到我想要的情况之前,我会在搜索中发现太多无关的命中)。在这种情况下,我使用history来获取最近使用的命令列表。假如我在列表中的位置456看到想要重复的命令,就输入 !456 重新运行该命令。


如果我想在运行它之前修改命令,我输入!456:p,然后就出现命令,使用向上箭头就会出现在shell上,然后在运行之前修改它即可。


我喜欢为shell命令保留很长的历史(大概几千个条目)。为了能够在我的shell中向上滚动而不仅仅看到历史记录条目,我创建了一个别名,只显示列表中的最后100个项目:


alias his='history | tail -n 100; echo "Only last 100. For full, type: history" '


所以我通常只需输入his,就能获得的最后的100个命令。


我最喜欢的命令行快捷方式_java_02


编辑时的常用命令


我经常想在运行命令之前编辑我在命令行上的内容(特别是如果我使用向上箭头来获取最新的命令)。这是我最常使用的:


Ctrl-A - 移动到行的开头

Ctrl-E - 移动到行尾

Ctrl-U - 清除行(光标位置前)

Ctrl-W - 删除光标位置前的单词


小结


我在工作的大多数,重复命令时都用上箭头和Ctrl-R组合。我相信很少有人熟悉历史列表中的转义点与重复命令。我经常轮换使用这四种方式,所以想写一篇文章来传播这个技巧。