众所周知,无论对于运维,还是开发来说,命令行工具都是非常高效的一种管理方式。但有一个很常见的现象就是,很多命令行语句比较复杂,用过一段时间后就忘记了。当然,这时我们可以通过网络搜索或者使用命令的 -—help
选项来快速找到答案。虽然这种常用的方法能解决问题,但是使用起来相对还是显得不那么快速高效。
之前,我们在「如何快速的回忆起遗忘的 Linux 命令」 一文中介绍了如何利用 Apropos
命令来快速查找相应的 Linux
命令。今天,我们再给大家推荐另一款神器 navi
。
navi
是一位来自巴西的小哥哥 Denis Isidoro
在 GitHub
上开源的一个的工具 ,目前已经获得超过 4200 星。navi
可以在命令行里给你提供了一个很方便使用的交互式的备忘录,能够帮助你在命令行里快速查阅、调用各种复杂难记的命令行语句。
项目地址:https://github.com/denisidoro/navi
俗话说得好,不看广告看疗效。废话不多说,先看看下面的演示效果图吧!
从演示中,我们可能看到使用了 navi
后,只需要键入一个单词,备忘录中的相关命令以及命令用法注释都会实时显示在下方供你直接选择使用,这时我们只需找到想要的命令后即可直接运行相关命令。是不是觉得很神奇和强大呢!
安装 Navi
navi
的安装还是很容易的,macOS
和 Linux
用户都可以安装。如果你已经安装了 Homebrew
或者 Linuxbrew
,那么只需下面一句命令就可以安装好 navi
。
$ brew install denisidoro/tools/navi
如果你没有安装 Homebrew
或者 Linuxbrew
这样的包管理器,你也可以直接通过源码安装。
$ git clone --depth 1 https://github.com/denisidoro/navi /opt/navi
$ cd /opt/navi
$ sudo make install
注意:如果你使用源码进行编译,你需要先安装好命令行模糊查找工具
fzf
。有关fzf
的具体安装方法,可以参考官方网址:https://github.com/junegunn/fzf 。
使用 Navi
navi
使用也是很简单的,你只需直接输入 navi
命令并回车后,即可进入交互界面进行命令查找。
默认情况下,选中的命令会直接执行。如果你只想将选中的命令输入到命令行上,你可以加上 --print
选项。
$ navi --print
你也可以在 navi
命令后直接加入 query
子命令来预先过滤要输出的命令结果。
$ navi query <cmd>
如果你想查找一些命令的常用语法,你也可以使用 search
子命令来从在线仓库中下载对应的备忘清单。
$ navi search <cmd>
自定义备忘录
navi
所使用的备忘清单都是以 .cheat
为后缀的一些文件,navi
安装完后,默认包括了以下这些备忘清单。
navi
之所以如此受欢迎,主要原因是它支持强大的自定义功能,而且自定义注释还支持中文哟。
要实现此功能,我们可以用 --dir
参数将自己定义的备忘录 ( .cheat
文件) 传递给 navi
使用。
$ navi --dir "/folder/with/cheats"
如果你觉得每次都通过 --dir
参数过于麻烦,你也可以通过环境变量来进行设置。
$ export NAVI_PATH="/folder/with/cheats:/another/folder"
介绍完了如何使用自定义的备忘清单后,接下来我们看看如何自已写一个备忘清单。
.cheat 文件语法
我们先来看一个官方给出的 .cheat
文件的示例内容。
% git, code
# Change branch
git checkout <branch>
$ branch: git branch | awk '{print $NF}'
.cheat
文件语法主要有以下几个注意点。
- 以「
%
」开头的行定义了该文件包含的特定的标签 - 以「
#
」开头的行描述了该命令的作用和用法 - 以「
$
」开头的行定义了给定参数的可选值 - 其它所有的非空行都被视为可执行命令,命令中的变量以
<>
表示
最后我们来看一个实例,我们常用到的 ffmpeg
处理视频的命令通常都太长,这里我们就定义一个 ffmpeg.cheat
文件来管理这些日常常用的命令。
从上图可以看到,我们在完成 ffmpeg
命令备忘清单的定义后。日常使用中再也不用输入长长的命令,只需要选中对应命令后,再输入自定义参数就可完成所有操作。这样以来,是不是大大提升了工作效率呢!
参考文档
- https://www.google.com
- https://url.cn/5pyiQLg
- https://url.cn/5EE2Ejc