打开base项目,下main.c文件里加入以下代码

对于在一行内的局部注释, 没有找到解除注释的宏,

macro Comments_orUn_gx()
{   //用杠星注释多行,或取消杠星注释 ,不选中多行时,只处理当前行
    hwnd = GetCurrentWnd()
    hbuf = GetCurrentBuf()
    )
        stop   

    // debugBuf只是为了调试
    // debugBuf = NewBuf("debugBuf")
    // ClearBuf(debugBuf)   

    lnSelFirst = GetWndSelLnFirst(hwnd)     // 获得选中内容的第一行
    lnSelLast = GetWndSelLnLast(hwnd)       // 获得选中内容的最后一行  

    const_space = " "               // 空格
    const_comments_begin = "/*"             // 多行注释符号-开始
    const_comments_end = "*/"           // 多行注释符号-结束
    isCancelComments =    

    // 跳过开始的空行,否则下面报错
    line_index = lnSelFirst
    orig_text = GetBufLine(hbuf, line_index)    // 获得第一行的text
    )
    {
        line_index = line_index +
        orig_text = GetBufLine(hbuf, line_index)            // 获得下一行的text
    }  

    // 根据第一行选中文本,确定是“注释”,还是“取消注释”
    // 判断是否以“//”开始,如果是则认为是“取消注释”,首先需要去掉空格
    subIndex =
    ) == const_space)
            subIndex = subIndex +    

    ) == const_comments_begin)    // 以“/*”开头,取消注释
    {
        isCancelComments =    

        dest_text = strmid(orig_text, subIndex+, strlen(orig_text))
        )
        {
            DelBufLine(hbuf, line_index)                // 本行只有“/*”时,删除
        }
        else
        {
            PutBufLine (hbuf, line_index, dest_text)        // 替换以前的text
        }
        line_index = line_index +
    }
    else    // 进行注释
    {
        InsBufLine(hbuf, lnSelFirst, "/*")
        InsBufLine(hbuf, lnSelLast+,  "*/")  

        stop
    }  

    // 遍历所有选中的行
    // line_index = lnSelFirst                      // 前面已经跳过开头的空行
    // while(line_index <= lnSelLast)                    // 对选中的内容进行操作
    while(line_index < GetBufLineCount(hbuf))                //or 从当前行开始,查找到第一个“*/”为止或到结尾
    {
        orig_text = GetBufLine(hbuf, line_index)    // 获得以前的text
        )                   // 如果是空行或只有一个字符,则跳过
        {
            dest_text = ""
            )               // 取消注释
            {
                // 查找注释符“*/”
                subIndex =
                 && strmid(orig_text, subIndex, subIndex+) != const_comments_end)
                        subIndex = subIndex +    

                ) == const_comments_end)  // 找到“*/”,进行处理
                {
                    prefixText = strmid(orig_text, , subIndex)             // 前面的text
                    lastText = strmid(orig_text, subIndex+, strlen(orig_text))     // 后面的text
                    dest_text = cat(prefixText, lastText)   

                    )
                    {
                        DelBufLine(hbuf, line_index)                // 本行只有“*/”时,删除
                    }
                    else
                    {
                        PutBufLine (hbuf, line_index, dest_text)        // 替换以前的text
                    }  

                    break                               // 退出
                }
            }
        }  

        line_index = line_index +
    }
}  

macro CommentSelecte_inOneLine()
{   //注释选中,只在单行中有效,不选中任何字符的话就在光标处插入一对杠星注释符
    hbuf = GetCurrentBuf()
    ln = GetBufLnCur(hbuf)
    str = GetBufSelText(hbuf)
    str = cat("/*",str)
    str = cat(str,"*/")
    SetBufSelText (hbuf, str)
}  

