在网上也有类似的宏,但效果都不是我想要的,都只是在首列加个// ,而没有缩进,于是自己动手写个一个多行注释的宏
macro MultiLineComment()
{
/* 获取选择区收尾行 */
handle = GetCurrentWnd()
first_line = GetWndSelLnFirst(handle)
last_line = GetWndSelLnLast(handle)
/* 获取当前打开文件文本 */
file_txt = GetCurrentBuf()
if(GetBufLine(file_txt, 0)=="//magic-number:tph85666031")
{
stop
}
/* 决定最小非空格字符开始列数 */
process_line = first_line
min_process_column = 10000
while(process_line <= last_line)
{
process_txt = GetBufLine(file_txt,process_line)
process_txt_len = strlen(process_txt)
if(process_txt == "")
{
process_line = process_line + 1
continue
}
/* 查找非空格字符开始列数 */
process_column = 0;
while(process_column < process_txt_len)
{
if( process_txt[process_column] != " ")
{
break
}
process_column = process_column + 1
}
if(process_column < min_process_column)
{
min_process_column = process_column
}
process_line = process_line + 1
}
/* 逐行处理文本 */
process_line = first_line
while(process_line <= last_line)
{
process_txt = GetBufLine(file_txt,process_line)
process_txt_len = strlen(process_txt)
if(process_txt == "")
{
process_line = process_line + 1
continue
}
/* 查找非空格字符开始列 */
process_column = 0;
while(process_column < process_txt_len)
{
if( process_txt[process_column] != " ")
{
break
}
process_column = process_column + 1
}
var buffer
if(process_column < process_txt_len)
{
if(process_txt[process_column] == "/" && process_txt[process_column + 1] == "/")
{
/* 取消注释 补全缩进 */
space = 0
while(space < process_column)
{
space = space + 1
buffer = cat(buffer," ");
}
space = 2
if(process_txt[process_column + 2] == " ")
{
space = 3
}
buffer = cat(buffer,strmid(process_txt,process_column + space,strlen(process_txt)))
PutBufLine(handle,process_line,buffer)
}
else
{
/* 增加注释 补全缩进 */
space = 0
while(space < min_process_column)
{
space = space + 1
buffer = cat(buffer," ");
}
buffer = cat(buffer,"// ")
buffer = cat(buffer,strmid(process_txt, min_process_column, strlen(process_txt)))
PutBufLine(handle,process_line,buffer)
}
}
process_line = process_line + 1
}
}
效果如下: