Visual Studio:快捷键:重复行


423

Visual Studio中是否有重复行命令的快捷方式 2008中?

一些类似的例子:


6
仅出于信息目的,ReSharper提供的众多好处之一就是能够做到这一点。
AakashM 2010年

2
visualstudiogallery.msdn.microsoft.com/… 下载此文件,然后alt + D将复制您的选择,或者如果未突出显示任何内容,则将复制整个行。不幸的是,Visual Basic宏似乎在2013年不起作用,只有js宏。
2015年

1
OMG,为复制线路分配一个人喜欢的组合有什么问题???我曾经使用过Eclipse。Ctrl + D用于删除行。为什么在VS中如此复杂???
Andrii Muzychuk

2
下面的@mghhgm是您要寻找的答案。(shift + alt +下移或shift + alt +上移)
Victor Barrantes

1
vim示例不重复,它是ctrl + c; ctrl + v。切成“ Yank”并粘贴p。它与其他示例不太相同。
ANeves '17

Answers:


406

在Visual Studio 2019中

Ctrl + D

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

Ctrl + D

在Visual Studio 2017(v15.6之前的版本)中

(编辑)此功能现在已在VS2017中内置:Ctrl+ EV如果未选择任何内容,则复制一行,或复制所选内容。您可以将其分配给其他组合键,或在菜单中找到它:

VS2017中的重复行

有关更多信息,请参见此参考

VS2017之前的版本,使用剪贴板的内置方法

作为@cand提到的,你可以做Ctrl+ C; Ctrl+ V

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

宏解决方案(VS2017之前的版本)

如果您想实施一个更完整的解决方案,或者创建一个更简单的键盘快捷键,或者不想影响剪贴板,请参阅以下指南:

Visual Studio的重复行命令

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

要创建宏,只需转到宏资源管理器(“工具->宏->宏浏览器”或Alt+ F8),然后将代码复制粘贴到新模块中。现在,只需为其分配键盘快捷键:

  1. 转到工具->选项...
  2. 在环境下,单击键盘
  3. 在“显示包含的命令”文本框中,输入“重复”(根据您给模块指定的名称)。
  4. 您现在应该在下面的列表中看到该宏
  5. 从“使用新的快捷方式”列表中选择“文本编辑器”
  6. 在“按快捷键”文本框中设置焦点,然后按您希望使用的键盘上的组合键(在我的情况下为Ctrl+ Shift+ D
  7. 点击“分配”按钮
  8. 您现在应该在“所选命令的快捷方式”文本框中看到快捷方式
  9. 点击确定按钮

就是这样。请享用!


3
我刚才试了一下,有趣的是它重复了一些额外的字符时,有一个“服务器端代码块”短标签,像这样:<div>Profile.UserName: <%=Profile.UserName %></div>-使用宏复制这条线之后,就变成:<div>Profile.UserName: <%=Profile.UserName %></div> %></div>。如您所见,最后一部分是“重复的”。如果其中没有服务器端代码块,则工作正常。您知道解决方法吗?顺便说一句,我经历的另一件有趣的事情是该宏相对“慢”,这没想到... :)
Sk8erPeter 2012年

6
2014年2月之后,由于安全原因,宏被禁用。向下滚动并查看MasterHD的解决方案答案,以使Wael的方法即使在安全更新后也能正常工作。
MasterHD 2014年

4
如果我已经将某些内容复制到剪贴板上,并且想在粘贴之前复制一行,我发现Ctrl C + Ctrl V是有限制的。
萨韦,2016年

1
为什么实际上很难执行重复的动作或键绑定,而大多数其他编辑器却非常高效且直观地执行了这些动作或键绑定。:/
kisanme

1
为什么需要它。我在其他选项卡中复制了smth,我来到了此选项卡中的特定行,我复制了一行,然后使用<code> CTRL + V </ code>粘贴了一些代码。否则,我必须再次重新复制其他代码部分。 ..
Augustas'Feb 1'1

136

您可以在此处下载免费的扩展程序,使您无需替换剪贴板内容即可复制行。

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


23
这是您要找的真正答案,此处发布的所有其他内容都很聪明,但并非要求的内容。
Remco Boom

8
Edit.DuplicateSelection在VSE 2013中似乎不存在。或其他任何具有术语重复的事实。
2014年


2
Matthew,您必须单击HERE链接并安装扩展程序。然后,您必须关闭Visual Studio并重新打开它。然后,您必须转到工具==>选项==>环境==>键盘,然后您必须键入Duplicate,您将看到它。然后,您可以按F4键,使其像QEDIT一样运行,或您想要的任何东西,生活都会很好。
ggb667 2014年

即使必须安装另一个工具也很痛苦,但这个工具确实可以很好地完成工作。谢谢 !
Sbu 2014年

94

