今天写代码的时候突然想到在代码的上一空行添加一对 /* */ 来添加注释,或者单独注释一行代码,而且是用 c 的注释方式,即使用 /**/,如想要在光标处添加 /**/
或者注释掉光标所在的行,如:
实际的效果就是这样,空行直接添加 /**/
而当要注释代码行时,是这样的:
如果是当前行只有 // 注释,则可以操作添加 /**/, 如:
但是当该行已经有 /**/ 注释了,再操作将不会添加成功,因为嵌套的 /**/ 会失效的。宏的实现如下:
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)
}
}
}
完美。