macro _tsGetTabSize()
{  //只被Comment_gx() 宏调用
    szTabSize = GetReg("TabSize");    

    if (szTabSize != "")
    {
        tabSize = AsciiFromChar(szTabSize[]) - AsciiFromChar(");
    }
    else
    {
        tabSize = ;
    }    

    return tabSize;
}    

macro Comment_gx()
{  //用杠星注释,不换行,至少注释一行,不推荐使用
    hbuf = GetCurrentBuf();
    hwnd = GetCurrentWnd();    

    sel = GetWndSel(hwnd);    

    iLine = sel.lnFirst;    

    // indicate the comment char according to the file type
    // for example, using "#" for perl file(.pl) and "/* */" for C/C++.
    filename = tolower(GetBufName(hbuf));
    suffix = "";
    len = strlen(filename);
    i = len - ;
    )
    {
        ] == ".")
        {
            suffix = strmid(filename, i, len)
            break;
        }
        i = i -;
    }
    if  ( suffix == "pl" )
    {
        filetype = ; // PERL
    }
    else
    {
        filetype = ; // C
    }    

    szLine = GetBufLine(hbuf, iLine);
    )  // C
    {
        szLine = cat("/*", szLine);
    }
    else                // PERL
    {
        szLine = cat("# ", szLine);
    }
    PutBufLine(hbuf, iLine, szLine);
    iLine = sel.lnLast;
    szLine = GetBufLine(hbuf, iLine);
    )  // C
    {
        szLine = cat(szLine, "*/");
    }
    else                // PERL
    {
        szLine = cat("# ", szLine);
    }
    PutBufLine(hbuf, iLine, szLine);    

    if (sel.lnFirst == sel.lnLast)
    {
        tabSize = _tsGetTabSize() - ;
        sel.ichFirst = sel.ichFirst + tabSize;
        sel.ichLim = sel.ichLim + tabSize;
    }
    SetWndSel(hwnd, sel);
}    

macro Comment_gg()
{   //用杠杠注释,不选中多行的话,注释当前行
    hwnd = GetCurrentWnd()
    selection = GetWndSel( hwnd )
    lnFirst = GetWndSelLnFirst( hwnd )
    lnLast = GetWndSelLnLast( hwnd )  

    hbuf = GetCurrentBuf()  

    ln = lnFirst
    buf = GetBufLine( hbuf, ln )
    len = strlen( buf )
    firststart = len
    while( ln <= lnLast )
    {
        buf = GetBufLine( hbuf, ln )
        len = strlen( buf )
        start =
        while( start < len )
        {
             ) == CharFromAscii() || strmid( buf, start, start +  ) == CharFromAscii() )
            {
                start = start +
                if( start > len )
                    break
            }
            else
                break
        }
        if( start < len && start < firststart )
        {
            firststart = start
        }
        ln = ln +
    }  

    ln = lnFirst
    while( ln <= lnLast )
    {
        buf = GetBufLine( hbuf, ln )
        len = strlen( buf )
         )
        {
            buf2 = cat( cat( strmid( buf, , firststart ), "//" ), strmid( buf, firststart, len ) )
            PutBufLine ( hbuf, ln, buf2 )
        }
        ln = ln +
    }
    SetWndSel( hwnd, selection )
}  

macro unComment_gg()
{   //取消杠杠注释,不选中多行的话,默认只处理当前行
    hwnd = GetCurrentWnd()
    selection = GetWndSel( hwnd )
    lnFirst = GetWndSelLnFirst( hwnd )
    lnLast = GetWndSelLnLast( hwnd )  

    hbuf = GetCurrentBuf()
    ln = lnFirst
    while( ln <= lnLast )
    {
        buf = GetBufLine( hbuf, ln )
        len = strlen( buf )
         )
        {
            start =   

             ) == CharFromAscii() || strmid( buf, start, start +  ) == CharFromAscii() )
            {
                start = start +
                if( start >= len )
                    break
            }
             )
            {
                 ) == "//" )
                {
                    buf2 = cat( strmid( buf, , start ), strmid( buf, start + , len ) )
                    PutBufLine( hbuf, ln, buf2 )
                }
            }
        }
        ln = ln +
    }
    SetWndSel( hwnd, selection )
} 

增加后,通过在键分配中分配宏命令的按键

