Visual Studio:快捷键:重复行

Posted

技术标签:

【中文标题】Visual Studio:快捷键:重复行【英文标题】:Visual Studio : short cut Key : Duplicate Line 【发布时间】:2011-01-17 18:01:48 【问题描述】:

Visual Studio 2008 中有 Duplicate Line 命令的快捷方式吗?

一些类似的例子:

Notepad++中,我可以复制当前行:Ctrl+DEditPlus中:Ctrl+JNetBeans中:Ctrl+Shift+/↑ 在Eclipse中,Ctrl+Alt+/↑ 在 Vi/Vimyyp

【问题讨论】:

仅供参考,ReSharper 提供的众多好处之一就是能够执行此操作。 visualstudiogallery.msdn.microsoft.com/… 下载这个并且 alt + D 将复制您的选择,或者如果没有突出显示,它将复制整行。不幸的是,Visual Basic 宏在 2013 年似乎不起作用,只有 js 宏。 天啊,为复制行分配一个人喜欢的组合有什么问题???我用过Eclipse。 Ctrl + D 用于删除行。为什么VS里面这么复杂??? @mghhgm 下面是您正在寻找的答案。(shift+alt+down 或 shift+alt+up) vim的例子不是重复的,是ctrl+c;ctrl+v。 “Yank” 剪切和 p 粘贴。它与其他示例不太一样。 【参考方案1】:

在 Visual Studio 2019 中

Ctrl + D

在 Visual Studio 2017(v15.6 及更高版本)中

Ctrl + D

在 Visual Studio 2017(pre v15.6)中

(edit) 现在VS2017内置了这个功能:Ctrl + E, V 如果没有选中则复制一行,或重复选择。您可以将其分配给不同的组合键,或在菜单中找到它:

更多信息请参见this reference。

Pre VS2017,使用剪贴板的内置方法

正如@cand 提到的,你可以这样做 Ctrl + CCtrl + V.

Ctrl + C 如果未选择任何内容,将复制该行。

宏观解决方案(VS2017之前)

如果您想实现更完整的解决方案,也许是为了创建更简单的键盘快捷键,或者您不想影响剪贴板,请参阅本指南:

Visual Basic:

Imports System
Imports EnvDTE
Imports EnvDTE80
Imports System.Diagnostics
 
Public Module DuplicateLastLineModule
    Sub DuplicateLine()
        Dim line As String
        DTE.ActiveDocument.Selection.StartOfLine(0)
        DTE.ActiveDocument.Selection.EndOfLine(True)
        line = DTE.ActiveDocument.Selection.Text
        DTE.ActiveDocument.Selection.EndOfLine()
        DTE.ActiveDocument.Selection.NewLine()
        DTE.ActiveDocument.Selection.StartOfLine(0)
        DTE.ActiveDocument.Selection.Text = line
    End Sub
End Module

要创建宏,只需转到宏资源管理器 ("Tools->Macros->Macro Explorer" or Alt+F8) 并复制粘贴代码 一个新模块。现在只需为其分配一个键盘快捷键:

    转到工具->选项... 在环境下,点击键盘 在“显示包含的命令”文本框中,输入“重复”(这取决于您为模块提供的名称。) 您现在应该在下面的列表中看到宏 从“使用新快捷方式”列表中选择“文本编辑器” 在“按下快捷键”文本框中设置焦点并点击您希望使用的键盘上的组合(Ctrl+Shift+D 在 我的情况) 点击“分配”按钮 您现在应该会在“所选命令的快捷方式”文本框中看到快捷方式 点击确定按钮

就是这样。享受吧!

【讨论】:

我刚试过,有趣的是,当有一个带有短标签的“服务器端代码块”时,它会重复一些额外的字符,如下所示:<div>Profile.UserName: <%=Profile.UserName %></div> - 在使用此复制此行之后宏,它变成如下:<div>Profile.UserName: <%=Profile.UserName %></div> %></div>。如您所见,最后一部分是“重复的”。当其中没有服务器端代码块时,它可以正常工作。你知道解决方法吗?顺便说一句,我经历的另一个有趣的事情是这个宏相对“慢”,这是我没想到的...... :) 2014 年 2 月之后,出于安全原因禁用宏。向下滚动并查看 MasterHD 对解决方法的回答,以使 Wael 的方法即使在安全更新后也能继续工作。 我发现 Ctrl C + Ctrl V 在我已经将某些内容复制到剪贴板上并希望在粘贴之前复制一行的情况下受到限制。 为什么实现大多数其他编辑器非常有效和直观地执行的重复操作或键绑定到底是如此困难。 :// 为什么需要它。我在其他选项卡中复制了 smth,我来到此选项卡中的特定行,我复制行,然后使用 CTRL + V 粘贴一些代码。否则我必须再次重新复制其他代码部分。 ..【参考方案2】:

