[editor]Source Insight编辑器的快捷键设置暨相关宏语言(Macro Language)的学习一

来源:互联网 发布:怎么把mac文件拷到硬盘 编辑:程序博客网 时间:2024/06/03 04:10
   今天壁纸突然变成了一幅图,图里有句话:“人的乐趣之一就是去完成那些别人认为你完成不了的事”。所以就有了这篇博文。如果没有这句话,此篇博文还要晚上几天才能发出来。感谢百度壁纸软件予我醍醐灌顶(微笑脸微笑)。

   最近在使用Source Insight编辑器来维护和编写C/C++代码,不得不说其的确好用强大。但对于中文的支持和美观性却不如人意,但用起来还是一如既往的爽。

   Source Insight编辑器中的快捷键是可以自定义的,这里的自定义是说:可以通过编写宏(Macro)来定义特定快捷键的功能。曾经基友对我说过:不要做工具党。他甚至都没想到这句话会影响到我现在任何事情都要亲历亲为(再次微笑脸鄙视)。

   Source Insight编辑器缺少两个我需要的快捷键,那么我就自己写两个宏好了。

   首先摆出一个链接http://blog.csdn.net/ytmfdw/article/details/43487453   名为"Source Insight自定义快捷键"。正是这篇文章给了我一个大的方向----看帮助文档,给出链接以表尊重。(声明:代码文章皆是原创,没有对此链接博文进行抄袭微笑

   下午花了三个小时对帮助文档(Source Insight Help Document)中的宏语言模块(Macro language)进行了特定的学习,基本了解到Source Insight内置宏语言是一门类C类脚本的语言。官方文档中写到:“The Source Insight macro language syntax is similar to C”又写到:“Source Insight provides a C-like macro language”,这些都说明了其语法等方面都是类C的。

   本篇博文先着重讲两个功能的实现,关于其宏语言的语法,在下篇博文中将会系统的讲到。

   好了,下面进入到正题

--------------------------------------------------------------------------

--------------------------------------------------------------------------

   功能一:快速删除多个空格

  1、问题描述:

  

