搜索
bottom↓
回复: 49

分享一个source insight的宏

  [复制链接]

出0入0汤圆

发表于 2014-1-8 11:45:10 | 显示全部楼层 |阅读模式
本帖最后由 tinyabao 于 2014-1-8 20:17 编辑

分享一个source insight的宏,这是我目前使用的,里面的函数由个人编写、修改和整理而来,希望对大家有帮助,也感谢代码中引用一些函数的作者。
有些宏的功能参照eclipse而来,eclipse也是很赞的编辑器。

使用说明宏中有,贴出部分说明:

  1. /******************************************************************************
  2. * 功能:                              Source Insight常用宏
  3. *        
  4. * 文件:  BaoUtils.em
  5. *        
  6. * 说明:  1. 修改第一个宏GetName,将名字改为自己的,注意双引号不能删除
  7. *        2. 运行Soucre Insight,打开Base工程,将BaoUtils.em加入到工程中
  8. *        3. 打开Soucre Insight的Options的Key Assignments菜单,在Command窗口中输入字母"M",选择Macro: BaoHelp
  9. *           单击Assign New Key对其赋一个热键,例如 ALT + ~ ( ~ 为键ESC下面的键)
  10. *        4. 在 c或h 源文件按 ALT + ~ ,即可出现帮助宏的效果, 请参照帮助设其他宏快捷键
  11. *        5. 打开Soucre Insight的Options的Document Options, Tab Width设 4
  12. *        
  13. * 历史:  V1.2                 1. 加入BaoDeleteSelectLine
  14. *                                2. 加入BaoShiftEnter       
  15. *                                3. 修改BaoIf BaoFor BaorWhile BaoSwitch在内容前填充空格或tab
  16. *                                4. 修改BaoNewFileH的 "#define @szDefineCase@_EXTERN" 为 "#define @szDefineCase@_EXT"
  17. *                                5. BaoNewFileH加入定义变量示例,方便复制
  18. *                                6. 修改分割线一行最多为80个字符,以符合国际标准
  19. *        
  20. * 作者:  BlackCoal  3/23/2012
  21. ******************************************************************************/
  22. macro GetName()
  23. {
  24.         szMyName = "BlackCoal"
  25.         return szMyName
  26. }

  27. // 【帮助】
  28. macro BaoHelp()
  29. {
  30.         hbuf = GetCurrentBuf();                // 获得光标所在的所有内容
  31.         ln = GetBufLnCur(hbuf)
  32.         lnFirst = ln
  33.         InsBufLine(hbuf, ln++, "/*************************** BaoUtils.em 使用帮助 ***************************/");
  34.         InsBufLine(hbuf, ln++, "        #define ALT                // 用于ALT和CTRL颜色区别");
  35.         InsBufLine(hbuf, ln++, "        void CTRL();");       
  36.         InsBufLine(hbuf, ln++, "        #define SHIFT");       
  37.         InsBufLine(hbuf, ln++, "/* ------------------------------- 快捷键 ---------------------------------- */");
  38.         InsBufLine(hbuf, ln++, "                // 左ALT");
  39.         InsBufLine(hbuf, ln++, "        ALT + ~                // 【帮助】                                       BaoHelp");               
  40.         InsBufLine(hbuf, ln++, "        ALT + 1                // 【#if 0        #endif】  屏蔽多行            BaoIf0");               
  41.         InsBufLine(hbuf, ln++, "        ALT + 2                //  去掉多行屏蔽【#if 0        #endif (也可以去掉选中的 头尾 行)】           BaoUnIf0");               
  42.         InsBufLine(hbuf, ln++, "        ALT + 3                // 【                // 】, //前两个tab键,用于在代码行的 右边 插入行注释            BaoCommentLine");       
  43.         InsBufLine(hbuf, ln++, "        ALT + 4                // 【插入一空行,下一行        // 】, 用于在代码段的 上方 插入块注释              BaoCommentBlock");               
  44.         InsBufLine(hbuf, ln++, "                // 右ALT");
  45.         InsBufLine(hbuf, ln++, "        ALT + 5                // 【printf(有__MODULE__)】,自己加入模块前缀                     BaoPrintfM");       
  46.         InsBufLine(hbuf, ln++, "        ALT + 6                // 【printf()】,自己加入模块前缀                                            BaoPrintf");               
  47.         InsBufLine(hbuf, ln++, "        ALT + 7                // 【switch()】                                BaoSwitch");               
  48.         InsBufLine(hbuf, ln++, "        ALT + 8                // 【while() {        }】                             BaoWhile");               
  49.         InsBufLine(hbuf, ln++, "        ALT + 9                // 【for()】                                    BaoFor");               
  50.         InsBufLine(hbuf, ln++, "        ALT + 0                // 【if()】                                       BaoIf");               
  51.         InsBufLine(hbuf, ln++, "                // 左CTRL");
  52.         InsBufLine(hbuf, ln++, "        CTRL + 1        // 【#if 编译的条件        #endif】                  BaoIfDef");               
  53.         InsBufLine(hbuf, ln++, "        CTRL + 2        // 【函数头说明】 请将光标放在 函数头(如:int main() )或函数内 的任意地方         BaoFunHead");               
  54.         InsBufLine(hbuf, ln++, "        CTRL + 3        // 【函数头说明历史】 请将光标放在 函数头(如:int main() )或函数内 的任意地方         BaoFunHistory");               
  55.         InsBufLine(hbuf, ln++, "                // 右CTRL");
  56.         InsBufLine(hbuf, ln++, "        CTRL + 7        // 【新的 c 文件】                                          BaoNewFileC");               
  57.         InsBufLine(hbuf, ln++, "        CTRL + 8        // 【新的 h 文件】                                            BaoNewFileH");               
  58.         InsBufLine(hbuf, ln++, "        CTRL + 9        //  去掉 // 屏蔽多行                                         BaoSlashUnMask");               
  59.         InsBufLine(hbuf, ln++, "        CTRL + 0        //  用 // 屏蔽多行【// int i = 0;】                       BaoSlashMask");               
  60.         InsBufLine(hbuf, ln++, "                // 其他");
  61.         InsBufLine(hbuf, ln++, "        CTRL + D        // 【删除选中的行】                                            BaoDeleteSelectLine");               
  62.         InsBufLine(hbuf, ln++, "        ALT + D                // 【退格键】                                             BaoSuperBackspace");               
  63.         InsBufLine(hbuf, ln++, "        SHIFT + ENTER        // 【插入一行】                                          BaoShiftEnter");               
  64.         InsBufLine(hbuf, ln++, "/* -------------------------------- 备注 ----------------------------------- */");
  65.         InsBufLine(hbuf, ln++, "// 作者: BlackCoal 3/23/2012");
  66.         InsBufLine(hbuf, ln++, "// 说明: 此帮助宏为了查看快捷键,使用此宏后撤销。可以按这种去分配宏,也可以DIY。");
  67.         InsBufLine(hbuf, ln++, "//       建议TAB键为 4 个空格! ");
  68.         InsBufLine(hbuf, ln++, "/*****************************************************************************/");
  69. }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2014-1-8 11:49:16 | 显示全部楼层
