Visual Studio C++ 切换评论?评论而不选择整行?

Posted

技术标签:

【中文标题】Visual Studio C++ 切换评论?评论而不选择整行?【英文标题】:visual studio C++ toggle comment ? comment while not whole line is selected? 【发布时间】:2011-05-20 01:00:02 【问题描述】:

实际上有2个问题:

1) 在选定行上切换评论的快捷方式?在我使用的所有 iDE 上都可用,从 notepad++ 开始

2)ctrl-k, ctrl-c 表现出这种行为(引自某个措辞优美的地方):

C#: 一些文本所在的每一行 选择的评论在 以双斜杠开头的行。如果 没有选择任何内容,行 光标被注释了。

C++:如果没有选择或 完整的行被选中,它 行为如上。但是,如果部分 选择了一行,没有评论 选择作为选择的一部分(例如。 选择一个中间的东西 代码行),那么选择是 被 /* 和 */ 包围。

由于我使用 C++ 编写代码,我觉得这种行为很烦人 - 我希望能够注释掉部分选中的行 - 有什么解决方法吗?

【问题讨论】:

好吧,解决方法是选择整行! 我可以投反对票吗?即使记事本++也有这种行为,它真的很有用——你在中间选择了一些东西——点击 Alt-Q 行被注释掉了——我不敢相信这在 VS 中是不可能的! @user:你不能投反对票,因为它实际上不是一个答案,哈哈。我并没有认为这是对这个问题的认真回答,我更认为它很有趣。虽然我不得不说这是一个我永远不会使用的功能——按“Home”然后按两个 /s 几乎和按组合键一样快(事实上它少了一个按键!)。 我知道 - 是在开玩笑 - 只是品味问题 - 在选择多行时也(更多)有用,并且不关心完全选择第一个和最后一个 - 那么 切换评论部分? @Praetorian - 重要的是,亲爱的,当您注释掉某些内容时,请在其下方写下和替换,并且您想快速(不必选择整行,只需一个快速的鼠标手势)在两者之间切换 - 例如。天哪——我问了一个问题——要么回答要么不回答,请给我一些编程技巧。而那些“花哨”的评论快捷方式是基本的,并且存在于所有的 IDE 中。我确实同意 home//==Cntrl+K+C。 【参考方案1】:

选择了某些文本的每一行都在行首用双斜杠注释。如果未选择任何内容,则注释光标所在的行。

如果选择多行: 只有在评论选择中的所有行时,我的解决方案才会进行解雇。我发现它更直观。


解决方案:

工具 -> -> 宏 IDE...

Macro Explorer 中,右键单击 Macros,然后单击 New Macro Project...

为您的宏命名,例如MyMacroProject 并点击添加

宏浏览器中的新宏项目中右键单击Module1 并点击编辑

将其粘贴到宏编辑器窗口中:

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

保存此文件并关闭宏编辑器窗口。

将你的宏绑定到一个键:

工具 -> 选项... -> 环境 -> 键盘

显示包含以下内容的命令中输入: ToggleCommentLine

选择 Macros.MyMacroProject.Module1.ToggleCommentLine。

按快捷键:处设置一个键。 ,然后点击分配,然后点击确定

享受吧。

【讨论】:

非常酷,谢谢!我想赏金是给你的,我再等几天看看有没有人愿意回答。 实际上我有一个评论:您似乎使用特定于 C 的正则表达式来完成这项工作。使用 Visual Studio 更通用、更健壮的注释和取消注释功能不是更好吗? 当这个解决方案不够通用或不够健壮时,您能提到任何用例吗?您希望它在多行注释 (/* ... */) 中执行时从注释中排除行? 任何非 C 语言,例如。 Haskell,html,你的名字! @static_rtti:你是对的 - 这个解决方案需要更通用 - 如果更通用并经过你的测试,我会接受它(我没有安装 VS)。 ch0kee :“我以为我们现在正在谈论 C++”-->一般,可重用代码总是比一次性 hack 更好——正如俗话所说,富裕和健康比贫穷和生病更好。此外,这个问题并没有谈到在 C++ 中切换 cmets - 尽管当时我正在使用 C++ 进行编码 - 并且提供此功能的所有地方都是 offered (适用于所有支持的语言);)【参考方案2】:

这种行为是故意的。如果用户需要对不需要重写整行的单行进行微小的临时更改,则使用 Ctrl+K、Ctrl+C 快捷键对允许他/她仅注释掉更改而不是整个行。

编辑:

至于问题一,它是相同的快捷键对:Ctrl+K,Ctrl+C 打开任何 cmets,Ctrl+K,Ctrl+U 关闭任何 cmets。

编辑 2:

如果你还是不满意,可以从整个番茄软件中获取 Visual Assist X:http://www.wholetomato.com/ 当文本被突出显示时,它会为“/”和“*”键添加一个额外的注释快捷方式映射。

【讨论】:

我同意它很有用——不过它应该有另一个快捷方式——关于 q1 有什么想法吗? 谢谢 - 但切换评论意味着选择一些已评论的行和一些未评论的行,并同时切换他们的评论状态【参考方案3】:

如果您想将切换 cmets 的快捷键更改为 ctrl+/ 键。您可以使用 Visual Studio 的 Hot 命令并安装它。重新启动 Visual Studio 后,它就可以工作了!

https://marketplace.visualstudio.com/items?itemName=JustinClareburtMSFT.HotCommandsforVisualStudio

【讨论】:

【参考方案4】:

在 Visual Studio 2019 中,您几乎可以通过三次单击第一行然后拖动到最后一行来获得所需的功能。这将选择整行。

然后像往常一样使用 Ctrl-K Ctrl-C。它将插入// 而不是/**/

【讨论】:

【参考方案5】:

有一个具有更“自然”切换评论体验的扩展程序。它不会注释空行,但会取消注释选定的带有空行的文本块。

请注意,它是默认键绑定,Ctrl+/ 与 VS 2019 中的命令冲突,因此安装时不会设置,但文档显示你如何改变它。

https://marketplace.visualstudio.com/items?itemName=munyabe.ToggleComment

【讨论】:

【参考方案6】:

Toggle 与 Toggle On 和 Toggle Off 不同。

如果我切换一组行 - 其中一些被注释掉,而另一些则没有, 然后一个 TOGGLE 将注释掉之前没有注释掉的行,并取消注释掉之前注释掉的行 - 使用 SINGLE 击键。

【讨论】:

是的 - 这就是问题所在 - 您应该将此作为评论添加到其他答案而不是作为答案

以上是关于Visual Studio C++ 切换评论?评论而不选择整行?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Visual Studio 2019 中为 C# WPF 切换 XAML 中的行注释

Visual Studio /**/ 评论快捷方式?

如何在 Visual Studio 中搜索评论? (对比 2015 年)

如何在 Visual Studio 2010 中自动折叠某些评论?

Visual Studio C++ 多行注释

在 Visual Studio 2019 中运行 python matplotlibcpp