C++ 我不是,同时切换他们的评论状态是的-这就是问题所在-你应该将此作为评论添加到其他答案中,而不是作为回答非常酷,谢谢!我猜悬赏是给你的,我再等几天,看看是否有人愿意回答。实际上我有一句话:你似乎用了一个C特定的正则表达式来做这项工作。使用VisualStud

C++ 我不是,同时切换他们的评论状态是的-这就是问题所在-你应该将此作为评论添加到其他答案中,而不是作为回答非常酷,谢谢!我猜悬赏是给你的,我再等几天,看看是否有人愿意回答。实际上我有一句话:你似乎用了一个C特定的正则表达式来做这项工作。使用VisualStud,c++,visual-studio-2010,comments,toggle,C++,Visual Studio 2010,Comments,Toggle,我不是,同时切换他们的评论状态是的-这就是问题所在-你应该将此作为评论添加到其他答案中,而不是作为回答非常酷,谢谢!我猜悬赏是给你的,我再等几天,看看是否有人愿意回答。实际上我有一句话:你似乎用了一个C特定的正则表达式来做这项工作。使用VisualStudio的注释和取消注释功能不是更好吗?这些功能更通用、更健壮?当此解决方案不够通用或健壮时,您能提到任何用例吗?当在多行注释(/*…*/)中执行时,您希望它从注释中排除行,例如,任何非C语言。Haskell,HTML,随便你说@静态:你是对的-这


我不是,同时切换他们的评论状态是的-这就是问题所在-你应该将此作为评论添加到其他答案中,而不是作为回答非常酷,谢谢!我猜悬赏是给你的,我再等几天,看看是否有人愿意回答。实际上我有一句话:你似乎用了一个C特定的正则表达式来做这项工作。使用VisualStudio的注释和取消注释功能不是更好吗?这些功能更通用、更健壮?当此解决方案不够通用或健壮时,您能提到任何用例吗?当在多行注释(
/*…*/
)中执行时,您希望它从注释中排除行,例如,任何非C语言。Haskell,HTML,随便你说@静态:你是对的-这个解决方案需要变得更通用-如果变得更通用并由你测试,我会接受它(我没有安装VS)。“我想我们现在讨论的是C++”——“一般的,可重用的代码总是胜过一个黑客”——正如穷人所说的那样,比穷人和病症更富有和健康。此外,问题不讨论在C++中切换评论——虽然我当时在C++中编码——并且提供了所有的这个特性(对于所有支持的语言);
Option Strict Off
Option Explicit Off
Imports EnvDTE
Imports System.Text.RegularExpressions

Public Module Module1
    Sub ToggleCommentLine()
        Dim sel As TextSelection = DTE.ActiveDocument.Selection

        Dim firstLine As Integer = sel.TopPoint.Line
        Dim lastLine As Integer = sel.BottomPoint.Line

        sel.GotoLine(firstLine, True)
        sel.LineDown(True, lastLine - firstLine)
        sel.EndOfLine(True)

        'we un-comment only if there is no commented line
        Dim allLinesCommented As Boolean = True

        Dim lineIndex As Integer = firstLine
        While allLinesCommented And (lineIndex <= lastLine)
            sel.GotoLine(lineIndex, True)
            allLinesCommented = Regex.IsMatch(sel.Text, "^\s*//.*$")
            lineIndex += 1
        End While

        'iterate over the lines
        For lineIndex = firstLine To lastLine
            sel.GotoLine(lineIndex, True)
            Dim line As String = sel.Text
            Dim m As Match = Regex.Match(line, "^(\s*)(//)(.*)$")
            If allLinesCommented Then
                sel.Text = m.Groups(1).Value & m.Groups(3).Value
            ElseIf Not m.Success Then
                sel.StartOfLine(vsStartOfLineOptions.vsStartOfLineOptionsFirstColumn)
                sel.Text = "//"
            End If
        Next

        'select all the affected lines
        sel.GotoLine(firstLine, True)
        sel.LineDown(True, lastLine - firstLine)
        sel.EndOfLine(True)
    End Sub
End Module