В Visual Studio 2010 есть ли способ легко закомментировать строки в CSS? - PullRequest
20 голосов
/ 24 июня 2010

Кто-нибудь знает, есть ли способ в Visual Studio 2010 выделить и закомментировать строки в файлах CSS, как вы можете со всеми другими файлами (нажав кнопку)?Возможно расширение Visual Studio?Комментировать их вручную громоздко.

Ответы [ 2 ]

17 голосов
/ 24 июня 2010

К сожалению, обычные команды для комментирования и раскомментирования ( 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

Обновление 18 октября 2012
Согласно ответу dirq , существует расширение Web Essentials , которое обеспечивает комментирование и раскомментирование CSS.Я бы порекомендовал использовать это над макросами выше, поскольку он предоставляет другую отличную поддержку, кроме просто ярлыков комментирования CSS.

9 голосов
/ 25 октября 2011

Доступно расширение, которое работает лучше, чем макрос: Web Essentials. Проверьте это. http://visualstudiogallery.msdn.microsoft.com/6ed4c78f-a23e-49ad-b5fd-369af0c2107f

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...