bashmarks——终端利器

作为终端控,经常要使用命令来定位要访问的目录,于是,“cd path”这种命令每天不知到要打多少次。对于一些结构比较深的目录(尤其是要经常访问的),使用cd命令起来真的是噩梦(尽管有tab神器,依旧让我感觉非常不爽)。

这个时候,一种自然而然的想法就是能否对于我经常访问的目录,建立一个快照(书签),之后,每次打开终端只需要直接读取书签即可,类似于下面这种命令:

  • > save bookmark_name  # 将当前路径保存为名为bookmark_name的书签中
  • > goto bookmark_name # 直接访问bookmark_name书签描述的目录

这种和浏览器的书签类似,但是,终端天生的优势就是完全命令行操作,这要比鼠标操作爽多了!

在github上搜索了一番就发现了老早就有人有这样的需求了,并已经写了一个名为“bashmarks”的脚本来支持我想要的操作。

它的安装相当简单,直接根据它主页描述的操作即可。

bashmarks文档中描述,它支持以下命令:

  • s <bookmark_name> – 将当前路径保存到<bookmark_name>书签中
  • g <bookmark_name> – 快速前往<bookmark_name>指定的路径中
  • p <bookmark_name> – 打印出保存在<bookmark_name>中的路径
  • d <bookmark_name> – 删除<bookmark_name>书签
  • l – 列出所有的书签
这里最后一个命令:l。此命令在Ubuntu 默认shell下会冲突(在Mac下正常,不会冲突)。
但是,有的时候这个命令是非常有用的,尤其是当我忘记我的bookmark_name的时候。
于是,我就尝试看看能否把这个命令改掉,看了它的源代码发现,其实非常简单。
它每个命令对应都是一个函数,其中l函数如下:
# list bookmarks with dirnam
function l {
    check_help $1
    source $SDIRS

    # if color output is not working for you, comment out the line below '33[1;32m' == "red"
    env | sort | awk '/DIR_.+/{split(substr($0,5),parts,"="); printf("33[1;31m%-20s33[0m %s\n", parts[1], parts[2]);}'

    # uncomment this line if color output is not working with the line above
    # env | grep "^DIR_" | cut -c5- | sort |grep "^.*=" 
}
那这里只要把函数名字一改就好了,我直接把l(list)改成了lb(list bookmarks)。然后,就开始暗爽!

留下评论