今天写代码的时候突然想到在代码的上一空行添加一对 /* */ 来添加注释,或者单独注释一行代码,而且是用 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)
- }
- }
- }
完美。