source insight增加注释宏的更多相关文章

  1. source insight 中文注释为乱码解决

    1. source insight 中文注释为乱码解决 http://blog.csdn.net/bingfeng1210/article/details/7527059 2. Source Insi ...

  2. Source Insight中文注释乱码、字体大小、等宽解决方法

    中文注释乱码解决方法: 用记事本打开源文件,然后,选择文件->另存为,编码选为”ANSI“   字体的调整: Source Insight 菜单栏选择Options->Document O ...

  3. Source Insight 中文注释为乱码解决办法(完美解决,一键搞定)

    我从网上查了一堆解决办法,但是都是2017年以前的解决方案,并且都是针对于source insight 3.5及以下版本的,目前SI软件版本都到4.0了,应该有新方法出现了. ------------ ...

  4. utf-8转换为ansi和修改文件名的批处理(可解决source insight中文注释乱码问题)

    source insight中文乱码有两个原因,一个是source insight的设置不正确.另外一个原因是源文件是utf-8格式的. 最近在工作中用source insight 查看jsp文件.j ...

  5. 【转】Source Insight中文注释为乱码的解决办法

    我网上查了一堆解决办法,但是都是2017年以前的,并且都是针对于source insight 3.5及以下版本的解决方案,软件版本都到4.0了,应该有新方法出现. 干货:Source Insight ...

  6. source insight增加tab标签页的方法之sihook

    1.效果如下 2.方法见如下博客 http://www.cnblogs.com/Red_angelX/archive/2013/01/23/2873603.html

  7. Source Insight常用快捷键及注释快捷键设置

    转:http://blog.csdn.net/tlaff/article/details/6536610 在使用SI过程中,我根据自己的使用习惯修改了它的默认快捷键,并且在配置文件中添加了一些人性化功 ...

  8. source insight之quicker.em宏的使用

    source insight有很多宏可以用,这里介绍的宏是quicker.em这个宏,它是华为的一个员工写的,很实用. 1.安装quicker.em宏 一.打开base这个工程Project-> ...

  9. source insight 编程风格(持续更新)

    1.字体Source Code Pro 出身于豪门Adobe,从名字上来看就知道是转为编码而生的.基本上也是拥有前面所提的编程字体的所有要素的.这个字体基本上具有编程字体所需的所有要素:等宽.支持Cl ...

随机推荐

  1. 示例开发过程记录:meteor,react,apollo

    本示例记录一个开发过程: 1)参考 Meteor React TUTORIAL教程 https://www.meteor.com/tutorials/react/creating-an-app 2). ...

  2. java26

    1:网络编程(理解)    (1)网络编程:用Java语言实现计算机间数据的信息传递和资源共享    (2)网络编程模型    (3)网络编程的三要素        A:IP地址           ...

  3. objccn-iOS上的相机捕捉

    在第一台iPhone时,在app里面整合相机的唯一方法就是使用UIImagePickerController.到了iOS4,发布了更灵活的AVFoundation框架. UIImagePickerCo ...

  4. Visual Studio 2013 智能提示

    Visual Studio 2013中,智能提示功能突然用不了,查了一下,使用命令行重置VS的方法解决了这个问题.步骤如下: 开始菜单 -->所有程序-->Visual Studio 20 ...

  5. node02-util

    目录:node01-创建服务器 node02-util node03-events node04-buffer node05-fs node06-path node07-http node08-exp ...

  6. Spring + Jedis集成Redis(单例redis数据库)

    这几天没事,就把之前学习的redis代码整理一遍,废话不多说,上步骤. 1.pom.xml引入资源: <dependency> <groupId>org.springframe ...

  7. (转)Oracle 获取上周一到周末日期的查询sql语句

    -- Oracle 取上周一到周末的sql -- 这样取的是 在一周内第几天,是以周日为开始的 select to_char(to_date('20130906','yyyymmdd'),'d') f ...

  8. C++ 基础知识复习(五)

    UML建模部分 70. 什么是UML: 答: Unified Modeling Language, 统一建模语言,是一种标准的图形化建模语言.是面向对象分析和设计的标准表示. 71. UML有哪些图: ...

  9. 【Java EE 学习 30】【闪回】【导入导出】【管理用户安全】【分布式数据库】【数据字典】【方案】

    一.闪回 1.可能的误操作 (1)错误的删除了记录 (2)错误的删除了表 (3)查询历史记录 (4)撤销已经提交了的事务. 2.对应着以上四种类型的误操作,有四种闪回类型 (1)闪回表:将表回退到过去 ...

  10. IL指令详细

    名称 说明 Add 将两个值相加并将结果推送到计算堆栈上. Add.Ovf 将两个整数相加,执行溢出检查,并且将结果推送到计算堆栈上. Add.Ovf.Un 将两个无符号整数值相加,执行溢出检查,并且 ...