楼主,怎么用啊

出0入0汤圆

 楼主| 发表于 2014-1-8 11:53:08 | 显示全部楼层

1. 修改第一个宏GetName,将名字改为自己的,注意双引号不能删除
2. 运行Soucre Insight,打开Base工程,将BaoUtils.em加入到工程中
3. 打开Soucre Insight的Options的Key Assignments菜单,在Command窗口中输入字母"M",选择Macro: BaoHelp
      单击Assign New Key对其赋一个热键,例如 ALT + ~ ( ~ 为键ESC下面的键)
4. 在 c或h 源文件按 ALT + ~ ,即可出现帮助宏的效果, 请参照帮助设其他宏快捷键
5. 打开Soucre Insight的Options的Document Options, Tab Width设 4

出0入0汤圆

发表于 2014-1-8 14:06:34 | 显示全部楼层
我来按照楼主说的试试效果是什么

出0入0汤圆

 楼主| 发表于 2014-1-8 14:25:38 | 显示全部楼层
hunxiyi 发表于 2014-1-8 14:06
我来按照楼主说的试试效果是什么

效果如附件

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-1-8 14:51:39 | 显示全部楼层
看起来好像很不错
记录一下,下次试试

出0入0汤圆

发表于 2014-1-8 15:03:27 | 显示全部楼层
很强大的宏啊