很简单Ctrl+ C; Ctrl+ V,检查此 链接。只要您不选择任何文本,就可以按Ctrl+ 来复制光标所在的行C


159
在很多情况下,您都不希望通过剪贴板,例如,如果您要复制一行,然后用剪贴板中的内容替换其中的某些内容。
Effata

7
可以,但是这个问题需要快捷方式,而不是文本编辑的一般解决方案,因此我认为,仅出于简单目的,就足够了(至少在我看来是这样)。
10年

4
谢谢,但是我期待的是诸如Edit Plus中的Ctrl + j或Notepad ++中的Crtl + D之类的东西……在VS2008或VS2010中有吗
Posto 2010年

2
我只找到了这个。但是,它并不算太糟糕-当然,使用ctrl + D会更容易,但是如果您想在100个副本中复制1行,则可以使用ctrl + c来完成(无需选择任何内容,只需将命令提示符放在所需的行上)+ ctrl + v的100倍。它仅比ctrl + d解决方案提供更多的按键操作。如果要执行更复杂的复制,可能会出现更多问题。
Cand 2010年

@ Mason240这也是我对接受的答案中引用的部分的最初反应,但是附加信息“只要您不选择任何文本,这将重复光标所在的行...”使这成为理想选择我的解决方案。
RyanfaeScotland 2014年

74

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


也可以在VS2008上使用!
teodron's

1
在VS2017中工作。
凯尔·德莱尼

8
需要不覆盖剪贴板的解决方案
Pierre de LESPINAY,

仅作为补充答案,您只需要按完整组合就可以进行第一次重复。从第二个开始,重复按Ctrl + V,直到保持复制该行为止。
Luty

34

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


11
并非没有,只是在发布后才意识到,但这是Resharper的快捷方式。如果已经安装了Resharper,则可能会有所帮助。

1
我有剃须刀,却不知道快捷键!谢谢。
DanO

如果您使用的是Resharper的“ Resharper 2.x或IntelliJ IDEA”键盘方案,则这是默认快捷方式。Resharper让您在安装过程中选择键盘映射。“ Visual Studio”键盘方案是选择之一。如果选择“ Visual Studio”键盘方案,则Ctrl + D将映射到其他对象。
GeoMac

这是ReSharper问题的答案。
安东尼·布斯,

请注意,这在选择多行时也有效,即,您可以复制一大堆代码,而不仅仅是一行。当然,不利的一面是共享工具不是免费的(但.Net世界似乎比我来自的Java世界习惯了更多)。
阿莫斯·M·卡彭特


23

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

  • 稍短
  • 稍微快一点
  • 注释 :)
  • 表现为以“ ///”开头的行
  • 一次撤消即可撤消
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

1
是的,这实际上可行,接受的答案是将随机内容复制到新行中。做得好,谢谢!
zuallauz 2012年

我在VS 2010 Express中找不到“宏”选项,可以在此实现吗?
Nenotlep

1
2014年2月之后,由于安全原因,宏被禁用。向下滚动并查看MasterHD的解决方案答案,以使Mark的方法即使在安全更新后也能正常工作。
MasterHD 2014年

11

如果您喜欢使用CTRL+ ALT+ UPCTRL+ UP+ 复制的eclipse样式行(或块)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中自动,而无需进行任何更改。

这是从Microsoft.com下载扩展程序的链接。


问题是关于Visual Studio 2008,而不是2015 :)
sarcom '16

应该注意的是,该扩展名复制了选定的行,而不是选定的行。但是它仍然有用。
ANeves '17

这对我来说最有用,因为我想要一种不能替代剪贴板中解决方案的解决方案。此扩展正是我想要的。根据扩展作者的说明,该功能目前适用于Visual Studio 2012、2013、2015和2017。–
Mark

8

Visual Studio代码WebMatrix)中:

向下复制行:Shift+ Alt+down

复制行:Shift+ Alt+up

删除行:Ctrl+ Shift+k


1
到目前为止,这是最好的答案。它甚至可以让您复制完整的代码块(如果您愿意的话),只需选择多行即可。经测试,在Visual Studio代码1.7.2
维克多巴兰特斯

7

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

突出显示要复制的行。按下Control键,然后单击突出显示的文本,然后将其拖到您要去的地方。它将复制突出显示的文本。


内置功能实现相同的结果!这个问题只要求快捷方式-不一定是键盘快捷方式!但是,如果不必牵扯到鼠标,那将更加出色。
DanO

7

由于我无法在Visual Studio 2013中使用宏,因此我找到了Visual Studio插件(我在2012年和2013年使用了它)。 复制选择复制选择项和整行-只需要部分选择它们。标准快捷方式是ALT+ D


5

我不知道Visual Studio 2008中是否存在此功能,但在Visual Studio 2010+中,您可以通过以下方式轻松实现:

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


5

