介绍这款神器之前,先来确认一个问题。在 Linux 的使用过程中,如何快速地到达指定目录?
很多人肯定会说,使用 tab 补全大法啊,笨!
嗯,没错,在没认识到 autojump 之前,我也是这么想的,但熟悉使用过这款神器后,才明白什么叫所达即所想。也就是无需考虑中间还有多少层目录,你只需要记住最终目录的名称,就可以快速进入该目录……

安装 autojump

要安装 autojump,得先安装 epel 源:

  1. sudo yum isntall epel-release;
  2. sudo yum install autojump;

初次安装完成后,执行命令可能会报以下错误:

  1. [u@host ~]$ autojump
  2. Please source the correct autojump file in your shell's
  3. startup file. For more information, please reinstall autojump
  4. and read the post installation instructions.

退出用户重新登录就可以了。
配置完成后,执行 autojump 或者 j 没有报错就说明安装成功:

  1. [u@host ~]$ autojump
  2. .
  3. [u@host ~]$ j
  4. .

在 Mac 中,由于不能使用 root 权限执行安装,autojump 的环境信息没有加入到环境变量。导致即使退出重登也无法生效。刚开始我也百思不得其解,以为是程序有问题,直到在 reinstall 的过程中,我看到了以下提示:

  1. Add the following line to your ~/.bash_profile or ~/.zshrc file (and remember
  2. to source the file to update your current session):
  3. [ -f /usr/local/etc/profile.d/autojump.sh ] && . /usr/local/etc/profile.d/autojump.sh
  4. If you use the Fish shell then add the following line to your ~/.config/fish/config.fish:
  5. [ -f /usr/local/share/autojump/autojump.fish ]; and source /usr/local/share/autojump/autojump.fish
  6. zsh completions have been installed to:
  7. /usr/local/share/zsh/site-functions

原来需要手动添加 autojump 的环境信息到用户的环境变量,autojump 才会生效。So,那就加起来:

  1. # 当前用户下生效
  2. echo "[ -f /usr/local/etc/profile.d/autojump.sh ] && . /usr/local/etc/profile.d/autojump.sh" >> ~/.bash_profile
  3. # 所有用户下生效
  4. sudo sh -c 'echo "[ -f /usr/local/etc/profile.d/autojump.sh ] && . /usr/local/etc/profile.d/autojump.sh" >> /etc/profile'

autojump 使用

安装完成后,就可以使用 autojump 或者 j 命令快速调到指定目录,前提是这个目录在安装完 autojump 后进去过。

  1. [hzz@magedu ~]$ cd /var/www/html/
  2. [hzz@magedu html]$ cd
  3. [hzz@magedu ~]$ pwd
  4. /home/hzz
  5. [hzz@magedu ~]$ j html
  6. /var/www/html
  7. [hzz@magedu html]$ pwd
  8. /var/www/html
  9. [hzz@magedu html]$

甚至于只输入部分字符,就可以进入指定目录,比如:

  1. [hzz@magedu ~]$ pwd
  2. /home/hzz
  3. [hzz@magedu ~]$ j htm
  4. /var/www/html
  5. [hzz@magedu html]$ pwd
  6. /var/www/html
  7. [hzz@magedu html]$

输入部分字符后,如果不确定目录是否被收录或识别,按一次 tab,就会出现补全提示,也就是能否从 autojump 中找到记录,字符后面出现 __ 则表示找到记录;如果没有反应,则说明未找到记录,需要手动进入该目录以便收录。(若未找到记录,而按回车的话,默认会进入当前目录。)

  1. [hzz@magedu ~]$ j h__
  2. /var/www/html
  3. [hzz@magedu html]$ j x
  4. .
  5. [hzz@magedu html]$

