2011-11-02 172 views
15

在我的Visual Studio(2010 C#)解決方案中,我需要刪除包含匹配字符串模式的所有代碼行。Visual Studio宏查找字符串並刪除匹配行

例如,我想要刪除包含「.BackColor = System.Drawing.Color.Yellow;」的所有行。 Visual Studio的查找和替換功能不夠好,因爲您無法通過它來清除匹配的行。

所以我想我會需要一個宏。任何幫助表示讚賞。

+0

是否需要成爲VS解決方案?像文本板這樣的產品可以非常容易地瀏覽文件夾中的所有CS文件,並執行所需的替換 –

+1

不,它不需要是VS宏,儘管這將是首選。你可以引導我如何在TextPad中做到這一點嗎?我可以做「在文件中查找」(就像我可以在VS中),但我仍然無法找到一種方法來自動刪除結果行。 – Hadster

回答

5

我傾向於通過運行宏記錄器然後編輯生成的代碼在VS中創建宏。

因此,手動搜索模式,然後按F3。然後停止宏(或按行開始鍵,選擇行結束,按刪除,然後停止宏)。

編輯宏,刪除線的命令是:

DTE.ActiveDocument.Selection.SelectLine() 
DTE.ActiveDocument.Selection.Delete() 

您可以設置FINDTEXT查找文本:

DTE.ActiveDocument.Selection.FindText(".BackColor = System.Drawing.Color.Yellow;", vsFindOptions.vsFindOptionsFromStart) 
32

您可以使用「查找和替換」的功能Visual Studio刪除匹配的行。

關鍵是要匹配包括行尾字符在內的整行。您可以在通配符或正則表達式模式下執行此操作。在通配符模式下,用*開始表達式,並用*\n結束表達式。星號將匹配任意數量的字符,並且\n將匹配行尾字符。

在你的情況下,你的查詢將是「*.BackColor = System.Drawing.Color.Yellow;*\n」。替換字段應該留空。


要啓用通配符模式,在選擇「通配符」「使用:」領域的「查找選項」中的「查找和替換」對話框的部分。

Example showing how to turn on wildcard mode

+2

偉大的答案 - 比接受的更好! :) – Hybrid

+2

也適用於正則表達式搜索。 – mheyman

+1

而這個實際上在Visual Studio的最新版本中起作用,因爲宏被刪除了。 – Eris

1

對於Visual Studio 2015年(其中有沒有宏和無通配符),我做了以下內容:

  • 打開查找和替換(按Ctrl + H)
  • 設置爲使用正則表達式(Alt + E)
  • 將查找框設置爲

({line of code string})\ r?\ N({下一行互聯})

  • 保留替換框中空
  • 替換

凡 -

{代碼串的行} =的行你想刪除的代碼。請注意,你需要轉義字符如括號和引號用反斜槓()

{下一行黏合} =的下一行代碼(如果沒有這個你的行前的空格數將被刪除,但未來線將有兩倍的空間之前

例如,以除去

DoSomething的( 「你好」);

從 -

class A 
{ 
    void SomeMethod() 
    { 
     DoSomething("hello"); 
     DoSomethingElse(); 
    } 
} 

更換以下

(DoSomething的(\ 「你好\」)\)\ r \ n({})

+0

VS2013沒有通配符也沒有宏,這永遠不會找到「[MyAttribute]」。我試過:([MyAttribute])\ r?\ n({}),([MyAttribute])\ r?\ n({}),([MyAttribute])\ r \ n ])\ n({}),(\ [MyAttribute \])\ r?\ n({})。有任何想法嗎? – JoanComasFdz

+0

好的,我找到它了:FindWhat =「\ [MyAttribute \] \ r \ n」不加引號。 ReplaceWith =「\ r \ n」不加引號。 UseRegluarExpressions = TRUE。 – JoanComasFdz

2

與Visual Studio 2015年這個工作呢?我。打開搜索窗口,選中「使用正則表達式」複選標記。填充「找到什麼」與

.*myCodeHere.*\r?\n 

填充「替換」爲空字符串。

+0

這不會刪除該行。這留下一條空行。巨大差距。 – claudekennilol

+2

是的,這對我來說也是一個阻礙。但它沒有留下一條空白的線...... – Holger