美文网首页暮潇潇诗文
灰常牛逼的命令行备忘录 navi,灰常牛逼!

灰常牛逼的命令行备忘录 navi,灰常牛逼!

作者: GitArtOS | 来源:发表于2019-09-23 18:48 被阅读0次

灰常牛逼的命令行备忘录 [navi]

命令行是非常高效的工具,但一个很常见的现象是,很多命令行过一段时间就容易忘。举个栗子,如果我们常用 git 命令行管理代码、利用 conda 命令管理开发环境,如果过一段时间没用了,那么你还记得如何用 git 将本地代码同步到 GitHub,还记得如何用 conda 命令删除一个本地环境吗?
当然,我们可以在网上搜索一下,也能快速找到答案,但总之还是挺不方便的。我们常见的做法是,将容易忘记的命令行写到笔记中去,忘了再查就是。但现在,有一个新的开源项目 navi,它提供了一个交互式的备忘录。
看看下面的动图,可以说,不用做笔记、不用查 History,我们再也不用担心忘记命令行了。

Last login: Mon Sep 23 14:11:30 on console
192:~ yebinghe$ brew install denisidoro/tools/navi
==> Tapping denisidoro/tools
Cloning into '/usr/local/Homebrew/Library/Taps/denisidoro/homebrew-tools'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
Tapped 1 formula (27 files, 23.9KB).
==> Installing navi from denisidoro/tools
==> Installing dependencies for denisidoro/tools/navi: fzf
==> Installing denisidoro/tools/navi dependency: fzf
==> Downloading https://mirrors.ustc.edu.cn/homebrew-bottles/bottles/fzf-0.18.0.
######################################################################## 100.0%
==> Pouring fzf-0.18.0.mojave.bottle.tar.gz
==> Caveats
To install useful keybindings and fuzzy completion:
  /usr/local/opt/fzf/install

To use fzf in Vim, add the following line to your .vimrc:
  set rtp+=/usr/local/opt/fzf
==> Summary
🍺  /usr/local/Cellar/fzf/0.18.0: 17 files, 3.6MB
==> Installing denisidoro/tools/navi
==> Downloading https://github.com/denisidoro/navi/archive/v0.8.1.tar.gz
==> Downloading from https://codeload.github.com/denisidoro/navi/tar.gz/v0.8.1
######################################################################## 100.0%
🍺  /usr/local/Cellar/navi/0.8.1: 33 files, 60.2KB, built in 5 seconds
==> Caveats
==> fzf
To install useful keybindings and fuzzy completion:
  /usr/local/opt/fzf/install

To use fzf in Vim, add the following line to your .vimrc:
  set rtp+=/usr/local/opt/fzf


执行navi git

192:~ yebinghe$ navi git

┌────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ git add <filename>                                                                                 │
└────────────────────────────────────────────────────────────────────────────────────────────────────┘
  git rebase master -S -f [git]                                                                       
  # Sign all commits in a branch based on master [git]                                                
  git clean -dxf [git]                                                                                
  # Clear everything [git]                                                                            
  git log --all --decorate --oneline --graph [git]                                                    
  # Displays formatted log of commits for a repo [git]                                                
  git log [git]                                                                                       
  # Displays log of commits for a repo [git]                                                          
  git merge <branch_name> [git]                                                                       
  # Merges changes on one branch into current branch [git]                                            
  git pull --ff-only [git]                                                                            
  # Pulls changes to a remote repo to the local repo [git]                                            
  git push <remote_name> <branch_name> -f [git]                                                       
  # Overwrites remote branch with local branch changes [git]                                          
  git push <remote_name> <branch>:<branch_to_overwrite> [git]                                         
  # Pushes changes to a remote repository overwriting another branch [git]                            
  git push -u <remote_name> <branch_name> [git]                                                       
  # Pushes committed changes to remote repository [git]                                               
  git commit -m <message> [git]                                                                       
  # Saves the changes to a file in a commit [git]                                                     
  git add . [git]                                                                                     
  # Stages all changed files for commit [git]                                                         
  git add <filename> [git]                                                                            
> # Stages a changed file for commit [git]                                                            
  git diff <filename> [git]                                                                           
  # Displays the changes made to a file [git]                                                         
  git status [git]                                                                                    
  # Displays the current status of a git repository [git]                                             
  git checkout <branch> [git]                                                                         
  # Change branch [git]                                                                               
  # Checkout to branch [git]                                                                          
  git remote add <remote_name> <remote_url> [git]                                                     
  # Adds a remote for a git repository [git]                                                          
  git init [git]                                                                                      
  # Initializes a git repository [git]                                                                
  git config --global user.email <email> [git]                                                        
  # Set global git user email [git]                                                                   
  git config --global user.name <name> [git]                                                          
  # Set global git user name [git]                                                                    
  systemctl list-unit-files --type=service --state=disabled [systemctl, service]                      
  # List disabled services [systemctl, service]                                                       
  systemctl list-unit-files --type=service --state=enabled [systemctl, service]                       
  # List enabled services [systemctl, service]                                                        
  systemctl list-units --type=service --state=running [systemctl, service]                            
  # List running services [systemctl, service]                                                        
  systemctl status <service> [systemctl, service]                  ]                                  
  # Service status [systemctl, service]                                                               
  systemctl reload <service_active> [systemctl, service]                                              
  # Reload service [systemctl, service]                                                             ] 
  systemctl restart <service> [systemctl, service]                                                    
  # Restart service [systemctl, service]                                                              
  systemctl disable <service_enabled> [systemctl, service]                                            
