2010-06-24 6 views
20

Weiß jemand, ob es in Visual Studio 2010 eine Möglichkeit gibt, Zeilen in CSS-Dateien wie bei allen anderen Dateien (durch Klicken auf eine Schaltfläche) hervorzuheben und auszukommentieren? Vielleicht eine Visual Studio Erweiterung? Sie manuell zu kommentieren ist umständlich.Gibt es in Visual Studio 2010 eine Möglichkeit, Zeilen in CSS einfach zu kommentieren?

+0

ctrl-k-ctrl-c funktioniert nicht? (Ich habe es nicht speziell für CSS-Dateien verwendet, also weiß nicht, ob es dort funktioniert) – jalf

+0

+! Guter Punkt - ich habe das nie bemerkt, STRG + K + C funktioniert nicht und es gibt keine Menüoption zum Auskommentieren. – Fenton

Antwort

17

Leider sind die regulären Befehle zur Kommentierung und uncommenting (Ctrl +K + C und Ctrl +K + U) funktionieren nicht für CSS. Stattdessen müssen Sie ein Makro, das dies tut, aufzeichnen oder schreiben und es an Ihre eigene Verknüpfung anhängen.

Um den ausgewählten Text Kommentar (beachten Sie, das ist schnell und schmutzig und daher bemerkt es als ein einzelner Block):

Sub CssComment() 
    DTE.ActiveDocument.Selection.Text = "/*" + DTE.ActiveDocument.Selection.Text + "*/" 
End Sub 

aktualisieren
Diese neue unten mehr wie die regelmäßigen Kommentar Befehl funktioniert und Kommentare auf einer Zeile-für-Zeile-Basis. Es bedeutet, dass Sie den Text nicht vorher auswählen müssen. Dies macht auch alle Änderungen als eine einzelne rückgängig machbare Operation und überprüft die Dateierweiterung, so dass Sie dies der regulären Verknüpfung zuweisen können und es wird für alle Dateien funktionieren.

Sub CommentCss() 
    Dim ts1 As TextSelection = CType(DTE.ActiveDocument.Selection(), EnvDTE.TextSelection) 

    Dim fileName = DTE.ActiveDocument.FullName 

    ' We should default to regular commenting if we're not editing CSS. 
    ' This allows this macro to be attached to the Ctrl+K+C shortcut 
    ' without breaking existing file format commenting. 
    If Not fileName.EndsWith(".css") Then 
     DTE.ExecuteCommand("Edit.CommentSelection") 
     Return 
    End If 

    Dim weOpenedUndo As Boolean = False 
    If Not DTE.UndoContext.IsOpen Then 
     DTE.UndoContext.Open("CommentCSS") 
     weOpenedUndo = True 
    End If 

    ts1.StartOfLine(vsStartOfLineOptions.vsStartOfLineOptionsFirstColumn, True) 
    Dim ep1 As EditPoint2 = ts1.TopPoint.CreateEditPoint() 
    Dim ep2 As EditPoint2 = ts1.BottomPoint.CreateEditPoint() 

    While ep1.Line <= ep2.Line 
     Dim text As String = ep1.GetLines(ep1.Line, ep1.Line + 1) 
     text = text.Trim() 

     If Not text.StartsWith("/*") Or Not text.EndsWith("*/") Then 
      ep1.StartOfLine() 
      ep1.Insert("/*") 
      ep1.EndOfLine() 
      ep1.Insert("*/") 
     End If 
     Dim lineBeforeDown As Integer = ep1.Line 
     ep1.LineDown() 

     If ep1.Line = lineBeforeDown Then 
      Exit While 
     End If 
    End While 

    ts1.StartOfLine(vsStartOfLineOptions.vsStartOfLineOptionsFirstColumn, True) 

    If weOpenedUndo Then 
     DTE.UndoContext.Close() 
    End If 
End Sub 

Update für uncommenting
Dieses Makro führt die umgekehrte Aufgabe. Erneut ist er so implementiert, dass er bei Bedarf für alle Dokumente funktioniert, indem er die Dateierweiterung überprüft und den Standardbefehl Edit.UncommentSelection für Nicht-CSS-Dateien verschiebt.

Sub UncommentCss() 
    Dim ts1 As TextSelection = CType(DTE.ActiveDocument.Selection(), EnvDTE.TextSelection) 
    Dim ep1 As EditPoint2 = ts1.TopPoint.CreateEditPoint() 
    Dim ep2 As EditPoint2 = ts1.BottomPoint.CreateEditPoint() 

    Dim fileName = DTE.ActiveDocument.FullName 

    ' We should default to regular commenting if we're not editing CSS. 
    ' This allows this macro to be attached to the Ctrl+K+C shortcut 
    ' without breaking existing file format commenting. 
    If Not fileName.EndsWith(".css") Then 
     DTE.ExecuteCommand("Edit.UncommentSelection") 
     Return 
    End If 

    Dim weOpenedUndo As Boolean = False 
    If Not DTE.UndoContext.IsOpen Then 
     DTE.UndoContext.Open("UncommentCSS") 
     weOpenedUndo = True 
    End If 

    While ep1.Line <= ep2.Line 
     ep1.StartOfLine() 

     Dim text As String = ep1.GetLines(ep1.Line, ep1.Line + 1) 
     text = text.Trim() 

     If text.StartsWith("/*") And text.EndsWith("*/") Then 
      Dim epEndOfLine As EditPoint2 = ep1.CreateEditPoint() 
      epEndOfLine.EndOfLine() 
      text = text.Substring(2, text.Length - 4) 
      ep1.ReplaceText(epEndOfLine, text, vsEPReplaceTextOptions.vsEPReplaceTextKeepMarkers Or vsEPReplaceTextOptions.vsEPReplaceTextAutoformat) 
     End If 

     Dim lineBeforeDown As Integer = ep1.Line 
     ep1.LineDown() 

     If ep1.Line = lineBeforeDown Then 
      Exit While 
     End If 
    End While 

    ts1.StartOfLine(vsStartOfLineOptions.vsStartOfLineOptionsFirstColumn, True) 

    If weOpenedUndo Then 
     DTE.UndoContext.Close() 
    End If 
End Sub 

aktualisieren 18Oct2012
Per dirq's answer, gibt es eine Erweiterung, Web Essentials die CSS zu kommentieren und Auskommentierung bietet. Ich würde empfehlen, dies über die obigen Makros zu verwenden, da es neben CSS-Kommentarbefehlungen noch weitere großartige Unterstützung bietet.

+0

STRG + K + C und STRG + K + U funktioniert nicht. Können Sie das Makro näher erläutern? –

+0

@rdkleine: Arbeiten daran :) –

+0

@Jeff Sweet! Sieht so aus, als wäre es ziemlich einfach, aber ich werde es dir beweisen lassen. :-D – jeremcc

Verwandte Themen