使用说明
vimobj [name] [todo]
name 工程名
todo 动作:update clean config
update 更新工程符号表并打开vim
clean 清理工程
config 创建/配置工程
配置
name 工程名
runPath vim启动路径
fileDir 工程文件路径,注意:每一条后面加空格
例子
name="ngnix"
runPath="/home/jczhang/src/nginx/nginx-1.14.2/src"
filePath="/home/jczhang/src/nginx/nginx-1.14.2/src"
filePath+=" "
注意:filePath每一条后面都要添加空格
例子
vimobj 打开上一次配置的工程
vimobj ngnix 打开指定工程
vimobj ngnix update 指定工程更新符号表并打开
vimobj ngnix clean 清理指定工程
vimobj ngnix config 创建/配置指定工程
依赖插件:sed、cscope、ctags
脚本实现
1、创建工程目录,进入
mdkdir VimObject
cd VimObject
2、创建vimobj文件,添加可执行权限
touch vimobj
chomd +x vimobj
3、创建配置模板文件.configure
touch .configure
4、创建固定模板文件.template
touch .template
5、添加当前目录到环境变量,这句仅当前终端有效
export PATH=$PATH:/home/jczhang/VimObject
6、分别加入以下代码就可以根据使用说明使用了
vimobj代码
#!/bin/bash
##################初始化全局变量区#################
#获取文件绝对路径
if [ $(echo $0 | grep '^/') ]; then
g_rootPath=$(dirname $0)
else
g_rootPath=$(pwd)/$(dirname $0)
fi
g_paramNum=$#
g_name=$1
g_todo=$2
##################函数定义区###########################
CheckParameters()
{
paramNum=$1
name=$2
todo=$3
if [ $paramNum -eq 0 ]; then
echo "please input object name. like:"
echo " vimobj name"
exit
fi
# grep "name=" .configure | grep $name > /dev/null
# if [ $? -eq 1 ]; then # 为1表示没有这个name
# if [ ! -d $name ]; then
# echo "input error"
# exit
# fi
# fi
if [ $paramNum -gt 1 ]; then
if [[ "$todo" != "update" && "$todo" != "clean" && "$todo" != "config" ]]; then
echo "input todo error"
exit
fi
fi
}
CreateObject()
{
name=$1
if [ ! -d $name ]; then
mkdir -p $name
touch $name/run.sh
chmod +x $name/run.sh
sed -i "s/name=\".*\"/name=\"${name}\"/g" .configure
cp .configure $name/configure
return
fi
}
ObjectConfig()
{
name=$1
vim $name/configure
echo "name=\"$name\"" > $name/run.sh
cat $name/configure >> $name/run.sh
echo "g_rootPath=$g_rootPath" >> $name/run.sh
cat .template >> $name/run.sh
exit
}
RunOldObject()
{
name=`grep "name=\"" .configure`
if [ "$name" == "name=\"\"" ]; then
echo "nothing object"
fi
name=${name#*\"}
name=${name%*\"}
if [ ! -d $name ]; then
echo "nothing object"
fi
$name/run.sh
exit
}
Clean()
{
name=$1
rm -rf $name
exit
}
main()
{
paramNum=$1
name=$2
todo=$3
cd $g_rootPath
if [ $paramNum -eq 0 ]; then
RunOldObject
fi
CheckParameters $paramNum $name $todo
if [ "$todo" == "clean" ]; then
Clean $name
fi
CreateObject $name
if [ "$todo" == "config" ]; then
ObjectConfig $name
fi
$name/run.sh $todo
}
################函数调用区###################
main $g_paramNum $g_name $g_todo
.configure代码
name="ngnix"
runPath="/home/jczhang/src/nginx/nginx-1.14.2/src"
filePath="/home/jczhang/src/nginx/nginx-1.14.2/src"
filePath+=" "
.template代码
g_todo=$1
cd $g_rootPath/$name
CscopeInit()
{
if [ "$g_todo" != "update" ]; then
return
fi
ctags -R $filePath
find $filePath -name "*.[ch]" -o -name "*.cpp" > cscope.files
cscope -Rbq
}
CscopeInit
vim $runPath
exit 0