如果默认进入的目录不是你想要的目录,可以在出现 __ 后再连按两次 tab,这样就会出现候选项,选择需要进入的目录编号进入即可:

  1. [hzz@magedu ~]$ j h__
  2. h__1__/var/www/html h__3__/home/hzz/htm h__5__/home/hzz/html h__7__/home/hzz/htm
  3. h__2__/home/hzz/html h__4__/var/www/html h__6__/home/hzz/wwww
  4. [hzz@magedu ~]$ j h__3
  5. /home/hzz/htm
  6. [hzz@magedu htm]$ pwd
  7. /home/hzz/htm
  8. [hzz@magedu htm]$

类似输入法,哪个目录最常进入,说明权重越高(权重可手动调节),就越靠前,直至默认。

autojump 进阶

若是没有特殊要求,上面所说的应该能满足日常使用了,但是通过 j --help,我们可以看到 autojump 还提供了几个参数方便我们使用。

  1. [hzz@magedu html]$ j --help
  2. usage: autojump [-h] [-a DIRECTORY] [-i [WEIGHT]] [-d [WEIGHT]] [--complete]
  3. [--purge] [-s] [-v]
  4. [DIRECTORY [DIRECTORY ...]]
  5. Automatically jump to directory passed as an argument.
  6. positional arguments:
  7. DIRECTORY directory to jump to
  8. optional arguments:
  9. -h, --help show this help message and exit
  10. -a DIRECTORY, --add DIRECTORY
  11. add path
  12. -i [WEIGHT], --increase [WEIGHT]
  13. increase current directory weight
  14. -d [WEIGHT], --decrease [WEIGHT]
  15. decrease current directory weight
  16. --complete used for tab completion
  17. --purge remove non-existent paths from database
  18. -s, --stat show database entries and their key weights
  19. -v, --version show version information
  20. Please see autojump(1) man pages for full documentation.

下面我们就来说说各参数的用法。
j -a DIRECTORY 添加目录,即不用进入目录,即可将目录添加进 autojump 记录。

  1. [hzz@magedu html]$ j et
  2. .
  3. [hzz@magedu html]$ j -a /etc/
  4. [hzz@magedu html]$ j et
  5. /etc
  6. [hzz@magedu etc]$ pwd
  7. /etc

j -s 查看各目录权重,并查看数据信息。
j -i [WEIGHT] 添加权重,权重越高,该目录的优先级就越高。
j -d [WEIGHT] 减少权重,权重越低,该目录的优先级越低。
j --complete 查看关键字的候选项,常用双击 tab 代替。
j --purge 清理 autojump 记录里面那些已不存在的目录数据。

  1. [u@host ~]$ pwd
  2. /home/hzz
  3. [u@host ~]$ rm -rf wwww
  4. [u@host ~]$ j ww__
  5. ww__1__/home/hzz/wwww ww__3__/home/hzz/wwww ww__5__/var/www/html ww__7__/var/www
  6. ww__2__/var/www ww__4__/var/www ww__6__/home/hzz/wwww
  7. [u@host ~]$ j ww__
  8. # 可以看到,即使 wwww 目录已经被删除,但是候选项里面还是会出现 /home/hzz/wwww 目录,这时就可以使用 j --purge 进行清理。建议设定 crontab 定期自动清理。
  9. [u@host ~]$ j --purge
  10. Purged 1 entries.
  11. [u@host ~]$ j ww__
  12. ww__1__/var/www ww__2__/var/www ww__3__/var/www/html ww__4__/var/www
  13. [u@host ~]$ j ww__

好了,这款神器就介绍到这。总之,有了这款神器后,效率提高了不少,比如,当我需要发布博客时,只需要很少的步骤即可进入发布目录,比建软连接还快。

  1. Hzzs-MacBook-Pro:~ hzz$ j h
  2. /Users/hzz/MyBlog/Hexo
  3. Hzzs-MacBook-Pro:Hexo hzz$ hexo d -g
  4. INFO Start processing
  5. INFO Files loaded in 2.64 s
  6. ...

Have fun!