出0入0汤圆

发表于 2014-1-8 15:10:17 | 显示全部楼层
  1. // 【        // 】, //前一个tab键,用于在代码段的 上方 插入行注释
  2. macro BaoCommentBlock()
  3. {
  4.         hbuf = GetCurrentBuf();                // 获得光标所在的所有内容
  5.         ln = GetBufLnCur(hbuf)               
  6.         szLineGet = GetBufLine(hbuf, ln);
  7.        
  8.         InsBufLine(hbuf, ln + 0, szLineGet)       
  9.         szLine = cat(szLineGet, "        // " );        // /*好前面是两个tab键
  10.         PutBufLine(hbuf, ln + 1, szLine);
  11.         SetBufIns( hbuf, ln + 1, strlen(szLineGet) + strlen( "        // ") )         // 定光标位置,/*好前面是两个tab键
  12. }
复制代码



楼主,有个问题想请你帮忙
我想要这函数实现的功能是:例如我的鼠标在100行,然后按这个函数的快捷键,99行以下的内容都下移一行,此时的100行写上//
不知道你懂我的意思没有,反正在vim里面有个插件就实现了这个功能

但你现在这个函数的功能好像是复制所在行的内容 并在这行后面加上//

我也不会修改,尝试了几下都错误,请问你能帮忙修改一下啊实现我说的这个功能吗,谢谢了

出0入0汤圆

发表于 2014-1-8 15:39:58 来自手机 | 显示全部楼层
good 谢谢分享

出0入0汤圆

发表于 2014-1-8 15:43:49 来自手机 | 显示全部楼层
有空试下,多谢分享

出0入0汤圆

 楼主| 发表于 2014-1-8 15:51:59 | 显示全部楼层
hunxiyi 发表于 2014-1-8 15:10
楼主,有个问题想请你帮忙
我想要这函数实现的功能是:例如我的鼠标在100行,然后按这个函数的快捷键 ...

这种效果?

  1. macro BaoCommentBlock()
  2. {
  3.         hbuf = GetCurrentBuf();                // 获得光标所在的所有内容
  4.         ln = GetBufLnCur(hbuf)               
  5.         szLineGet = GetBufLine(hbuf, ln);
  6.        
  7.         InsBufLine(hbuf, ln + 0, "        // ")       
  8.         szLine = cat(szLineGet, "        // " );        // /*好前面是两个tab键
  9. //        PutBufLine(hbuf, ln + 1, szLine);
  10.         SetBufIns( hbuf, ln + 0, strlen(szLineGet) + strlen( "        // ") )         // 定光标位置,/*好前面是两个tab键
  11. }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2014-1-8 16:04:45 | 显示全部楼层
hunxiyi 发表于 2014-1-8 15:10
楼主,有个问题想请你帮忙
我想要这函数实现的功能是:例如我的鼠标在100行,然后按这个函数的快捷键 ...

这种?

  1. macro BaoCommentBlock()
  2. {
  3.         hbuf = GetCurrentBuf();                // 获得光标所在的所有内容
  4.         ln = GetBufLnCur(hbuf)               
  5.         szLineGet = GetBufLine(hbuf, ln);
  6.        
  7.         InsBufLine(hbuf, ln + 0, "")       
  8.         szLine = cat(szLineGet, "        // " );        // /*好前面是两个tab键
  9.         PutBufLine(hbuf, ln + 1, szLine);
  10.         SetBufIns( hbuf, ln + 1, strlen(szLineGet) + strlen( "        // ") )         // 定光标位置,/*好前面是两个tab键
  11. }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-1-8 17:02:31 | 显示全部楼层

出0入0汤圆

发表于 2014-1-8 17:14:33 | 显示全部楼层
本帖最后由 hunxiyi 于 2014-1-8 17:31 编辑


就是11楼这一种  

但是能不能这个//出现后是跟int对齐的,不要退后4个空格??
就是\\跟他下面第一行语句是对齐的
那函数我实在是看不懂,改到最后直接报错用不了

出0入0汤圆

发表于 2014-1-8 17:16:03 | 显示全部楼层
貌似有强大……

出0入0汤圆

发表于 2014-1-8 17:21:35 | 显示全部楼层
还可以这么用啊,
我确实out了
感谢楼主分享。

