代码之家  ›  专栏  ›  技术社区  ›  jeremcc chris

在Visual Studio 2010中,有没有一种方法可以轻松地注释掉CSS中的行?

  •  20
  • jeremcc chris  · 技术社区  · 14 年前

    有人知道在Visual Studio 2010中是否有一种方法可以像处理所有其他文件那样(通过单击按钮)突出显示和注释CSS文件中的行?可能是Visual Studio扩展?手动评论是很麻烦的。

    2 回复  |  直到 12 年前
        1
  •  17
  •   Community Nick Dandoulakis    7 年前

    不幸的是,用于注释和取消注释的常规命令( Ctrl键 + K + C Ctrl键 + K + U )不适用于CSS。相反,您需要记录或编写执行此操作的宏,并将其附加到自己的快捷方式。

    要对所选文本进行注释(注意,这是快速且脏的,因此将其作为单个块进行注释):

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

    更新
    下面这个新的命令更像是常规的注释命令和逐行的注释。这意味着您不必在手前选择文本。这也将所有更改作为一个可撤消的操作进行,并检查文件扩展名,以便您可以将其分配给常规快捷方式,并且它将对所有文件都有效。

    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
    

    更新以取消注释
    此宏执行反向任务。同样,它的实现是为了在需要时,通过检查文件扩展名并遵从标准,它可以为所有文档工作。 Edit.UncommentSelection 非css文件的命令。

    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
    

    更新日期:2012年10月18日
    按照 dirq's answer ,有一个扩展名, Web Essentials 它提供CSS注释和取消注释。我建议在上面的宏上使用它,因为除了CSS注释快捷方式之外,它还提供了其他很好的支持。

        2
  •  9
  •   dirq    13 年前

    有一个扩展比宏Web Essentials工作得更好。过来看。 http://visualstudiogallery.msdn.microsoft.com/6ed4c78f-a23e-49ad-b5fd-369af0c2107f