>   < 119/119                                                                                         

如上所示,navi 允许我们查阅所有的备忘录并执行对应的命令,值得注意的是,备忘录是实时匹配的,如果我键入 git,那么差不多就剩下 git 相关的命令行。
项目地址

神奇的命令行备忘录:navi

机器之心也尝试了该工具,从安装到使用,总体感觉非常便捷。我们可以使用已有的命令行备忘录,也能自己导入以前常用的备忘录。我们可以配置可以直接运行的命令行,只需要手动加上参数就行;也可以写上备忘录注释,再手动键入命令行。

该项目表示,navi 的目标主要是:

通过给定关键字或文字描述,更便捷地查找命令;
如果作为长命令的辅助部分,查找后的结果也可以直接复制粘贴到主命令;
我们的命令行使用习惯或备忘录可以与其它人共享;
此外,该工具也能实现命令行的自动补全,不过这属于高级用法。

总体而言,它就是有助于命令行的整体应用。如下图所示,我们将几个 conda命令也加到了备忘录中,键入命令行的时候就会显示自己去试试。

navi 该怎么用

我们是在 macOS 系统上测试的,可以便捷地使用 Homebrew 安装:brew install denisidoro/tools/navi。其它系统估计满足环境也是可以的,如下是没有 Homebrew 时的安装方法:

git clone http://github.com/denisidoro/navi /opt/navicd /opt/navi
sudo make install

安装完成后,可以直接在命令行内键入navi,从而进入到交互式备忘录界面。对于初始的navi,它一共包含 9 个内置的备忘录,我们可以修改它们。

yui.png

进入后的交互式界面如下图所示,我们删除了一些不太用得上的默认备忘录。

yuii.jpg

自定义个备忘录

navi 很重要的功能是能自定义备忘录,我们可以仿照自带的备忘录写一个新的。该项目表示,我们可以用命令行传递.cheat 文件,从而达到添加的目的:

navi --dir "/folder/with/cheats"

也可以直接把我们的备忘录文件夹添加到Bash环境中。机器之心做了更简单的一个操作,直接查找该工具的安装目录,然后手动删增备忘录,我们的发现这也是可以的。如果读者也使用 Homebrew 安装,那么在 usr/local/Cellar/navi 路径下就能找到默认备忘录。

当然,我们是要把以前的笔记做成.cheat 纯文本的,它的用法也不难,只不过要实现补全或带参数的命令,还是需要一些特殊的语法。如下是一个标准的.cheat 文件:

qwe.jpg
  • cheat 语法主要有以下几点:

「%」开头的行包含了特定的 Tag,也就是说上图「git」会作为标签加到该文件所有命令行最后;
「#」开头的行描述了该命令行的用法;
「$」开头的行应该为给定参数生成建议值;
其它所有非空行应该都为可执行命令行。

如下所示为有效的.cheat 文件:

% git, code
# Change branch
git checkout <branch>

$ branch: git branch | awk '{print $NF}'

最后,我们真的比较推荐这个新工具,用它来查备忘命令行实在是太方便了,那就去GitHubstar去吧。

相关文章

  • 灰常牛逼的命令行备忘录 navi,灰常牛逼!

    灰常牛逼的命令行备忘录 [navi] 命令行是非常高效的工具,但一个很常见的现象是,很多命令行过一段时间就容易忘。...

  • iOS 一个灰常牛逼的Label

    一个灰常牛逼的label可响应部分文字的点击事件,常用于聊天微博等页面。类似微博的自动高亮label,包括url、...

  • 装逼

    裝逼不牛逼 牛逼不装逼 牛逼要裝逼 装逼真牛逼

  • 欧洲是圆的·一半是火焰,一半是海水

    昨晚荷兰VS丹麦的比赛灰常灰常灰常灰常灰常灰常灰常让我失望。 赛前禹永豪预测荷兰丹麦战平,德国取胜葡萄牙。我觉得没...

  • 牛逼牛逼牛逼

    有一天, 我在墨爾本城區的一家泰國人餐廳吃飯,隔壁桌子吃飯的是一家多民族家庭,先生估計是西南歐洲某個民族的...

  • 简书,蛮有意思。

    世界上牛逼的人很多,牛逼的人本不牛逼,做了牛逼的事,才变牛逼。~一个80后的感言

  • 程序员的骄傲不是嘴炮上的互怼

    Angular 牛逼,还是 Vue 牛逼有那么重要么? 没有。React-Native 牛逼,还是 Weex 牛逼...

  • 余紫玄说够牛逼系统

    余紫玄说够牛逼系统 够牛逼是什么意思? 就是您够牛逼。 您的话术非常牛逼,您的流量非常牛逼。 您能出单,您就够牛逼...

  • 没有人天生牛逼

    创业不是牛逼的人做了牛逼的事情,而是普通人通过做牛逼的事情变得牛逼。没有人天生牛逼,都是与困难的搏斗中磨砺出牛逼的...

  • 2018-10-07

    中中中 牛逼不 牛逼 牛

网友评论

    本文标题:灰常牛逼的命令行备忘录 navi,灰常牛逼!

    本文链接:https://www.haomeiwen.com/subject/cmjmuctx.html