source insight 宏进阶功能

当你使用SI,想进入源文件的路径时,不好意思没有打开文件路径功能,
你是不是要先打开资源管理器,然后一路从盘符,点到子文件夹.孙文件夹...最后再到工程文件夹,而且要一直对比有没有点错,找到对应源代码的时候,是否有一种黄花菜都凉的感觉,而且每天都在重复这个动作,这是在强制摸鱼,下面会介绍一键打开路径并定位到文件的神奇操作,就是这么快
当你想快速注释掉一段代码或者取消注释时是不是要手动去加注释符号,取消时还要手动取消,如果看到一大段//的注释是不是要一行行地去取消,不用这么麻烦,下面会介绍三种不同的注释
你是不是常碰到复制SI的中文到其他地方乱码,那就试试一键使用++打开吧,再复制没有乱码了
你是不是碰到代码打着打着突然,右边的界面就僵住了,不管怎么上下滚动,只有看到左边的代码,右边的被截断了,都是拖影,主代码窗口出现了,内容查看的窗口也出现了,一般情况是关掉再重新打开就可以消除这个情况,一直不断的重复,思路都被打断,灵感都消失了,怎么办
试试(),这个宏的原理就是关掉窗口,再打开,由于缓冲区是旧的,所以连撤销数据还在,同时其他小窗口也通过开关刷新了下
既然能打开其他应用程序,所以当然也想到了打开命令行,并定位到源文件路径上,也可以打开命令行定位到工程路径上,(工程路径组织如下)一般在工程要目录下存放编译批处理,直接调用可以通过编译整个工程
//工程路径一般以SI或si工程文件夹名,上一级工程路径
//要求工程路径这样 //....
///si/mysi.PR
既然能打开命令行,打开git的话也不例外,当然要自己修改路径到你本机上的软件路径,并且要把\改成\\,下面有打开工程git,打开查看差异,查看历史,查看与上一版差异等
宏汇总如下
1.注释是SI短板,通过宏扩展增加了注释与解除注释的快捷键
a.单行注释//
b.多选注释/*....*/
c.宏注释#if 0 ... #endif
d.插入宏XFLAG
2.路径定位功能a.打开命令行定位到当前文件路径/打开命令行定位到工程(.PR)路径,凡是以si,SI为工程的路径则定位命令行到上一级
b.打开资源文件夹,定位到当前文件
3.使用++打开当前文件,需要指定你的电脑上的++路径,路径\要用\\代替
4.解决界面只显示一半源文件问题,原理是先关掉文件窗口,再重新打开防止界面错乱界面重新刷新,实测不影响未保存内容,ALT+R
5.切换当前源文件的同一目录下同名的.h 与.c /.cpp
6.GIT功能调用
通过/key 绑定快捷键来调用macro:
下载地址
链接:
【source insight 宏进阶功能】 //取得以SI或si工程文件夹的工程路径,上一级工程路径//要求工程proj_folder/proj_top_dir/....//proj_folder/si/mysi.PRmacro xzy_get_proj_dir(){buf = GetCurrentProj();dir = GetProjDir(buf);cch = strlen(dir);proj_top_dir=nil;dir1=nilif(cch>3){if((dir[cch-2]=="s" && dir[cch-1]=="i" ) || (dir[cch-2]=="S" && dir[cch-1]=="I" )){dir1=strtrunc(dir,cch-3) }}if(dir1 != nil){dir=dir1buf = GetCurrentBuf();curFilePath = GetBufName(buf);cch_current_file = strlen(curFilePath);cch_top_dir=strlen(dir)min=cch_current_file;if(cch_current_file >cch_top_dir){min=cch_top_dir}idx=0;while(idx0){if(curFilePath[i]=="\\"){dir=strtrunc(curFilePath,i)cmdLine = "cmd /k cd /d \"@dir@\"";StartMsg("Wait opening file...")RunCmdLine(cmdLine, nil, 0);EndMsg()break;}i= i-1}}//在命令行打开工程文件路径,ALT+Wmacro xzy_open_cmd_at_proj_dir() //open cmd.exe and cd to project dir{buf = GetCurrentProj();dir = GetProjDir(buf);cch = strlen(dir);dir1=nilif(cch>3){//以si,SI为路径则取上一级路径if((dir[cch-2]=="s" && dir[cch-1]=="i")||(dir[cch-2]=="S" && dir[cch-1]=="I")){dir1=strtrunc(dir,cch-3)}}if(dir1 != nil){dir=dir1}cmdLine = "cmd /k cd /d \"@dir@\"";StartMsg("Wait opening file...")RunCmdLine(cmdLine, nil, 0);EndMsg()}//先关掉文件再重新打开防止界面错乱,ALT+Rmacro xzy_reopen_file_and_jump_line(){hwnd = GetCurrentWnd()selection = GetWndSel(hwnd)line =GetWndVertScroll(hwnd)buf = GetCurrentBuf();curFilePath = GetBufName(buf);CloseWnd(hwnd)OpenMiscFile(curFilePath)hwnd = GetCurrentWnd()ScrollWndVert(hwnd, line)//ScrollWndToLine(hwnd,line)此语句会移动到第一行//以下两句自动关闭symbol windowRunCmd("Activate Symbol Window");//active force to showRunCmd("Symbol Window");//hide//以下两句自动关闭open fileRunCmd("Activate Project Window");//active force to showRunCmd("Project Window");//hide//以下关掉再显示Context WindowRunCmd("Activate Context Window");//active force to showRunCmd("Context Window");//hideRunCmd("Context Window");//show again//以下关掉再显示Relation WindowRunCmd("Activate Relation Window");//active force to showRunCmd("Relation Window");//hideRunCmd("Relation Window");//show again}//使用notepad++打开当前文件,防止source insight复制中文乱码,ALT+Tmacro xzy_open_file_with_notepad(){buf = GetCurrentBuf();curFilePath = GetBufName(buf);//cmdLine = "D:\\software\\NOTPAD7\\notepad++.exe \"@curFilePath@\"";cmdLine = "D:\\soft\\notepad\\notepad++.exe \"@curFilePath@\"";StartMsg("Wait opening file...")RunCmdLine(cmdLine, nil, 0);EndMsg()}//切换源文件与头文件,ALT+Cmacro xzy_open_switch_src_and_h_file(){hcurrentbuf = getcurrentbuf()bname = getbufname(hcurrentbuf)len = strlen(bname)if(".cpp" == tolower(strmid(bname, len-4, len))){filename = strmid(bname, 0, len-4)#".h"}else if(".c" ==tolower( strmid(bname,len-2,len))){filename = strmid(bname, 0, len-2)#".h"}else if(".h" ==tolower(strmid(bname, len-2, len))){cpp_name= strmid(bname, 0, len-2)#".cpp"c_name=strmid(bname,0,len-2)#".c"hit_cpp= openbuf(cpp_name)hit_c = openbuf(c_name)if(hit_cpp !=hnil){setcurrentbuf(hit_cpp)}else if(hit_c !=hnil){setcurrentbuf(hit_c)}stop}else{filename = nil}if(filename != nil){hbufnext = openbuf(filename)if(hbufnext != hnil){setcurrentbuf(hbufnext)}}}//在我的电脑中打开当前文件夹并选择,ALT+Dmacro xzy_open_in_exporer_and_select(){buf = GetCurrentBuf();file = GetBufName(buf);cmdLine = "explorer.exe /select,@file@"; //@file@ 在字符串中引用变量 StartMsg("wait...")RunCmdLine(cmdLine, nil, 0);EndMsg()}//将选择的行添加一个双斜杠//注释,CTRL+/macro xzy_double_slash_add(){hwnd = GetCurrentWnd()selection = GetWndSel(hwnd)LnFirst = GetWndSelLnFirst(hwnd)//取首行行号LnLast = GetWndSelLnLast(hwnd)//取末行行号hbuf = GetCurrentBuf()if(GetBufLine(hbuf, 0) == "//magic-number:tph85666031"){stop}Ln = Lnfirstbuf = GetBufLine(hbuf, Ln)len = strlen(buf)while(Ln