这个笔记写的比较好。
https://blog.youkuaiyun.com/ytmfdw/article/details/43487453
这个是sourceinsight里面设置快捷键的程序。
macro MultiLineComment() //注释多行code,快捷键是ctrl /
{
hwnd = GetCurrentWnd()
selection = GetWndSel(hwnd)
LnFirst =GetWndSelLnFirst(hwnd) //取首行行号
LnLast =GetWndSelLnLast(hwnd) //取末行行号
hbuf = GetCurrentBuf()
if(GetBufLine(hbuf, 0) =="//magic-number:tph85666031"){
stop
}
Ln = Lnfirst
buf = GetBufLine(hbuf, Ln)
len = strlen(buf)
while(Ln <= Lnlast) {
buf = GetBufLine(hbuf, Ln) //取Ln对应的行
if(buf ==""){ //跳过空行
Ln = Ln + 1
continue
}
if(StrMid(buf, 0, 1) == "/"){ //需要取消注释,防止只有单字符的行
if(StrMid(buf, 1, 2) == "/"){
PutBufLine(hbuf, Ln, StrMid(buf, 2, Strlen(buf)))
}
}
if(StrMid(buf,0,1) !="/"){ //需要添加注释
PutBufLine(hbuf, Ln, Cat("//", buf))
}
Ln = Ln + 1
}
SetWndSel(hwnd, selection)
}
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);
}