`

Source Insight 多行,单行,行内 注释,解除注释宏

阅读更多

Source Insight 各种好用,功能繁多, 但是没有注释的快捷键或菜单,要手动加宏实现

 代码都是网上copy的, 但有的不能用,稍作修改了下,可以用了,都贴出来

 

美中不足, 

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

不过这个也没关系了, 手动就可以,



 

macro Comments_orUn_gx()
{	//用杠星注释多行,或取消杠星注释 ,不选中多行时,只处理当前行
	hwnd = GetCurrentWnd()
	hbuf = GetCurrentBuf()
	if(hbuf ==0)
		stop 
		
	// debugBuf只是为了调试
	// debugBuf = NewBuf("debugBuf") 
	// ClearBuf(debugBuf) 

	lnSelFirst = GetWndSelLnFirst(hwnd)		// 获得选中内容的第一行
	lnSelLast = GetWndSelLnLast(hwnd) 		// 获得选中内容的最后一行
		
	const_space = " "				// 空格
	const_comments_begin = "/*" 			// 多行注释符号-开始
	const_comments_end = "*/"			// 多行注释符号-结束
	isCancelComments = 0 
	
	// 跳过开始的空行,否则下面报错
	line_index = lnSelFirst 
	orig_text = GetBufLine(hbuf, line_index)	// 获得第一行的text
	while(strlen(orig_text) == 0)
	{
		line_index = line_index + 1
		orig_text = GetBufLine(hbuf, line_index)			// 获得下一行的text
	}
		
	// 根据第一行选中文本,确定是“注释”,还是“取消注释”
	// 判断是否以“//”开始,如果是则认为是“取消注释”,首先需要去掉空格
	subIndex = 0 		
	while(strmid(orig_text, subIndex, subIndex+1) == const_space) 
			subIndex = subIndex + 1 
	
	if (strmid(orig_text, subIndex, subIndex+2) == const_comments_begin)	// 以“/*”开头,取消注释
	{
		isCancelComments = 1 
		
		dest_text = strmid(orig_text, subIndex+2, strlen(orig_text)) 
		if(strlen(dest_text) == 0)
		{
			DelBufLine(hbuf, line_index) 				// 本行只有“/*”时,删除
		}
		else
		{
			PutBufLine (hbuf, line_index, dest_text)  		// 替换以前的text
		}
		line_index = line_index + 1
	}
	else	// 进行注释
	{
		InsBufLine(hbuf, lnSelFirst, "/*")
		InsBufLine(hbuf, lnSelLast+2,  "*/")
		
		stop 
	}
	
	// 遍历所有选中的行
	// line_index = lnSelFirst 						// 前面已经跳过开头的空行
	// while(line_index <= lnSelLast) 					// 对选中的内容进行操作
	while(line_index < GetBufLineCount(hbuf))				//or 从当前行开始,查找到第一个“*/”为止或到结尾
	{
		orig_text = GetBufLine(hbuf, line_index)	// 获得以前的text
		if (strlen(orig_text) > 1)					// 如果是空行或只有一个字符,则跳过
		{
			dest_text = "" 
			if(isCancelComments == 1)				// 取消注释
			{
				// 查找注释符“*/”
				subIndex = 0 		
				while(subIndex < strlen(orig_text)-2 && strmid(orig_text, subIndex, subIndex+2) != const_comments_end) 
						subIndex = subIndex + 1 
				
				if (strmid(orig_text, subIndex, subIndex+2) == const_comments_end)	// 找到“*/”,进行处理
				{
					prefixText = strmid(orig_text, 0, subIndex) 			// 前面的text
					lastText = strmid(orig_text, subIndex+2, strlen(orig_text)) 	// 后面的text
					dest_text = cat(prefixText, lastText) 

					if(strlen(dest_text) == 0)
					{
						DelBufLine(hbuf, line_index) 				// 本行只有“*/”时,删除
					}
					else
					{
						PutBufLine (hbuf, line_index, dest_text)  		// 替换以前的text
					}
					
					
					break 								// 退出
				}
			}
		}
		
		line_index = line_index + 1  
	}
}



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[0]) - AsciiFromChar("0");  
    }  
    else  
    {  
        tabSize = 4;  
    }  
  
    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 - 1;  
    while (i >= 0)  
    {  
        if (filename[i-1] == ".")  
        {  
            suffix = strmid(filename, i, len)  
            break;  
        }  
        i = i -1;  
    }  
    if  ( suffix == "pl" )  
    {  
        filetype = 2; // PERL  
    }  
    else  
    {  
        filetype = 1; // C  
    }  
  
    szLine = GetBufLine(hbuf, iLine);  
    if (filetype == 1)  // C  
    {  
        szLine = cat("/*", szLine);  
    }  
    else                // PERL  
    {  
        szLine = cat("# ", szLine);  
    }  
    PutBufLine(hbuf, iLine, szLine);  
    iLine = sel.lnLast;  
    szLine = GetBufLine(hbuf, iLine);  
    if (filetype == 1)  // C  
    {  
        szLine = cat(szLine, "*/");  
    }  
    else                // PERL  
    {  
        szLine = cat("# ", szLine);  
    }  
    PutBufLine(hbuf, iLine, szLine);  
  
  
  
    if (sel.lnFirst == sel.lnLast)  
    {  
        tabSize = _tsGetTabSize() - 1;  
        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 = 0
		while( start < len )
		{
			if( strmid( buf, start, start + 1 ) == CharFromAscii(32) || strmid( buf, start, start + 1 ) == CharFromAscii(9) )
			{
				start = start + 1
				if( start > len )
					break
			}
			else
				break
		}
		if( start < len && start < firststart )
		{
			firststart = start
		}
		ln = ln + 1
	}

	ln = lnFirst
	while( ln <= lnLast )
	{
		buf = GetBufLine( hbuf, ln )
		len = strlen( buf )
		if( len > 0 )
		{
			buf2 = cat( cat( strmid( buf, 0, firststart ), "//" ), strmid( buf, firststart, len ) )
			PutBufLine ( hbuf, ln, buf2 )
		}
		ln = ln + 1
	}
	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 )
		if( len >= 2 )
		{
			start = 0

			while( strmid( buf, start, start + 1 ) == CharFromAscii(32) || strmid( buf, start, start + 1 ) == CharFromAscii(9) )
			{
				start = start + 1
				if( start >= len )
					break
			}
			if( start < len - 2 )
			{
				if( strmid( buf, start, start + 2 ) == "//" )
				{
					buf2 = cat( strmid( buf, 0, start ), strmid( buf, start + 2, len ) )
					PutBufLine( hbuf, ln, buf2 )
				}
			}
		}
		ln = ln + 1
	}
	SetWndSel( hwnd, selection )
}

代码加到utils.em中,或者新建个em文件,添加到base项目, 汉化版的加到"基础"项目

 

 

参考文章

 http://download.csdn.net/download/ueiia/1587238

http://blog.csdn.net/tankles/article/details/6949409

 

 

  • 大小: 7.1 KB
分享到:
评论

相关推荐

    sourceinsight 多行注释 批量注释 反注释

    总之,Source Insight提供了高效便捷的注释和反注释工具,无论是对单行还是多行,甚至整个代码块,都能轻松处理。熟练掌握这些操作,将大大提高你的编程效率和代码维护性。记得定期更新和查阅相关文档,以充分利用...

    source insight 多行注释,取消注释,函数名注释模板

    自己写的宏macro CodeCommentsEnter(),CodeCommentsCancel(),macro CodeHeadAdd(),和UE特殊编辑下面的添加注释、取消注释相同,最后一个是函数名的注释模板。 使用方法:直接覆盖BASE工程、安装路径下面的文件...

    source insight 多行注释及反注释宏

    自己写的source insight注释宏,实现类似VC IDE的多行注释及反注释功能。使用方法:打开source insight的Base工程,选择Add and Remove Project Files,将Comments.em文件添加进Base工程,保存即可退出。打开其他...

    sourceinsight 代码行注释,去注释代码插件

    总的来说,"sourceinsight 代码行注释,去注释代码插件"是一个实用的工具,它利用Source Insight的宏功能,简化了代码注释和去注释的过程,提高了开发者的生产力。配合详细的使用说明文档,用户可以轻松上手,享受更...

    source insight 3 多行注释、函数名注释、代码对齐

    把之前的脚本优化了下,增加代码对齐的宏。...测试环境:source insight 3。 后缀为em的文件添加到base项目,options -&gt; menu assignments 中添加宏定义。 CodeHeadAdd / CodeCommentsChange / CodeAlignment

    source insight 多行注释及反注释宏 Ver 2.0

    Ver1.0宏的升级版 解决在一行内全是空格情况下的小BUG

    SourceInsight3.5+汉化+多行同时注释+自动排版+支持中文注释+各种常用功能扩展

    当然,Source Insight 3.5的功能也非常的强大,但有些我们很需要的功能(比如同时注释多行;代码自动格式化为标准C、C++格式;中文注释乱码情况;想进入资源管理器查看当前文件等等),SI3.5还不支持,好在SI支持很多宏...

    Sourceinsight汉化+多标签设置+汉字删除无问号+多行注释+tab按键设置+智能排版+全选全保存

    本资源提供了SourceInsight的汉化、多标签设置、汉字删除无问号、多行注释、Tab键设置、智能排版以及全选全保存等关键功能的优化配置,旨在提升开发者的使用体验和工作效率。 1. **SourceInsight汉化**:对于中文...

    source insight一键添加注释

    source insight一键添加文件头注释、函数头注释、函数声明注释,将文件放入si安装目录下的Base文件夹,然后把文件添加到任意工程中,调出快捷键设置窗口,找到对应的宏函数并为它们添加快捷键即可。 更详细的操作...

    sourceinsight 便捷插件 符合Doxygen的注释标准

    《SourceInsight便捷插件与Doxygen注释标准详解》 在软件开发过程中,文档的编写和维护是一项不可或缺的工作,而Doxygen作为一种流行的开源文档生成工具,能够自动生成项目的API文档,大大减轻了程序员的负担。同时...

    source insight comment 添加代码注释

    只需在代码行尾部输入`//`(单行注释)或`/* */`(多行注释)即可开始编写注释。 2. **注释模板**:用户可以自定义注释模板,例如函数注释、类注释等,通过快捷键快速插入,提高工作效率。 3. **智能感知**:...

    SourceInsight4.0_配色_多行注释.zip

    《SourceInsight 4.0:打造舒适编程环境与高效多行注释操作》 SourceInsight是一款广受程序员喜爱的源代码查看和编辑工具,以其强大的语法高亮、智能提示和高效的代码导航功能著称。本文将详细介绍如何在Source...

    彻底解决 source_insight 中文注释显示乱码

    本文将详细介绍如何在Source Insight 3.X版本中彻底解决中文注释显示乱码的问题。 首先,我们需要了解乱码产生的原因。通常,源代码编辑器需要正确识别文件的编码格式,以及支持用于显示特定语言的字体。如果编辑器...

    sourceInsight 宏定义

    sourceInsight 宏定义文件 sourceInsight 宏定义文件 sourceInsight 宏定义文件 sourceInsight 宏定义文件

    sourceinsight 日文注释乱码问题解决

    本文将深入探讨如何解决Source Insight中的日文注释乱码问题。 首先,我们需要了解乱码问题的根源。通常,乱码是由于字符编码不匹配导致的。在计算机系统中,不同的编码方式对应着不同的字符集,例如ASCII、GBK、...

    sourceInsight宏定义

    **Source Insight 宏定义详解** Source Insight是一款广受程序员喜爱的源代码查看和编辑工具,以其强大的代码导航、语法高亮和自定义功能而闻名。宏定义是Source Insight中的一个重要特性,它允许用户通过自定义...

    source insight 块注释宏

    source insight 块注释宏,博客中记录了使用方法,整理和总结下

    source insight4自用主题和多行注释宏函数包含黑主题仿vscode

    《Source Insight 4 自定义主题与多行注释宏实现:仿VSCode风格与护眼设计》 Source Insight 4 是一款广泛使用的源代码阅读和编辑工具,它以其强大的代码智能分析功能深受程序员喜爱。然而,为了提升用户体验,个性...

    source insight插件解决中文注释显示乱码

    《Source Insight插件解决中文注释显示乱码详解》 在编程过程中,代码注释是不可或缺的一部分,尤其对于中文开发者来说,使用中文注释能够更直观地表达代码含义。然而,许多开发者在使用Source Insight这款强大的源...

    Source Insight - 高效脚本修改版

    1. **Quicker.em**:这可能是用于增强Source Insight默认快捷键或宏的脚本。通过自定义快捷方式,开发者可以更快地执行常见的代码操作,比如查找、替换、跳转到定义等,从而提高编程效率。 2. **Code Review 使用...

Global site tag (gtag.js) - Google Analytics