出0入0汤圆

 楼主| 发表于 2014-1-9 09:56:08 | 显示全部楼层
各位有什么好的宏

出0入0汤圆

发表于 2014-1-9 10:45:07 | 显示全部楼层
tinyabao 发表于 2014-1-9 09:56
各位有什么好的宏

朋友,能帮我在11楼那效果的基础上再微调一下吗


能不能这个//出现后是跟int对齐的,不要退后4个空格??
就是\\跟他下面第一行语句是对齐的
那函数我实在是看不懂,改到最后直接报错用不了

出0入0汤圆

发表于 2014-1-9 10:46:55 | 显示全部楼层
tinyabao 发表于 2014-1-9 09:56
各位有什么好的宏

我用的宏库是在网上下载的一个压缩包
叫“Source Insight宏库”

不过只用了其中一个宏,HC文件切换功能,感觉SI的宏用的时候都会有一点点卡

出0入0汤圆

发表于 2014-1-9 11:10:52 | 显示全部楼层
mark

出0入0汤圆

发表于 2014-1-9 11:33:23 | 显示全部楼层
mark                                

出0入0汤圆

发表于 2014-1-9 11:34:51 | 显示全部楼层
谢谢楼主!
PS: 楼主的gif是用啥软件做的?

出0入0汤圆

 楼主| 发表于 2014-1-9 11:38:15 | 显示全部楼层
hunxiyi 发表于 2014-1-9 10:46
我用的宏库是在网上下载的一个压缩包
叫“Source Insight宏库”

能把源码分享下不,这个功能挺有用的,eclipse里就有。还有eclipse的cdt里还有许多很有用功能:
1.一键回到到最后一次修改的地方;
2.代码格式化;

出0入0汤圆

 楼主| 发表于 2014-1-9 11:45:31 | 显示全部楼层
chengpiaopiao 发表于 2014-1-9 11:34
谢谢楼主!
PS: 楼主的gif是用啥软件做的?

http://www.rssws.net/software.html

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2014-1-9 11:54:34 | 显示全部楼层
hunxiyi 发表于 2014-1-9 10:45
朋友,能帮我在11楼那效果的基础上再微调一下吗
  1. macro BaoCommentBlock()
  2. {
  3.         hbuf = GetCurrentBuf()                // 获得光标所在的所有内容
  4.         hwnd = GetCurrentWnd()
  5.         sel = GetWndSel(hwnd)

  6.         lnLast = sel.lnLast
  7.         space = _getStrSpace(hbuf, sel.lnLast)

  8.         szLine = cat(space, "// " )
  9.         ln = lnLast
  10.         InsBufLine(hbuf, ln, szLine)
  11.                        
  12.         SetBufIns( hbuf, ln , strlen(space) + strlen( "// ") )         // 定光标位置       
  13. }
复制代码

出0入0汤圆

发表于 2014-1-9 11:55:47 | 显示全部楼层
貌似有强大……

出0入0汤圆

发表于 2014-1-9 13:08:13 | 显示全部楼层
tinyabao 发表于 2014-1-9 11:38
能把源码分享下不,这个功能挺有用的,eclipse里就有。还有eclipse的cdt里还有许多很有用功能:
1.一键回 ...



代码格式化用Astyle就可以啊,可以在SI里面调用,但是我感觉功能一般般啊

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2014-1-9 14:39:32 | 显示全部楼层
hunxiyi 发表于 2014-1-9 13:08
代码格式化用Astyle就可以啊,可以在SI里面调用,但是我感觉功能一般般啊

...


也感谢你得分享,切换文件很好用。
eclipse的设置比较方便,也比较强大。

出0入0汤圆

发表于 2014-1-9 15:49:06 | 显示全部楼层
非常强大

出0入0汤圆

发表于 2014-1-9 16:15:27 | 显示全部楼层
不错的东西,谢谢分享

出0入0汤圆

发表于 2014-1-9 17:25:01 | 显示全部楼层
本帖最后由 chengpiaopiao 于 2014-1-9 17:26 编辑

感觉快捷键比较难记,可以这样做,先输入一个快捷键如:Ctrl+1, 弹出一个对话框,在对话框里输入命令如 ifh(insert file header),ip(insert printf),再根据命令来插入需要插入的东西。vim下就有这种插件

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2014-1-10 10:58:55 | 显示全部楼层
chengpiaopiao 发表于 2014-1-9 17:25
感觉快捷键比较难记,可以这样做,先输入一个快捷键如:Ctrl+1, 弹出一个对话框,在对话框里输入命令如 ifh ...