#include<iostream>using std::cout;using std::endl;int main(int argc,char** argv){      cout << "hello world" << endl;                    int i = 1;            cout << i << endl;      return 0;}
                   看到了吗?第7、8行代码没有缩进对齐。我是一个有代码洁癖的人,这种情况真的是不能忍。那能做的就是这样:(特地做的动态图安静


                   看到之前处理这种情况是,按下Backspace键,进行多次回退,调整到我们需要的位置。第7行代码的调整,按了4下Backspace键,1下Tab键。

         下面是我写的宏的效果:


           第7行调整位置,1次Ctrl+Backspace,一次Tab键。优化体现在了:我现在可以使用快捷键一次将光标左侧的字符一次清空。之前需要5个单位时间的工作量现在只需要2个单位时间就可以完成了。


          2.代码解析

//Source Insight Macro Language 是大小写不敏感(not case sensitive)的且变量使用时不需提前声明的。//这些在官方文档中提到过,下篇博文会对其语法(syntex of Macro Language)进行讲解。macro SelfDel(){hwnd = GetCurrentWnd();                        //取得当前窗口句柄,获得当前活动窗口的句柄,用于确定要对哪个文件进行操作。Ln = GetWndSel(hwnd);                          //取得当前选中位置信息返回一个record var变量相当于一个字典变量raw = Ln.lnFirst;                              //光标所在行号,注意首行行号为0hbuf = GetCurrentBuf();                        //取得当前文件内Buffer,可以理解为文件本身或者是文件在内存中的头指针。strLine = GetBufLine(hbuf,raw);                //得到在raw行的字符串内容if(strLine == Nil)                             //如果当前没有任何字符(注意这里说的是任意字符,包括不可见字符),那么安全退出{stop;                                  //如果if语句被执行,那么stop会将宏安全退出。类似于C中的return}strLineLength = strlen(strLine);               //取得字符串长度PutBufLine(hbuf,raw,strmid(strLine,Ln.ichFirst,strLineLength));//将特定行的字符用处理过后的字符串替代,实现删除空白假象stop;                                                          //程序最后了,其实加不加stop都一样}


--------------------------------------------------------------------------

--------------------------------------------------------------------------

   功能二:快捷键注释代码

  1、功能描述

   在其他的主流编辑器中,Ctrl+/是注释功能的快捷键,而在Source Insight中确实没有的,其Ctrl+/的功能是全局搜索的功能。维护裁剪代码非常的不方便,经过我的认真思考与借鉴,得到了一个这样的效果:

                  
  我只需要将我想注释的代码块选中,按下Ctrl+B即可。同时在未选中任何代码块的情况下,Ctrl+B会只注释掉当前光标所在的一行。如果该行已经被注释,那么按下Ctrl+B的效果将会是取消注释。
  

  2.代码解析

macro strLineNotSpace(strline)//有参数的宏函数是不能作为命令在直接使用的,它是被其他宏来调用的{i = 0;Length = strlen(strline);while(i < Length){integerAsciiFromChar = AsciiFromChar(strline[i])//得到每个字符的ASCII码值if(integerAsciiFromChar != 9  && integerAsciiFromChar != 32)//返回第一个出现非空白字符的位置return i;//这里的9代表Tab空白符,32表示space空白符i++;/*不要忘了这个自增运算,我就是忘了一下,导致运行宏的时候整个Source Insight软件崩溃.如果在软件启动的时候,这个宏自动运行了那么这大概这就是一个比较简陋的宏病毒吧*/}}macro CommentCode(){hwnd = GetCurrentWnd();//取得当前活动窗口句柄?hbuf = GetCurrentBuf();lnFirst = GetWndSelLnFirst(hwnd);//得到选中区域首行索引lnLast = GetWndSelLnLast(hwnd);//得到选中区域末行索引LineCount = GetBufLineCount(hbuf)//得到整个文件Buffer总行数i = lnFirst;//选中区域首行索引while(i <= lnLast){strline = GetBufLine(hbuf,i);//strlineLength = strlen(strline);//取得字符串长度if(strlineLength == 0)//对于空白行,我们执行continue跳过,不做任何操作{i++;if(i >= LineCount)stop;SetBufIns(hbuf,i,1);continue;}midIndex = strLineNotSpace(strline);newstrline = cat(strmid(strline,0,midIndex),"//");newstrline = cat(newstrline,strmid(strline,midIndex,strlineLength));if(strlineLength > 2)//对待字符长度大于2的行,就要检测它是不是已经被注释了,如果是的话,就取消注释{if(strmid(strline,midIndex,midIndex+2) == "//")//取消注释{newstrline = cat(strmid(strline,0,midIndex),strmid(strline,midIndex+2,strlineLength));}}PutBufLine(hbuf,i,newstrline);i++;if(i >= LineCount)stop;SetBufIns(hbuf,i,1);//将光标移到下一行,使得Ctrl+B可以连续执行}}

      总结:

   其实呢像这种宏语言没有必要去花费时间学习,只要能用就可以。可以通文档来找到自己需要的函数即可,多查本地文档而不是去百度。

   在Source Insight中,宏函数要放在一个*.em文件中,其后缀名称的含义我猜测应该是extension macro。在其中编写完毕之后点击菜单项Options->Key Assignments,将快捷键同无参数宏函数关联起来。

   还是那句话,Source Insight只是一个工具,其实没必要去做太多的工作。但笔者已经决定在Win平台上使用Source Insight,Linux平台上使用Vim了。所以适当的做一些订制化的工作是可以的。同时笔者很不喜欢直接拿别人的拓展程序直接用,直接从GitHub上复制别人的程序,我感觉轮子只要你自己造一遍,才能更好的驾驭它。



附录:本博文代码文件下载

http://download.csdn.net/detail/i_am_tom/9731866

 

0 0
原创粉丝点击