使用pushd快速切换工程目录与源码目录

时间:2021-07-11 15:44:06

平时使用vim时一般使用vimsession打开工程, 为图方便vimsession与源码不放在一个目录, 当需要shell访问文件时需要手动cd到源码目录(虽然可以vim里调用外部shell来解决, 但编译时还是不方便).
比如工程目录在~/workspace, 源码目录在~/source, 当从vim切换到shell后需先cd ../source才能执行命令, 不同工程还要记不同目录, 实在麻烦.
最近学会pushd命令后发现方便的解决这个问题的方法, 先上代码(在.bashrc中添加):

 1 export WORKSPACE=/home/h03566/tempfile/workspace 
 2 if [ "$(basename $(pwd))" == "product" ]; then 
 3     pushd $(pwd) 
 4     pushd $WORKSPACE 
 5 else 
 6     if [ -d $(pwd)/product -a -d $(pwd)/build ]; then 
 7         pushd $(pwd)/product 
 8         pushd $WORKSPACE 
 9     else 
10         pushd $WORKSPACE 
11     fi 
12 fi 

 

pushd命令不赘述了, man一下就知道, 解释下工作原理:
在vim中执行:sh时实际新开一个shell, 但该shell继承的是vim的工作目录, 而vim的工作目录是由vimsession指定的(我一般设置为工程主目录方便ctags与cscope).
所以新开shell在执行bashrc时会先将工程主目录入栈, 在切换到工作空间(我放vimsession的地方), 两个目录之间只需pushd即可直接切换.
而默认的ssh登录时使用~目录, 则只会将工作空间入栈, 所以执行:q退出vim或ssh一个新shell只会在~与工作空间之间切换.
由于我切shell一般是为了编译, 而编译目录与cscope目录不一致, 所以这里额外在判断下.

自从用了pushd都不知道cd怎么用了~~~