为了防止遗忘,我写了个BaoHelp的提示函数,只要不忘记这个,随时就可以知道快捷键对应什么。
个人觉得快捷键用多了也就记住了,您的方法反而使用起来比较麻烦,输入的速度没快捷键快。

出0入0汤圆

发表于 2014-1-10 11:29:12 | 显示全部楼层
show 一下Vim.
模板自动载入, 根据文件名自动添加头文件保护宏.
关键字补全.
函数原型提示.

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-1-10 12:48:25 | 显示全部楼层
SI什么都好,就是宏解析不行,导致代码提示功能过若,楼主在这个方面做贡献吧!!!

出0入0汤圆

发表于 2014-1-10 12:50:45 | 显示全部楼层
尤其是指向结构体和共用体的指针的宏解析完全没有

出0入0汤圆

发表于 2014-1-11 03:20:12 来自手机 | 显示全部楼层
强大!手动马克。
话说楼主知道打开工程路径有中文时报错怎么解决么

出0入0汤圆

发表于 2014-1-11 15:50:32 | 显示全部楼层
哇塞,楼主,你的这个动态的 gif 图片用啥弄的····

出0入0汤圆

发表于 2014-1-11 15:55:45 | 显示全部楼层
tinyabao 发表于 2014-1-9 11:45
http://www.rssws.net/software.html

看帖不仔细,原来 gif这么弄 的··SlickEdit ,楼主用过这个么?

出0入0汤圆

 楼主| 发表于 2014-1-13 10:43:22 | 显示全部楼层
minier 发表于 2014-1-10 12:48
SI什么都好,就是宏解析不行,导致代码提示功能过若,楼主在这个方面做贡献吧!!!
...

宏解析不是很强大么,您指的是哪方面的解析。最好能贴个图

出0入0汤圆

 楼主| 发表于 2014-1-13 10:44:56 | 显示全部楼层
DevLabs 发表于 2014-1-10 11:29
show 一下Vim.
模板自动载入, 根据文件名自动添加头文件保护宏.
关键字补全.

我驾驭GVIM就没你那么强大,赞一个!

出0入0汤圆

 楼主| 发表于 2014-1-13 10:52:55 | 显示全部楼层
minier 发表于 2014-1-10 12:50
尤其是指向结构体和共用体的指针的宏解析完全没有

指向结构体和共用体的指针的宏解析完全没有?不太理解这话,有图有真相

出0入0汤圆

 楼主| 发表于 2014-1-13 10:53:43 | 显示全部楼层
kalo425 发表于 2014-1-11 15:55
看帖不仔细,原来 gif这么弄 的··SlickEdit ,楼主用过这个么?

还真没有,看介绍,可以和SI媲美的一编辑器。

出0入0汤圆

发表于 2014-1-13 23:15:22 | 显示全部楼层
tinyabao 发表于 2014-1-13 10:44
我驾驭GVIM就没你那么强大,赞一个!

注要还是Vim的各种插件强大,
我嘛, 还算是菜鸟, 正在学习中....

出0入0汤圆

发表于 2014-1-19 20:15:19 | 显示全部楼层
to【tinyabao】
struct aa
{
    char i;
    int j;

} u;
#define GPIO0   ((aa*)1233)

GPIO0->
上句没有成员补全提示

出0入0汤圆

发表于 2014-1-19 20:29:41 | 显示全部楼层
好,强大

出0入0汤圆

发表于 2014-1-19 22:49:05 | 显示全部楼层
ding!!!!!!!!!!!!!!!!!!!!

出0入0汤圆

发表于 2014-2-19 00:40:28 | 显示全部楼层
不错啊      

出0入0汤圆

发表于 2014-2-19 16:22:03 | 显示全部楼层
强大,见识了

出0入0汤圆

发表于 2020-6-7 20:49:56 | 显示全部楼层
MARK MARK MARK MARK MARK

出0入0汤圆

发表于 2020-6-8 00:18:49 来自手机 | 显示全部楼层
刚刚开始用 SI,学习了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-25 23:33

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表