Source Insight中代码块注释(利用/**/)及取消注释实现方法
来源:互联网 发布:iphone 改铃声 mac 编辑:程序博客网 时间:2024/05/24 07:23
使用//注释及反注释方法
macro Code2Comments()
{
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 Comments2Code()
{
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 )
}
用了许久source Insight写C/C++代码,发现其中没有块注释功能很不方便,于是今天研究了下怎样让sourceInsight实现块注释。
网上介绍了很多方法实现块注释,但是都是对代码利用“//”逐行注释,没有用“/* */”实现的,我个人比较倾向于用/* */注释代码块,所以今天自己动手写了利用”/* */“实现块注释代码。
好了,废话不多说,直接上宏代码,后面会介绍使用方法:
[plain] view plaincopyprint?
macro _tsGetTabSize()
{
szTabSize = GetReg("TabSize");
if (szTabSize != "")
{
tabSize = AsciiFromChar(szTabSize[0]) - AsciiFromChar("0");
}
else
{
tabSize = 4;
}
return tabSize;
}
macro CommentBlock_Joyce()
{
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);
}
//
// Undo the CommentBlock for the selected text.
//
macro UnCommentBlock_Joyce()
{
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
}
tabSize = 0;
endLine = GetBufLine(hbuf, sel.lnLast);
endLineLen = strlen(endLine);
szLine = GetBufLine(hbuf, iLine);
len = strlen(szLine);
szNewLine = "";
commentState = 1;
if (szLine[0] == "/" && szLine[1] == "*")
{
if(endLine[endLineLen-2] == "/" && endLine[endLineLen-3] == "*")
{
if (filetype == 1) // C
{
if (len > 1)
{
if (szLine[0] == "/" && szLine[1] == "*")
{
if (len > 2)
{
if (AsciiFromChar(szLine[2]) == 9)
{
tabSize = _tsGetTabSize() - 1;
szNewLine = strmid(szLine, 3, strlen(szLine));
}
}
if (szNewLine == "")
{
szNewLine = strmid(szLine, 2, strlen(szLine));
tabSize = 2;
}
PutBufLine(hbuf, iLine, szNewLine);
}
}
}
if (filetype == 2) // PERL
{
if (len > 0)
{
if (szLine[0] == "#")
{
if (len > 1)
{
if (AsciiFromChar(szLine[1]) == 9)
{
tabSize = _tsGetTabSize() - 1;
szNewLine = strmid(szLine, 2, strlen(szLine));
}
}
if (szNewLine == "")
{
szNewLine = strmid(szLine, 1, strlen(szLine));
tabSize = 2;
}
PutBufLine(hbuf, iLine, szNewLine);
}
}
}
iLine = sel.lnLast;
szLine = GetBufLine(hbuf, iLine);
len = strlen(szLine);
szNewLine = "";
if (filetype == 1) // C
{
if (len > 1)
{
if (szLine[strlen(szLine)-2] == "/" && szLine[strlen(szLine)-3] == "*")
{
if (len > 2)
{
if (AsciiFromChar(szLine[2]) == 9)
{
tabSize = _tsGetTabSize() - 1;
szNewLine = strmid(szLine, 0, strlen(szLine)-2);
}
}
if (szNewLine == "")
{
szNewLine = strmid(szLine, 0, strlen(szLine)-3);
tabSize = 2;
}
PutBufLine(hbuf, iLine, szNewLine);
}
}
}
if (filetype == 2) // PERL
{
if (len > 0)
{
if (szLine[0] == "#")
{
if (len > 1)
{
if (AsciiFromChar(szLine[1]) == 9)
{
tabSize = _tsGetTabSize() - 1;
szNewLine = strmid(szLine, 2, strlen(szLine));
}
}
if (szNewLine == "")
{
szNewLine = strmid(szLine, 1, strlen(szLine));
tabSize = 2;
}
PutBufLine(hbuf, iLine, szNewLine);
}
}
}
}
}
if (sel.lnFirst == sel.lnLast)
{
sel.ichFirst = sel.ichFirst - tabSize;
sel.ichLim = sel.ichLim - tabSize;
}
SetWndSel(hwnd, sel);
}
下面介绍下使用方法:
1) 首先,打开sourceInsight 的"项目->打开项目->base”中的Utils.em文件,将以上宏代码复制到文件末尾,然后保存。
2) 启用宏。 菜单 “Options” -> “Key assignment”(中文版是选项->菜单关联)。 在列表框中找到下面的宏:CommentBlock_Joyce、UnCommentBlock_Joyce
3) 给这些宏分配按键。点击“键..”,选中你需要分配按键的宏,点击“分配新键..”,然后在键盘上选择你喜欢的按键吧~设置好之后,点击“好”。
好了,设置完毕,试试吧~
下面把网上有大神写的单行注释和利用“//”进行多行注释的代码一起贴上来,方便大家使用,设置方法和前面的一样。
[plain] view plaincopyprint?
macro SingleLineComment()
{
szMyName = "Joyce"
// Get a handle to the current file buffer and the name
// and location of the current symbol where the cursor is.
hbuf = GetCurrentBuf()
ln = GetBufLnCur(hbuf)
// Get current time
szTime = GetSysTime(1)
Hour = szTime.Hour
Minute = szTime.Minute
Second = szTime.Second
Day = szTime.Day
Month = szTime.Month
Year = szTime.Year
if (Day < 10)
szDay = "0@Day@"
else
szDay = Day
//szMonth = NumToName(Month)
if (Month < 10)
szMonth = "0@Month@"
else
szMonth = Month
szDescription = Ask("请输入修改原因")
// begin assembling the title string
InsBufLine(hbuf, ln+1, "/*@szDescription@ @szMyName@.xmyanfa @Year@-@szMonth@-@szDay@*/")
}
macro MultiLineCommentHeader()
{
szMyName = "Joyce"
// Get a handle to the current file buffer and the name
// and location of the current symbol where the cursor is.
hbuf = GetCurrentBuf()
ln = GetBufLnCur(hbuf)
// Get current time
szTime = GetSysTime(1)
Hour = szTime.Hour
Minute = szTime.Minute
Second = szTime.Second
Day = szTime.Day
Month = szTime.Month
Year = szTime.Year
if (Day < 10)
szDay = "0@Day@"
else
szDay = Day
//szMonth = NumToName(Month)
if (Month < 10)
szMonth = "0@Month@"
else
szMonth = Month
szDescription = Ask("请输入修改原因:")
// begin assembling the title string
InsBufLine(hbuf, ln + 1, "/*@szDescription@ @szMyName@.xmyanfa @Year@-@szMonth@-@szDay@ begin*/")
}
macro MultiLineCommentEnd()
{
szMyName = "Joyce"
// Get a handle to the current file buffer and the name
// and location of the current symbol where the cursor is.
hbuf = GetCurrentBuf()
ln = GetBufLnCur(hbuf)
// Get current time
szTime = GetSysTime(1)
Hour = szTime.Hour
Minute = szTime.Minute
Second = szTime.Second
Day = szTime.Day
Month = szTime.Month
Year = szTime.Year
if (Day < 10)
szDay = "0@Day@"
else
szDay = Day
//szMonth = NumToName(Month)
if (Month < 10)
szMonth = "0@Month@"
else
szMonth = Month
InsBufLine(hbuf, ln + 1, "/*@szMyName@.xmyanfa @Year@-@szMonth@-@szDay@ end*/")
}
//
// Comment the selected block of text using single line comments and indent it
//
macro CommentBlock()
{
hbuf = GetCurrentBuf();
hwnd = GetCurrentWnd();
sel = GetWndSel(hwnd);
iLine = sel.lnFirst;
// added by Yongqiang, indicate the comment char according to the file type
// for example, using "#" for perl file(.pl) and "//" for others.
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
}
while (iLine <= sel.lnLast)
{
szLine = GetBufLine(hbuf, iLine);
if (filetype == 1) // C
{
szLine = cat("// ", szLine);
}
else // PERL
{
szLine = cat("# ", szLine);
}
PutBufLine(hbuf, iLine, szLine);
iLine = iLine + 1;
}
if (sel.lnFirst == sel.lnLast)
{
tabSize = _tsGetTabSize() - 1;
sel.ichFirst = sel.ichFirst + tabSize;
sel.ichLim = sel.ichLim + tabSize;
}
SetWndSel(hwnd, sel);
}
//
// Undo the CommentBlock for the selected text.
//
macro UnCommentBlock()
{
hbuf = GetCurrentBuf();
hwnd = GetCurrentWnd();
sel = GetWndSel(hwnd);
iLine = sel.lnFirst;
// added by Yongqiang, indicate the comment char according to the file type
// for example, using "#" for perl file(.pl) and "//" for others.
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
}
tabSize = 0;
while (iLine <= sel.lnLast)
{
szLine = GetBufLine(hbuf, iLine);
len = strlen(szLine);
szNewLine = "";
if (filetype == 1) // C
{
if (len > 1)
{
if (szLine[0] == "/" && szLine[1] == "/")
{
if (len > 2)
{
if (AsciiFromChar(szLine[2]) == 9)
{
tabSize = _tsGetTabSize() - 1;
szNewLine = strmid(szLine, 3, strlen(szLine));
}
}
if (szNewLine == "")
{
szNewLine = strmid(szLine, 2, strlen(szLine));
tabSize = 2;
}
PutBufLine(hbuf, iLine, szNewLine);
}
}
}
if (filetype == 2) // PERL
{
if (len > 0)
{
if (szLine[0] == "#")
{
if (len > 1)
{
if (AsciiFromChar(szLine[1]) == 9)
{
tabSize = _tsGetTabSize() - 1;
szNewLine = strmid(szLine, 2, strlen(szLine));
}
}
if (szNewLine == "")
{
szNewLine = strmid(szLine, 1, strlen(szLine));
tabSize = 2;
}
PutBufLine(hbuf, iLine, szNewLine);
}
}
}
iLine = iLine + 1;
}
if (sel.lnFirst == sel.lnLast)
{
sel.ichFirst = sel.ichFirst - tabSize;
sel.ichLim = sel.ichLim - tabSize;
}
SetWndSel(hwnd, sel);
}
- Source Insight中代码块注释(利用/**/)及取消注释实现方法
- Source Insight中代码块注释(利用/**/)及取消注释实现方法
- Source Insight中代码块注释及取消注释实现方法
- source insight中注释_取注快捷键设置方法
- source insight整段代码注释
- Source Insight多行注释的方法
- insight中注释代码快捷键
- Source Insight中快速添加注释
- 给Source Insight添加块注释宏、全部选择宏
- 利用Source Insight宏语言脚本添加注释
- 利用Source Insight宏语言脚本添加注释
- 利用Source Insight宏语言脚本添加注释
- vim中代码注释与取消的两种方法
- source insight 自定义注释命令
- Source Insight 宏-单行注释
- Source Insight 批量注释宏
- source insight 添加注释快捷方式
- 转:Source Insight中多行注释
- AOP用法
- Program storage
- 信号 信号量 同步机制 异步机制
- 解决 WCF寄宿IIS时报错的问题
- 利用Oracle数据库的UTL_SMTP发送HTML 邮件
- Source Insight中代码块注释(利用/**/)及取消注释实现方法
- RichTextBox 键盘 Ctrl + Enter
- MFC中classwizard的使用
- JSP中EL表达式使用大于小于等符号
- Network password Network password 网络 安全
- django相关资源
- 预处理+编译+汇编+连接
- 给textview设置四周边框和底部边框
- JS弹窗和对话框大全