【问题标题】:In Visual Studio 2010, is there a way to easily comment out lines in CSS?在 Visual Studio 2010 中,有没有办法轻松注释掉 CSS 中的行?
【发布时间】:2010-06-24 13:36:58
【问题描述】:

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

【问题讨论】:

  • ctrl-k-ctrl-c 不起作用? (我没有专门将它用于 CSS 文件,所以不知道它是否适用于那里)
  • +!好点 - 我从来没有注意到这一点,CTRL+K+C 不起作用,也没有菜单选项可以注释掉。

标签: css visual-studio visual-studio-2010


【解决方案1】:

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

评论选中的文本(注意,这是快速而肮脏的,因此将它作为一个单独的块):

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

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

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

取消注释更新
这个宏执行相反的任务。同样,它的实现是为了在需要时通过检查文件扩展名并遵从非 CSS 文件的标准 Edit.UncommentSelection 命令来处理所有文档。

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 注释快捷方式之外的其他强大支持。

【讨论】:

  • CTRL+K+C 和 CTRL+K+U 不起作用。你能详细说明一下宏吗?
  • @Jeff Sweet!看起来这很容易,但我会让你证明这一点。 :-D
  • @jeremcc:没问题。当我解决它时,我会用一个更好的宏来更新我的答案。
  • @jeremcc:更新以包含更好的注释宏并包含取消注释对应项。
  • @jeremcc:不客气。这是一个有趣的练习。我学到了很多关于 Visual Studio 对象模型的知识。
【解决方案2】:

有一个比宏更有效的扩展:Web Essentials。看看这个。 http://visualstudiogallery.msdn.microsoft.com/6ed4c78f-a23e-49ad-b5fd-369af0c2107f

【讨论】:

    猜你喜欢
    • 2016-03-17
    • 1970-01-01
    • 2023-01-31
    • 2011-02-01
    • 1970-01-01
    • 2017-04-12
    • 2010-09-12
    • 2017-09-25
    • 2011-08-01
    相关资源
    最近更新 更多