在Visual Studio 2017或其他版本中,不需要Macro或Extension

  1. Tools > Options > Environment > Keyboards
  2. Show commands containing:Edit.Duplicate
  3. 将光标置于Press shortcut keys:,然后按Ctrl+ D并单击Assign按钮
  4. 单击OK以保存您的新键盘快捷键

在此处输入图片说明


4

我一直在使用Wael发布的宏:Visual Studio的重复行命令,但是由于Windows更新,它在一周前停止工作。我是正确的,截至2014年2月,宏已在VS2010(显然是2008)中禁用。

为了解决这个问题,你要么必须卸载该安全更新,或添加一行代码到配置文件,如图所示这里

在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"/>
            ...
    

    编辑器截图

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


4

适用于Visual Studio 2012、2013、2015、2017的链接并下载扩展

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

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




3

对于仍在Visual Studio 2008以后的版本上查看此问题的用户,添加了真实的Edit.Duplicate:

  • CTRL+ EV
  • CTRL+ D(VS 2017 15.6+)

2

Ctrl+ D是VS 2017 v15.6中引入的新快捷方式,似乎可以实现Ctrl+ 的确切功能EV

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

不会影响您的剪贴板

资源


1
全新安装VS2017和VS2019:默认情况下,Ctrl + D不映射到Editor.DuplicateLine ...
thomasgalliker

2

对于Visual Studio Code 2019

使用ctrl+k+编辑菜单键盘快捷键ctrls

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

您可以使用命令ID找到它:editor.action.copyLinesDownAction

对我来说,这是ctrl+d



1

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



1

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


1

我使用应用程序链接:AutoHotkey,以下代码保存在CommentDuplikateSaveClipboard.ahk文件中。您可以轻松编辑/删除快捷方式。
我有链接到本文件"Shortcut to CommentDuplikateSaveClipboard.ahk"Autostart的窗口。
该脚本保护您的剪贴板。
如果您更好奇,可以在此/启用脚本中添加快捷方式。
我有时用令人印象深刻的Multi Clipboard脚本来轻松处理有许多clips保存在磁盘上,并且使用带有CTRL+ CXV复制,粘贴,剪切,下一个,上,删除,全部删除。

;CommentDuplikateSaveClipboard.ahk

!c:: ; Alt+C === Duplicate Line
^d:: ; Ctrl+D
ClipSaved := ClipboardAll
Send, {END}{SHIFTDOWN}{HOME}{SHIFTUP}{CTRLDOWN}c{CTRLUP}{END}{ENTER}{CTRLDOWN}v{CTRLUP}{HOME}
Clipboard := ClipSaved
ClipSaved =
return

!x:: ; Alt+X === Comment Duplicate Line
ClipSaved := ClipboardAll
Send, {END}{SHIFTDOWN}{HOME}{SHIFTUP}{CTRLDOWN}c{CTRLUP}{LEFT}//{END}{ENTER}{CTRLDOWN}v{CTRLUP}{HOME}
Clipboard := ClipSaved
ClipSaved =
return

!z:: ; Alt+Z === Del uncomment  Line
ClipSaved := ClipboardAll
Send, {END}{SHIFTDOWN}{UP}{END}{SHIFTUP}{DEL}{HOME}{DEL}{DEL}
Clipboard := ClipSaved
ClipSaved =
return

!d:: ; Alt+D === Delete line
Send, {END}{SHIFTDOWN}{UP}{END}{SHIFTUP}{DEL}
return

!s:: ; Alt+S === Swap lines
ClipSaved := ClipboardAll
Send, {END}{SHIFTDOWN}{UP}{END}{SHIFTUP}{CTRLDOWN}x{CTRLUP}{UP}{END}{CTRLDOWN}v{CTRLUP}{HOME}
Clipboard := ClipSaved
ClipSaved =
return

!a:: ; Alt+A === Comment this line, uncomment above
Send, {END}{HOME}//{UP}{HOME}{DEL}{DEL}
return

0

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

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

0

VS2019VS2017中,您可以选择工具->选项->键盘,然后在方案下拉菜单Resharper(Visual Studio)选项中进行选择,您将获得一个映射,就像您正在使用Resharper一样,在这种情况下Ctrl+ D将完成复制行的技巧。无论如何,根据文档,这应该在Visual Studio 2017 15.8版或更高版本中无法解决


-3

对于Visual Studio 2010,请尝试使用以下命令进行快速的行复制(使用剪贴板):

  • 单击要复制的行。 Ctrl+ C将复制该行。

  • 然后按Ctrl+ Shift+Enter在插入点下方插入空白

    (或者使用Ctrl+ Enter在插入点上方插入空白行。)

  • 然后只需使用Ctrl+ V粘贴该行。


1
很好的分步说明,用于复制和粘贴。但OP正在寻找一种方法来复制一条线...
ᴍᴀᴛᴛ
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.