[TOC]
## 快捷进入文件夹
使用linux有时候会经常进入到某些文件夹,用cd比较影响效率,我使用的shell是fish shell,于是使用fish 写了一个直接进入文件夹的函数,并且这是一个模板,之后比如要做直接打开网页,直接打开问价夹都可以使用这个模板修改很快实现,并且不存在什么移植困难的问题! <br/>
fish自定义函数放置在`~/.config/fish/functions/`下面,这个下面以.fish结尾的文件是在fish初始化时会自定加载的,类似与bash的bashrc文件。 <br/>
写的这个fish函数命名为`cdd.fish`,在fish shell下加载后,对应的命令就是`cdd`,源码如下:
```sh
#!/usr/bin/env fish
#UFUNCTION=第二代cdd
function cdd
#+++++++++++++++ 参数设置 +++++++++++++++++++
set dir "/home/yhp/.config/fish/functions"
set cmd_name "cdd" #本函数的外部调用指令,需保持文件名为 cmd_name.fish 函数名为 cmd_name
set insert_cmd "cd" #函数实际的执行主要指令 -进入指定文件夹
#++++++++++++ end 参数设置 ++++++++++++++++++
set fd "/tmp/$cmd_name.db"
if not test -f $fd
set file "$dir/$cmd_name.fish"
set db (grep -n "#~~~~~~#" $file | cut -d':' -f1 | tail -n1)
set db (math $db + 1)
cat $file | tail -n +$db >$fd
end
#cat $fd
if test -z $argv[1] #空参数 刷新一次命令数据
set file "$dir/$cmd_name.fish"
set db (grep -n "#~~~~~~#" $file | cut -d':' -f1 | tail -n1)
set db (math $db + 1)
cat $file | tail -n +$db >$fd
echo "使用 $cmd_name -help查看支持的参数"
else if test $argv[1] = "-help"
sed -i "s/#//g" $fd #删除文本中的 "#"
echo "Usage: $cmd_name [option]"
echo
cat $fd | awk '{print $1,$2}' | column -s \ -t
echo
else if test $argv[1] = "-refresh"
set file "$dir/$cmd_name.fish"
set db (grep -n "#~~~~~~#" $file | cut -d':' -f1 | tail -n1)
set db (math $db + 1)
cat $file | tail -n +$db >$fd
echo "指令刷新完成,请使用 $cmd_name -help 查看最新指令"
echo
else
set cmd "awk '/#$argv[1]/{print $1}' $fd"
set st (eval $cmd)
if test -z $st #没有匹配的参数,刷新一次命令数据,并提示
set file "$dir/$cmd_name.fish"
set db (grep -n "#~~~~~~#" $file | cut -d':' -f1 | tail -n1)
set db (math $db + 1)
cat $file | tail -n +$db >$fd
echo "使用 $cmd_name -help查看支持的参数"
else
#echo $st
set ur (echo $st | cut -d' ' -f3)
set cmd "$insert_cmd $ur"
eval $cmd # >/dev/null ^/dev/null &
pwd
end
end
return
end
###### 按照下面的格式,将会自动读取下面的内容,方便添加内容 ########
#~~~~~~#
#-help 显示帮助
#-refresh 刷新指令缓存(每次添加指令后执行一次) #该行以下可修改
#tmp 进入个人tmp文件夹(每次登录会被清空) /home/yhp/data/tmp
#data 进入个人数据文件夹 /home/yhp/data
#note 进入看云笔记路径 /home/yhp/data/kancloud/note2020
```