Fork me on GitHub

黄博文的地盘

我是一个程序员.

gtShell - 为你常用的目录建立标签并快速跳转

| Comments

使用场景: 如果你有很多工作目录,需要每天在这些目录中跳来跳去。那么你就应该试试goShell. 一个使用简单、功能恰到好处的terminal下的小工具。 gtShell支持将常用的一些目录保存为bookmark,提供快速跳转功能。这样你就不需要在使用cd后面跟随一长串的目录名称。 它也支持自动完成,你只需要输入开头的几个字母,然后按tab键就可以自动匹配。 目前源码被我host在github上。

下面是主要文件gt.sh的源码。

gt.shgt.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#! /bin/bash

DIRS="$HOME/.gtDirs"
if test ! -e $DIRS
then
  touch $DIRS
fi

gt () {
  case $1 in
      -d)
          temp=`mktemp -t .gtDirs-XXXXXX`
          sed "/^$2=/"d $DIRS > $temp
          mv $temp $DIRS
          rm -f $temp
          ;;
      -a)
          validate_bookmark_name "$@"
          if [ -z "$result" ]; then
              CURDIR=$PWD
               echo "$2=$CURDIR" >> $DIRS
          fi
          ;;
      -l)
          cat $DIRS
          ;;
      -h)
          print_usage
          ;;
      *)
          if [ -z $1 ]; then
              print_usage
          elif [[ ! -z `awk -F '=' '/^'"$1"'=/ {print $2 }' $DIRS` ]]; then
              cd `awk -F '=' '/^'"$1"'=/ {print $2 }' $DIRS`
              else
              echo 'error: bookmark name not found'

          fi

  esac
}

#validate names
function validate_bookmark_name {
  result=""
  if [ -z $2 ]; then
      result='error: bookmark name required!'
      echo $result
  elif [ -z `echo $2 | sed 's/[^A-Za-z0-9_]//g' ` ]; then
      result='error: bookmark name is invalid!'
      echo $result
  fi

}

function print_usage {
      echo  'Usage:'
          echo  '-a <bookmark_name> - Saves the current directory as "bookmark_name"'
          echo  '-d <bookmark_name> - Deletes the bookmark'
          echo  '-l                 - Lists all available bookmarks'
          echo  '-h(-help,--help)   - Lists usage'
          echo  '<bookmark_name>    - Jump to the bookmark'
}

function _l {
  awk -F '=' ' {print $1} ' $DIRS
}


function _comp {
    local curw
    COMPREPLY=()
    curw=${COMP_WORDS[COMP_CWORD]}
    COMPREPLY=($(compgen -W '`_l`' -- $curw))
    return 0
}

# ZSH completion command
function _compzsh {
    reply=($(_l))
}


if [ $ZSH_VERSION ]; then
  compctl -K _compzsh gt
else
  shopt -s progcomp
  complete -F _comp gt
fi

安装:

  1. git clone git@github.com:huangbowen521/gtShell.git 或者直接拷贝 gt.sh文件内容。

  2. add gt.sh file path to your ~/.bash_profile or ~/.bashrc file

  3. reload your profile or restart your terminal

用例:

  • gt -a <bookmark_name> - 保存当前目录的标签为 给定的bookmark_name

  • gt -d <bookmark_name> - 删除给定的标签

  • gt -l - 列除所有标签

  • gt -h - 帮助信息

  • gt <bookmark_name> - 跳转到指定的标签目录

例子:

1
2
3
4
5
6
7
8
9
current_user:~$ cd sourcecode/study/
current_user:~/sourcecode/study$ gt -a study
current_user:~/sourcecode/study$ cd ~
current_user:~$ gt study
current_user:~/sourcecode/study$ gt -l
goAgent=/Users/twer/sourcecode/goagent/goagent-goagent-9c1edd3/local
octopress=/Users/twer/sourcecode/octopress
goShell=/Users/twer/sourcecode/shell/goShell
study=/Users/twer/sourcecode/study
1
2
3
4
5
current_user:~/sourcecode/study$ gt -d study
current_user:~/sourcecode/study$ gt -l
goAgent=/Users/twer/sourcecode/goagent/goagent-goagent-9c1edd3/local
octopress=/Users/twer/sourcecode/octopress
goShell=/Users/twer/sourcecode/shell/goShell
1
2
3
4
5
6
7
current_user:~/sourcecode/study$ gt -h
Usage:
-a <bookmark_name> - Saves the current directory as "bookmark_name"
-d <bookmark_name> - Deletes the bookmark
-l                 - Lists all available bookmarks
-h(-help,--help)   - Lists usage
<bookmark_name>    - Jump to the bookmark
1
2
3
current_user:~/sourcecode/study$ gt go<Tab>
goAgent  goShell
current_user:~/sourcecode/study$ gt goShell

Comments