Source Insight中程式碼塊註釋(利用/**/)及取消註釋實現方法
用了許久source Insight寫C/C++程式碼,發現其中沒有塊註釋功能很不方便,於是今天研究了下怎樣讓sourceInsight實現塊註釋。
網上介紹了很多方法實現塊註釋,但是都是對程式碼利用“//”逐行註釋,沒有用“/* */”實現的,我個人比較傾向於用/* */註釋程式碼塊,所以今天自己動手寫了利用”/* */“實現塊註釋程式碼。
好了,廢話不多說,直接上巨集程式碼,後面會介紹使用方法:
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) 給這些巨集分配按鍵。點選“鍵..”,選中你需要分配按鍵的巨集,點選“分配新鍵..”,然後在鍵盤上選擇你喜歡的按鍵吧~設定好之後,點選“好”。
好了,設定完畢,試試吧~
下面把網上有大神寫的單行註釋和利用“//”進行多行註釋的程式碼一起貼上來,方便大家使用,設定方法和前面的一樣。
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 = " [email protected]@"
else
szDay = Day
//szMonth = NumToName(Month)
if (Month < 10)
szMonth = "[email protected]@"
else
szMonth = Month
szDescription = Ask("請輸入修改原因")
// begin assembling the title string
InsBufLine(hbuf, ln+1, "/*@[email protected] @[email protected] @[email protected]@[email protected]@[email protected]*/")
}
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 = "[email protected]@"
else
szDay = Day
//szMonth = NumToName(Month)
if (Month < 10)
szMonth = "[email protected]@"
else
szMonth = Month
szDescription = Ask("請輸入修改原因:")
// begin assembling the title string
InsBufLine(hbuf, ln + 1, "/*@[email protected] @[email protected] @[email protected]@[email protected]@[email protected] 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 = "[email protected]@"
else
szDay = Day
//szMonth = NumToName(Month)
if (Month < 10)
szMonth = "[email protected]@"
else
szMonth = Month
InsBufLine(hbuf, ln + 1, "/*@[email protected] @[email protected]@[email protected]@[email protected] 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寫C/C++程式碼,發現其中沒有塊註釋功能很不方便,於是今天研究了下怎樣讓sourceInsight實現塊註釋。 網上介紹了很多方法實現塊註釋,但是都是對程式碼利用“//”逐行註釋,沒有用“/* */”實現的,我個人比較傾向於用/* */
ubuntu14.04中 gedit 註釋能顯示中文,而source insight中顯示為亂碼的解決辦法
1.亂碼顯示情況: 2.用gedit開啟檔案,並用ctrl+shift+s(另存為),其中charactor coding選為chinese simplified(GB2312); 2.修改個檔名, 並點選save. 3.用source insight開啟,看看是不是不
繼承中程式碼塊的執行順序
1.父類靜態物件,父類靜態程式碼塊 2.子類靜態物件,子類靜態程式碼塊 3.父類非靜態物件,父類非靜態程式碼塊 4.父類建構函式 5.子類非靜態物件,子類非靜態程式碼塊 6.子類建構函式 靜態成員變數、靜態程式碼塊(static 方法)>main方法&
Source Insight中使用正則表示式進行高階替換
問題描述: 程式碼中有個斷言函式,假設叫MyAssert,只有一個引數,用法例如: MyAssert(a >
java中程式碼塊的認知
在以往面試題中,出現過很多次關於程式碼塊執行順序的題目,目前可算是搞清楚執行順序了。看以下程式碼: package com.itcast.code; public class BlockTest { static{ System.out.println("我是Bl
mac 在使用使用Sublime Text3+Ctags+Cscope替代Source Insight中的一些問題
1.一開始使用xcode看kernel程式碼的時候超級累,看了有兩週,就不想看了,然後從晚上看到了一篇文章,學習筆記-使用Sublime Text3+Ctags+Cscope替代Source Insight,https://blog.csdn.net/lin111000713
java面試題:java中的單例設計模式及兩種實現方法的程式碼舉例
java面試時經常會問到關於單例設計模式,因為它能考察的知識點較多且在開發中經常用到。那我就來說一說我對於單例設計模式的一些淺見。首先,在Java中,什麼是單例呢?就是保證類在記憶體中只有一個物件。那麼
CSDN部落格中程式碼塊高亮
最近一直在用CSDN寫博文,一開始不是很精通,在新增程式碼塊的時候總是發現居然沒有高亮和複製;後面研究了一下,才弄明白。 1. 如何插入程式碼塊 1.1 方式一 編寫時點選 1.2 方式二 快捷鍵 Ctrl + Shift + K 2. 讓程式碼塊高亮 在csd
Thinkphp框架任意程式碼執行漏洞利用及修復
ThinkPHP是一個開源的PHP框架, 是為了簡化企業級應用開發和敏捷WEB應用開發而誕生的。最早誕生於2006年初,原名FCS,2007年元旦正式更名為ThinkPHP,並且遵循 Apache2開源協議釋出。早期的思想架構來源於Struts,後來經過不斷改進和完善,同
KEIL5與Source Insight同一個工程在Source Insight中亂碼的解決方法
來源不僅僅是一個原始碼檢視的好工具,同時也是程式設計的好工具。 出現註釋亂碼的解決辦法 在SI中“FILE”-->"Reload as Ecording"--->選擇與你
IDEA中多行註釋及取消註釋快捷鍵
1、一次性新增多行註釋的快捷鍵 首先選中要註釋區域,然後 ctrl+/ 這個是多行程式碼分行註釋,每行一個註釋符號 ctrl+shift+/ 這個是多行程式碼註釋在一個塊裡,只在開
Source Insight中檢視檔案顯示全路徑
使用Source insight的時候想看檔案的全路徑,但是預設的是中間省略的路徑,所以可以通過: 1.Options-->Preferences-->Display 設定Trim long path names with ellipses為取消選擇。如圖
source insight 中使用vim
Source Insight看程式碼時比較方便,而且它的程式碼自動完成功能比vim+ctags+cscope好用的多,可是我認為寫程式碼時,Source Insight的功能卻比不上vim。 我的設定是:在Source Insight中按F12呼叫gvim,開啟對應檔案,跳轉到對應的行。 以下是實現步驟:
PC_Lint在source insight中的整合與配置
pc_lint可以幫助source insight進行程式碼的靜態檢查: 1、首先,下載pc_lint 這個在百度上直接搜尋就可以了(安裝的時候按照預設目錄直接安裝在C盤就可以了,這樣方便一些,過程見http://www.docin.com/p-399952053.html
source insight中的快捷鍵總結
1.快捷鍵 1,Shift+F8高亮顯示指定字元。 2,Ctrl+F找出來的結果用F4,F3前進後退查詢。 3,Alt+,後退alt+.前進查詢關鍵字。 4,Alt+G或者F5跳轉到某個固定的行號。 5,Ctrl+M可以自己管理標號,自己可以定義一個編號,可以在一個檔案或者
iOS之Block程式碼塊的定義及使用
不會使用Block的iOS程式設計師,不是一個合格的程式設計師 Block沒有你想象中的那麼難,不要害怕,不要畏懼,勇敢嘗試 Block進階: Block其實就是一個程式碼塊,把你想要執行的程式碼封裝在這個程式碼塊裡,等到需要的時候再去呼叫。 個人覺得
java中程式碼塊的理解
public class Demo1{ static{ System.out.println("我愛java,我要學習"); } public static void main(String[] args) { {
程式碼塊的分類及作用
程式碼塊:用{}括起來的程式碼。 分類: 區域性程式碼塊:用於限定變數的生命週期,及早釋放,提高記憶體利用率。 構造程式碼塊:把多個構造方法中相同的程式碼可以放到這裡,每個構造方法執行前,首先執行構
android環境搭建之旅-- (三)XP下用source insight檢視程式碼和SSH,putty的安裝
前面已經介紹了samba伺服器的配置,那麼之前習慣用source insight看程式碼,有了共享也可以實現嗎??答案是肯定的。可以建立對映來實現 重啟過幾次發現ubuntu的IP幾次是變化的。 1.固定ubuntu的IP先在終端輸入#ifconfig檢視ip,然後就可以
如何在 Source Insight 中編譯和執行Java 程式
由於 Source Insight 的程式碼易讀的優越效能,,使用 Source Insight 編輯 Java 程式碼是一個不錯的選擇,當然它不能與專業的 Eclipse 及 Netbeans 這樣的IDE 相比; 本人使用它是因為 Source I