您可以下载一个免费的扩展程序here,它可以让您在不替换剪贴板内容的情况下复制行。

默认情况下它绑定到 Alt + D,但是您可以通过转到工具->选项->环境->键盘将其更改为您想要的任何内容。在搜索框中输入“Duplicate”并查找“Edit.DuplicateSelection”并将快捷方式编辑为您想要的任何内容。我更喜欢 Ctrl + D 与其他编辑器保持一致。

【讨论】:

这是您正在寻找的真正答案,这里发布的所有其他内容都很聪明,但不是所要求的。 Edit.DuplicateSelection 似乎没有出现在 VSE 2013 中。或者实际上带有术语 duplicate 的任何其他内容。 visualstudiogallery.msdn.microsoft.com/… 适用于 vse2013 Matthew,您必须单击此处的链接并安装扩展程序。然后你必须关闭视觉工作室并重新打开它。然后你必须去工具 ==> 选项 ==> 环境 ==> 键盘,然后你必须输入重复,你会看到它。然后你可以按 F4 让它像 QEDIT 或者你想要的任何东西,生活会很美好。 即使不得不安装另一个工具有点痛苦,但这个工具可以完成这项工作并且做得很好。谢谢!【参考方案3】:

很简单 Ctrl + C ; Ctrl + V ,检查这个 link。只要您不选择任何文本,当您按下 Ctrl+C 时,这将复制光标所在的行。

【讨论】:

在很多情况下您不想浏览剪贴板,例如,如果您想复制一行,然后用剪贴板中的内容替换其中的某些内容。 当然,但是问题要求的是快捷方式,而不是文本编辑的一般解决方案,所以我认为对于简单的目的来说就足够了(至少在我的情况下)。 谢谢,但我期待像 Edit Plus 中的 Ctrl+j 或 Notepad++ 中的 Crtl+D 之类的东西......在 VS2008 或 VS2010 中有没有 我只找到了这个。然而它并没有那么糟糕 - 当然使用 ctrl+D 会更容易,但是如果你想在 100 个副本中复制 1 行你可以使用 ctrl+c 来完成(不需要选择任何东西,只需将命令提示符放在想要的行上) + 100 次 ctrl+v。它仅比 ctrl+d 解决方案多一组击键。如果您想做更复杂的复制,问题可能会更大。 @Mason240 这也是我对已接受答案中引用部分的最初反应,但是附加信息“只要您不选择任何文本,这将复制光标所在的行...' 就我而言,这是一个理想的解决方案。【参考方案4】:

Ctrl + C + V 在 VS2012 上为我工作,没有扩展名。

【讨论】:

也适用于 VS2008! 适用于 VS2017。 需要一个不覆盖剪贴板的解决方案 只是为了补充答案,您只需按完整组合进行第一次复制。从第二个开始,只需重复按 Ctrl + V 即可继续复制该行。【参考方案5】:

Ctrl + D 在带有 Resharper 的 VS2012 中为我工作。这是 Resharper 的热键。

【讨论】:

不,不是,发帖后才知道,不过是Resharper的快捷方式。如果安装了 resharper,那么这可能会有所帮助。 我有reshaper,但不知道那个快捷方式!谢谢。 如果您使用 Resharper 的“Resharper 2.x 或 IntelliJ IDEA”键盘方案,这是默认快捷方式。 Resharper 让您在安装过程中选择键盘映射。 “Visual Studio”键盘方案是其中一种选择。如果您选择“Visual Studio”键盘方案,那么 Ctrl+D 将被映射到其他东西。 这是对 ReSharper 问题的回答。 请注意,这也适用于选择多行时,即您可以复制一大堆代码,而不仅仅是一行。缺点当然是 resharper 不是免费的(但似乎 .Net 世界比我来自的 Java 世界更习惯于此)。【参考方案6】:

在 Visual Studio 2013 中,您可以使用 Ctrl+C+V

【讨论】:

很高兴我漫步下来。这就是我想要的。 也在 VS Code Linux 上工作。 需要一个不覆盖剪贴板的解决方案 如果不覆盖剪贴板会很棒【参考方案7】:

这是一个基于 Wael 发布的链接中的宏,但在以下方面有所改进:

略短 稍微快一点 cmets :) 适用于以“///”开头的行 可以通过一次撤消来撤消
Imports System
Imports EnvDTE
Imports EnvDTE80

