Source Insight 宏-添加单行的c注释

        今天写代码的时候突然想到在代码的上一空行添加一对 /* */ 来添加注释,或者单独注释一行代码,而且是用 c 的注释方式,即使用 /**/,如想要在光标处添加 /**/

Source Insight 宏-添加单行的c注释_第1张图片

或者注释掉光标所在的行,如:

Source Insight 宏-添加单行的c注释_第2张图片

实际的效果就是这样,空行直接添加 /**/

Source Insight 宏-添加单行的c注释_第3张图片

而当要注释代码行时,是这样的:

Source Insight 宏-添加单行的c注释_第4张图片

如果是当前行只有 // 注释,则可以操作添加 /**/, 如:

但是当该行已经有 /**/ 注释了,再操作将不会添加成功,因为嵌套的 /**/ 会失效的。宏的实现如下:

macro AddCLanguageCommentInOnekLine()
{
    hwnd = GetCurrentWnd()
    LnFirst =GetWndSelLnFirst(hwnd) //取首行行号
    LnLast =GetWndSelLnLast(hwnd) //取末行行号
    hbuf = GetCurrentBuf()
	
	//选择一行,或未选中情况下光标所在的行
	if(LnFirst == LnLast)
	{
		buf = GetBufLine(hbuf, LnFirst) //取光标所在行的内容
		strLen = strlen(buf)
		ch = 0
		blankLine = True
		headStr = ""
		
		while(ch < strLen)
		{
			if(AsciiFromChar(buf[ch]) >= 33 && AsciiFromChar(buf[ch]) <= 126) //可打印的字符范围,不包括空格
			{
				blankLine = False
				break
			}
			headStr = cat(headStr, buf[ch])
			ch = ch + 1
		}
		
		//如果是已经注释的行,则啥也不做
		if(ch != strLen) //不相等下面才不会越界
		{
			if((buf[ch] == "/" && buf[ch+1] == "/") 
				|| (buf[ch] == "/" && buf[ch+1] == "*"))
			{ 
				stop
			}
			index = 0
			count = 0
			while(index < strLen)
			{
				if((buf[index] == "/" && buf[index+1] == "*") ||
					(buf[index] == "*" && buf[index+1] == "/"))
				{
					count = count + 1
				}
				index = index + 1
			}
		}
		
		//已经有 "/**/" 的注释了,再加就不生效了,但可以在行首添加 "//",这里就不做了
		if(count == 2)
		{
			stop
		}
		
		//空行,或是光标所在位置前全部是空格,即没有代码的行
		if(blankLine)
		{
			buf = cat(buf, "/* */") 
			PutBufLine(hbuf, LnFirst, buf)
		}
		else
		{
			buf = strmid(buf, ch, strLen) //取所在行的代码,即不包括前面的空格
			buf = cat("/* ", buf) //给代码加上 "/**/"
			buf = cat(buf, " */")
			buf = cat(headStr, buf) //加上代码前的空格
			PutBufLine(hbuf, LnFirst, buf)
		}
	}
}

 完美。

你可能感兴趣的:(其他,编辑器)