1. 程式人生 > >Source Insight中程式碼塊註釋(利用/**/)及取消註釋實現方法

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