美文网首页暮潇潇诗文
灰常牛逼的命令行备忘录 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,灰常牛逼!

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