Public Module Module1

    Sub DuplicateLine()
        Dim sel As TextSelection = DTE.ActiveDocument.Selection
        sel.StartOfLine(0) '' move to start
        sel.EndOfLine(True) '' select to end
        Dim line As String = sel.Text
        sel.EndOfLine(False) '' move to end
        sel.Insert(ControlChars.NewLine + line, vsInsertFlags.vsInsertFlagsCollapseToEnd)
    End Sub

End Module

【讨论】:

是的,这个确实有效,接受的答案中的一个是将随机内容复制到新行中。干得好,谢谢! 我在VS 2010 Express中没有找到Macros选项,可以在那里实现吗? 2014 年 2 月之后,出于安全原因禁用宏。向下滚动并查看 MasterHD 对解决方法的回答,以使 Mark 的方法即使在安全更新后也能继续工作。【参考方案8】:

在 Visual Studio 2017 和其他版本中不需要宏或扩展

    转至Tools > Options > Environment > KeyboardsShow commands containing: 下写Edit.Duplicate 将光标置于Press shortcut keys: 并按Ctrl + D 并单击Assign 按钮 点击OK 保存新的键盘快捷键

【讨论】:

【参考方案9】:

如果你喜欢使用 CTRL+ALT+UPCTRL 来复制 Eclipse 风格的行(或块) +UP+DOWN,下面我为此发布宏:

Imports System
Imports EnvDTE
Imports EnvDTE80
Imports System.Diagnostics

Public Module DuplicateLineModule
    Sub DuplicateLineDown()
        Dim selection As TextSelection = DTE.ActiveDocument.Selection
        Dim lineNumber As Integer
        Dim line As String

        If selection.IsEmpty Then
            selection.StartOfLine(0)
            selection.EndOfLine(True)
        Else
            Dim top As Integer = selection.TopLine
            Dim bottom As Integer = selection.BottomLine

            selection.MoveToDisplayColumn(top, 0)
            selection.StartOfLine(0)

            selection.MoveToDisplayColumn(bottom, 0, True)
            selection.EndOfLine(True)
        End If

        lineNumber = selection.TopLine
        line = selection.Text

        selection.MoveToDisplayColumn(selection.BottomLine, 0)
        selection.EndOfLine()
        selection.Insert(vbNewLine & line)
    End Sub
    Sub DuplicateLineUp()
        Dim selection As TextSelection = DTE.ActiveDocument.Selection
        Dim lineNumber As Integer
        Dim line As String

        If selection.IsEmpty Then
            selection.StartOfLine(0)
            selection.EndOfLine(True)
        Else
            Dim top As Integer = selection.TopLine
            Dim bottom As Integer = selection.BottomLine

            selection.MoveToDisplayColumn(top, 0)
            selection.StartOfLine(0)

            selection.MoveToDisplayColumn(bottom, 0, True)
            selection.EndOfLine(True)
        End If

        lineNumber = selection.BottomLine
        line = selection.Text

        selection.MoveToDisplayColumn(selection.BottomLine, 0)
        selection.Insert(vbNewLine & line)
        selection.MoveToDisplayColumn(lineNumber, 0)
    End Sub
End Module

【讨论】:

【参考方案10】:

为什么有这么多冗长的方法来完成如此简单的事情?从 Microsoft 下载和安装扩展程序只需不到一分钟的时间。该页面说默认情况下它会将其绑定到 ALT+D,但对我来说它将它绑定到 CTRL+D 自动在 Visual Studio Community 2015 中,无需任何更改。

Here's the link to download the extension from Microsoft.com.

【讨论】:

问题是关于 Visual Studio 2008,而不是 2015 :) 需要注意的是,这个扩展复制了选中的行,而不是选中的。但它仍然有用。 这个对我来说最有用,因为我想要一个不会取代剪贴板中的解决方案。这个扩展正是我想要的。根据扩展作者的说法,这目前适用于 Visual Studio 2012、2013、2015 和 2017。【参考方案11】:

visual studio 代码WebMatrix)中:

向下复制行:Shift + Alt + down

向上复制行:Shift + Alt + up

删除行:Ctrl + Shift + k

【讨论】:

这是迄今为止最好的答案;它甚至可以让你复制一个完整的代码块——如果你愿意的话——只需选择多行。在 Visual Studio Code 1.7.2 中测试【参考方案12】:

由于我无法在我的 Visual Studio 2013 中使用宏,我找到了一个 Visual Studio 插件(我在 2012 年和 2013 年使用它)。 Duplicate Selection 重复选择和整行 - 它们只需要部分选择。标准快捷键是 ALT + D

【讨论】:

【参考方案13】:

