作为开发者每天日常工作包含许多琐碎重复的内容,耗费了大量开发时间,终端中命令操作就是其中一项。如果你认同这点,那么你就有必要跟了解一下如何从重复低效的操作解脱出来。
通常情况下接触最多就是Bash(大多数Linux发行版本和MacOS默认shell),Bash提供大量的可用快捷键 (Shortcut)帮助使用者提升效率。这些快捷键延伸到开发工具,例如Chrome Devtool的Console
对部分常用快捷键做了兼容。
0. 写在前面
在开始正文之前,有必要作如下说明:
本文列举了部分常用的快捷键,考虑MacOs和兼容性,不涉及Alt
相关快捷键,主要为Ctrl
(快捷键中符号^)核心快捷键。所有本文演示Gif都同步展示当时键入的快捷键(右下角)。此外,针对部分Chrome devtool兼容快捷键使用✅作为标识。
1. 进程管理
在上图示例中,使用ping
命令持续获取一个百度域名的联通性,可能中间有插入工作需要临时执行,此时只需要使用CTRL+z
暂停前台进程。完成操作之后,可以使用fg
(1)命令恢复执行。CTRL+c
用来终止进程,CTRL+d
则退出shell进程。
CTRL + C
:终止shell前台正在执行的进程。实际上发送SIGINT
信号到终端,通常情况进程都会遵守终端处理规范,终止进程。CTRL + D
:退出shell进程。实际上发送EOF到shell,标识流结束。CTRL + Z
:将shell前台执行的进程暂停推到后台。可以使用fg
命令回复。
2. 控制屏幕
shell中执行进程会将日志输出打印到屏幕,往往由于日志过快的输出,屏幕一直处于翻滚状态,基本无法捕捉到有用的信息。尤其在启动服务时候,可能需要查看关键日志内容。这种情况下,很多同学的做法是等待启动完毕,日志不在输出时候回翻查看,这时也许用户信息已经不在屏幕输出缓存中,致使无法查看。
其实,并正确的方式是:在看到关注内容瞬间将屏幕定格,具体方法就是使用CTRL + s
暂停输出,查看完成之后,使用CTRL + q
回复输出即可。两个快捷键解决这个问题。
关于屏幕控制有必要提一下CTRL + l
快捷键,相信很多人都已熟悉,作用就是清空当前屏幕内容。
CTRL + l
CTRL + s
CTRL + q
3. 移动光标
习得屏幕控制对于日常开发来说远远不够的,最为频繁的操作莫过于命令编辑过程。相信很多人都有如下经历:使用rm
删除某个特定文件夹,如node_modules
,输入命令rm nodes_modules
后,发现由于删除对象是文件夹,需要追加递归强制参数,要怎么办呢?
有一部分同学可能选择疯狂猛击退格删除按钮,想要删除node_modules部分重新输入,一个不小心连同rm
都干掉,呜呼~ 重新小心翼翼的码了一遍,生怕在出错。
看了这波操作,心情也是蛮复杂。现在来看看下面这组快捷键怎么解救你,如上图演示gif,使用CTRL + a
将光标移动到最开始位置,再使用CTRL + f
向前移动光标到rm
之后,追加-rf
参数,最后使用CTRL + e
移动光标到结尾继续编辑命令即可。
↑↓←→
CTRL + a
✅:移动光标到最开始(←);CTRL + e
✅:移动光标到结尾(→);CTRL + u
✅:清空光标所在行;CTRL + f
✅:光标向前移动一个字符位置(→);CTRL + b
✅: 光标回退一个字符位置(←)
4. histrory
可以灵活编辑命令已经节省了不少的工作,这里还要介绍一个提效利器——history
。关于历史记录大部分人都有所了解。笔者遇到很多人只知道可以通过方向键上下来切换历史记录,以找到之前的历史命令,当然也一种方式。在这里介绍是快捷键,CTRL + p
向上移动历史记录,CTRL + n
向下移动历史记录。
其实,了解history
命令的人都知道,可以使用![命令前缀]
的方式也能找到特定命令开始的历史命令,例如!rm
。这种方式存在一个问题,假如之前历史中同时存在rm index.js
、rm -rf node_modules
等多个rm
相关命令时,只能找到最近使用的一个,并且前缀限制导致不够灵活。那是否有方法能够灵活的查找历史命令呢?
敲黑板,答案是YES。CTRL + r
就是来满足中需求的快捷键。使用CTRL + r
会进入到历史命令查找的交互模式,此时键入关键字,重复使用此快捷键便可以方面切换所有包含关键字的历史命令,你说棒不棒~ 当你选中目标命令之后,只需要回车或者CTRL + o
就可以执行命令。
CTRL + r
: 进入历史命令搜索交互模式CTRL + p
✅:上一条命令历史记录CTRL + n
✅:下一条命令历史记录CTRL + o
: 在历史命令搜索模式中确认选择
4. 扩展说明
熟悉文本介绍的快捷键,能够一定程度给你带来效率提升。如果你使用Ohmyzsh加强版shell,可以有更多选择,比如自动补全等高级技巧。倘若你想快速修正错误的命令,也可以考虑thefuck等。
参考
- signal(3)