重复输入类似的命令的几种方法

在命令行常常须要重复输入一些shell代码,例如用cd切换到某个目录、运行npm run local,或者git commit等。每次都完整地一个个字符地敲入这些命令仍是很麻烦的,这种时候就要寻找能够解决重复输入,提升效率的办法了。html

最原始的,固然是找一个文本文件,把平时常常敲入的命令存放在其中,每当须要运行这些命令的时候就打开文件选中内容复制一下,再到终端粘贴并运行,但这未免过于原始了。mysql

使用ctrl-r翻出历史命令

使用ctrl-r是一种不那么原始的方法。在终端中按下ctrl-r后,shell会等待进一步地输入,并根据输入从之前输入过的命令中找出匹配的一条。找到了本身所须要的命令行,直接敲击回车便可,效果以下
ctrl-r的效果git

PS:上面是使用了fzf以后的效果,因此在敲入回车后并不会当即执行所选中的命令。原生的ctrl-r命令不支持在不一样的位置上匹配输入字符,因此仍是推荐一试fzf的。github

使用alias

alias相比于ctrl-r而言进化了一点,由于它毕竟再也不须要往命令行中塞入那么多字符了——它让终端用户能够用较短的内容来代替较长的内容。例如,我就给登陆我本地的MySQL的命令写了一个aliassql

alias myroot='mysql -u root -p*******'

并且alias更像是宏展开,因此能够在后面添加其它内容,以下图
alias的效果shell

在myroot以后输入的test和user_info都跟着myroot展开后的结果一块儿喂给了shell去执行。使用alias以后,每次只须要输入较短的myroot便可。npm

使用函数

若是说alias是C语言里面的宏的话,那么shell所支持的函数就是C语言里面的函数了(这不是废话么)。alias始终不太适合所要输入的内容比较多的场景——定义也特别难写,而且alias没有输入参数可言,也不适合处理须要有为妙差别的重复内容的状况。shell函数很适合这种状况,例如,我在本地编辑完一个.sd文件后须要用sdedit将其转换为.png文件,方能上传到Confluence上贴到设计文档里,我但愿.png文件跟.sd文件有相同的basename,那么用下面这个shell函数能够减轻一些重复输入的劳动力app

# 根据.sd文件生成同名的.png文件
function sdpng() {
    basename=${1}
    /usr/local/bin/sdedit -t png -o ${basename}.png ${basename}.sd
}

只须要我输入一次文件名便可,效果以下
shell函数的效果函数

使用Alfred的Snippets功能

Alfred带有一个叫作Snippets的特性
Alfred的Snippets特性spa

它跟上面所说的alias很类似,但它不是由shell本身处理悄悄展开的,它是显式地输入一长串的字符。好比说我定义了三个短语:gpd、gct,以及gpt,它们分别会展开为

git push -u origin develop
git checkout test
git push -u origin test

效果以下
Alfred的Snippets自动展开的效果

Alfred的Snippets也跟alias同样是不能接受参数的,不过支持一些占位符,能够展开为一些特定模式的动态内容。一个比较有用的是{cursor}这个占位符,可让光标定位至此。例如我能够定义这样的一串展开结果

SELECT * FROM `user_info` WHERE `userId` = {cursor}\G

这样我敲入对应的短语后就能够正肯定位到WHERE语句,而后直接输入要查询的参数便可,效果以下
cursor占位符的效果

除了Alfred以外,还有其它的经过snippet提升输入效率的软件,好比aTextDash,不过我没有实际地用过,就很少说了。

后记

没有代码才是最快地输入代码的方式

阅读原文

相关文章
相关标签/搜索