虽然我意识到这不是键盘快捷键,但我想我会添加它,因为它不需要使用剪贴板并且可能对某些人有所帮助。

突出显示要复制的行。 按下控制,鼠标单击突出显示的文本,然后拖动到您想去的地方。它将复制突出显示的文本。

【讨论】:

使用内置功能实现相同的结果!这个问题只要求一个快捷方式 - 不一定是键盘快捷键!不过,如果不必涉及鼠标,那就更棒了。【参考方案14】:

我不知道这在 Visual Studio 2008 中是否存在,但在 Visual Studio 2010+ 中,您可以通过以下方式轻松做到这一点:

不要选择任何东西,然后按 Ctrl + C 然后(不做任何其他事情)Ctrl + V

【讨论】:

【参考方案15】:

我一直在使用 Wael 发布的宏:Duplicate line command for Visual Studio,但它在一周前停止工作,我猜是因为 Windows 更新。 我是对的,截至 2014 年 2 月,宏已在 VS2010(显然是 2008 年)中被禁用。

要解决此问题,您要么必须卸载安全更新,要么将一行代码添加到配置文件中,如 here 所示。

在 64 位 Windows 机器上,这些文件的默认路径是:

C:\Program Files (x86)\Common Files\Microsoft Shared\VSA\9.0\VsaEnv\vsaenv10.exe.config

C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe.config

...
<configuration>
    <runtime>
        <AllowDComReflection enabled="true"/>
        ...

必须管理员权限运行您的文本编辑器,否则它将无法工作!希望这可以帮助其他突然从他们下面拉出宏功能的人。

【讨论】:

【参考方案16】:

对于 Visual Studio 2012、2013、2015、2017,点击链接并下载扩展程序

https://marketplace.visualstudio.com/items?itemName=ctlajoie.DuplicateSelection

现在进入工具 > 选项 > 键盘,然后在搜索框中输入“Duplicate”(完整的命令字符串是“Edit.DuplicateSelection”)。在这里,您可以像绑定任何其他命令一样将其绑定到任何快捷方式。

【讨论】:

【参考方案17】:

只需将鼠标放在要复制的行上并执行 CTRL+C ,然后 CTRL+V在同一条线上。 像魔术一样工作:-)

【讨论】:

【参考方案18】:

在 Visual Studio 2008 中,您可以使用 CTRL + C + V

【讨论】:

【参考方案19】:

对于那些仍在 Visual Studio post-2008 上查看此问题的人,添加了一个真正的 Edit.Duplicate:

CTRL+E, V CTRL+D(VS 2017 15.6+)

【讨论】:

【参考方案20】:

对于 Visual Studio 代码 2019

编辑菜单键盘快捷键:ctrl+k ctrl+s

将“向下复制行”(Shift + Alt + DownArrow)编辑为您自己的快捷方式。

你可以找到它,命令 ID:editor.action.copyLinesDownAction

对我来说,是 ctrl+d

【讨论】:

【参考方案21】:

Ctrl + D 是 VS 2017 v15.6 中引入的一个新快捷方式,似乎与 Ctrl + E, V

Ctrl + D 将复制光标所在的行并将其插入到焦点所在行的正下方。如果您想复制一组特定的代码,只需在调用复制代码命令之前选择您要复制的代码部分。

它不会影响您的剪贴板

Source

【讨论】:

全新安装 VS2017 和 VS2019:Ctrl+D 默认未映射到 Editor.DuplicateLine...【参考方案22】:

http://www.jetbrains.com/resharper/

我的故事:开始在一家新公司工作,之前从未使用过 Visual Studio。首先要做的事情之一 - 如何复制行。设置宏后 ReSharper 告诉我:你想替换我的快捷方式吗:“重复文本”:)

【讨论】:

resharper - 非常慢【参考方案23】:

在 Visual Studio 2010 中,您可以使用 CTRL + INSERT 复制光标所在的整行,然后您可以使用 Ctrl + VSHIFT + INSERT 粘贴。

【讨论】:

【参考方案24】:

VS 2017 它的 Ctrl + DCtrl + C ; Ctrl + V 他们都为我工作。

【讨论】:

【参考方案25】:

您想要的命令是Edit.Duplicate。它映射到 CtrlECtrlV。这不会覆盖您的剪贴板。

【讨论】:

【参考方案26】:

我使用应用程序链接:AutoHotkey,下面的代码保存在CommentDuplikateSaveClipboard.ahk 文件中。您可以轻松编辑/删除快捷方式。 我在 Windows 中的 Autostart 中有指向此文件 "Shortcut to CommentDuplikateSaveClipboard.ahk" 的链接。 此脚本保护您的剪贴板。 如果您更好奇,您可以为 thisable/enable 脚本添加快捷方式。 我有时会使用非常令人印象深刻的Multi Clipboard 脚本来轻松处理许多保存在磁盘上的clips 并与 CTRL+C,X kbd>,V 复制、粘贴、剪切、下一个、上一个、删除这个、全部删除。

;CommentDuplikateSaveClipboard.ahk

!c:: ; Alt+C === Duplicate Line
^d:: ; Ctrl+D
ClipSaved := ClipboardAll
Send, ENDSHIFTDOWNHOMESHIFTUPCTRLDOWNcCTRLUPENDENTERCTRLDOWNvCTRLUPHOME
Clipboard := ClipSaved
ClipSaved =
return

!x:: ; Alt+X === Comment Duplicate Line
ClipSaved := ClipboardAll
Send, ENDSHIFTDOWNHOMESHIFTUPCTRLDOWNcCTRLUPLEFT//ENDENTERCTRLDOWNvCTRLUPHOME
Clipboard := ClipSaved
ClipSaved =
return

!z:: ; Alt+Z === Del uncomment  Line
ClipSaved := ClipboardAll
Send, ENDSHIFTDOWNUPENDSHIFTUPDELHOMEDELDEL
Clipboard := ClipSaved
ClipSaved =
return

!d:: ; Alt+D === Delete line
Send, ENDSHIFTDOWNUPENDSHIFTUPDEL
return

!s:: ; Alt+S === Swap lines
ClipSaved := ClipboardAll
Send, ENDSHIFTDOWNUPENDSHIFTUPCTRLDOWNxCTRLUPUPENDCTRLDOWNvCTRLUPHOME
Clipboard := ClipSaved
ClipSaved =
return

!a:: ; Alt+A === Comment this line, uncomment above
Send, ENDHOME//UPHOMEDELDEL
return

【讨论】:

【参考方案27】:

不是答案,只是一个有用的补充: 作为免费赠品,我刚刚发明了一个 RemoveLineOrBlock 宏(嗯……嗯……调整了 Lolo 发布的代码)。尽情享受吧!

Imports System
Imports EnvDTE
Imports EnvDTE80
Imports EnvDTE90
Imports EnvDTE90a
Imports EnvDTE100
Imports System.Diagnostics

Public Module RemoveLineOrBlock

    Sub RemoveLineOrBlock()
        Dim selection As TextSelection = DTE.ActiveDocument.Selection
        Dim lineNumber As Integer
        Dim line As String

        If selection.IsEmpty Then
            selection.StartOfLine(0)
            selection.EndOfLine(True)
        Else
            Dim top As Integer = selection.TopLine
            Dim bottom As Integer = selection.BottomLine

            selection.MoveToDisplayColumn(top, 0)
            selection.StartOfLine(0)

            selection.MoveToDisplayColumn(bottom, 0, True)
            selection.EndOfLine(True)
        End If

        selection.LineDown(True)
        selection.StartOfLine(vsStartOfLineOptions.vsStartOfLineOptionsFirstColumn,True)

        selection.Delete()

        selection.MoveToDisplayColumn(selection.BottomLine, 0)
        selection.StartOfLine(vsStartOfLineOptions.vsStartOfLineOptionsFirstText)

    End Sub

End Module

【讨论】:

【参考方案28】:

在VS2019 和VS2017 中,您可以选择Tools->Options->Keyboard,您可以在方案下拉列表中选择Resharper (Visual Studio ) 选项,你会得到一个映射,就像你使用 Resharper 一样,在这种情况下 Ctrl + D 就可以了用于复制行。无论如何,基于documentation,这应该在 Visual Studio 2017 版本 15.8 或更高版本

【讨论】:

【参考方案29】:

如果你有 macOS 版本,cmd+shift+D 可以为你完成这项工作

【讨论】:

【参考方案30】:

在 Linux Mint 上,您可以这样做; Ctrl + Alt + Shift + 2 => 复制 Ctrl + Alt + Shift + 8 => 向下复制

【讨论】:

以上是关于Visual Studio:快捷键:重复行的主要内容,如果未能解决你的问题,请参考以下文章

折叠 Visual Studio Code 中的所有方法 [重复]

Visual Studio Code:复制行快捷方式

vscode 向下复制当前行(即visual studio 中的Ctrl + D)功能快捷键

vscode 向下复制当前行(即visual studio 中的Ctrl + D)功能快捷键

Visual Studio Code 快捷键大全(Windows)

Visual Studio CODE中的折叠和展开代码[重复]