Visual Studio:快捷键:重复行

Visual Studio : short cut Key : Duplicate Line

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

一些类似的例子:

  • 在记事本++中,我可以用:ctrl+d复制当前行。
  • 在editplus中:ctrl+j
  • 在NetBeans中:ctrl+shift+↓/↑
  • 在Eclipse中,ctrl+alt+↓/↑
  • 在vi/vim中,yyabkbbdbp
  • 等。


在Visual Studio 2017中

(编辑)此功能现在内置于VS2017中:ctrl+ev如果未选择任何内容,则复制一行,或者复制选择。您可以将其指定给不同的组合键,或在菜单中找到:

Duplicate line in VS2017

有关详细信息,请参阅此参考。

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

如@cand所述,您只需执行ctrl+cctrl+vbkbd。

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

宏观解决方案(VS2017之前)

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

Visual Studio的重复行命令

Visual Basic:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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

To create the macro, just go to the macro explorer
("Tools->Macros->Macro Explorer" or Alt+F8) and copy paste the code in
a new module. Now just assign a keyboard shortcut to it:

  • go to Tools->Options...
  • under Environment, click Keyboard
  • in the"Show Commands Containing" textbox, enter"duplicate" (this according to the name you gave the module.)
  • you should now see the macro in the list below
  • choose"Text Editor" from the"Use new shortcut in" list
  • set focus in the"Press shortcut keys" textbox and hit the combination on the keyboard you whish to use for it (Ctrl+Shift+D in
    my case)
  • hit the"Assign" button
  • you should now see the shortcut in the"Shortcuts for selected command" textbox
  • hit the OK button
  • And that's it. Enjoy!


    这里有一个免费的扩展名,你可以在这里下载,这样你就可以复制行而不用替换剪贴板内容。

    默认情况下,它绑定到alt+d,但您可以通过转到"工具"->"选项"->"环境"->"键盘"将其更改为您想要的任何内容。在搜索框中键入"duplicate",然后查找"edit.duplicateselection",然后编辑指向所需内容的快捷方式。我更喜欢CtrL+D与其他编辑器保持一致。


    它是简单的ctrl+cctrl+v,检查这个链接。只要您不选择任何文本,当您按下CtrL+Cbakbd时,这将复制光标所在的行。


    ctrl+c+v在VS2012上为我工作,没有扩展名。


    ctrl+d在VS2012中与Resharper一起为我工作。这是Resharper的热键。


    在Visual Studio 2013中,可以使用ctrl+c+vbkbd


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

    • 稍微短一点
    • 稍快
    • 评论:
    • 以"//"开头的行的行为
    • 只需一次撤消即可撤消
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    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


    如果您喜欢使用ctrl+alt+upbkbd或ctrl+upbkbd+down进行Eclipse样式的行(或块)复制,请参见下面的i post宏:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    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


    为什么有那么多长期的方法来完成这么简单的事情?从Microsoft下载和安装扩展不到一分钟。该页表示,默认情况下它将绑定到alt+d,但对我来说,它在Visual Studio Community 2015中自动绑定到ctrl+d,而不做任何更改。

    下面是从microsoft.com下载扩展名的链接。


    在Visual Studio代码(WebMatrix)中:

    向下复制行:shift+alt+down

    复制行:shift+alt+upbkbd

    删除行:ctrl+shift+kbd


    由于我不能在我的Visual Studio 2013中使用宏,我发现了一个Visual Studio插件(我在2012和2013年使用它)。重复选择重复选择重复选择和整行-它们只需要部分选择。标准快捷方式是alt+d


    当我意识到这不是一个键盘快捷方式时,我想我会添加这个,因为它不需要使用剪贴板,可能会帮助一些人。

    突出显示要复制的行。按control,鼠标单击突出显示的文本,然后拖动到要转到的位置。它将复制突出显示的文本。


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

    不选择任何内容,然后按ctrl+c,然后(不做任何其他操作)ctrl+vbkbd


    我一直在使用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

      1
      2
      3
      4
      5
      ...
      <configuration>
          <runtime>
              <AllowDComReflection enabled="true"/>
              ...

      editor screenshot

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


    在Visual Studio 2008中,可以使用ctrl+c+vbkbd


    只需将鼠标放在行上进行复制,然后在同一行上执行ctrl+c,然后执行ctrl+vbkbd。像魔法一样工作:—)


    对于在Visual Studio 2008之后仍在查看此问题的用户,添加了真正的edit.duplicate:

    • ctrl+evbkbd
    • CtrL+D(与2017年15.6+相比)

    对于Visual Studio 2012、2013、2015、2017,请按照链接并下载扩展

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

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


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

  • Tools > Options > Environment > Keyboards
  • Show commands containing:项下,写Edit.Duplicate项。
  • 将光标放在Press shortcut keys:上,按ctrl+d,然后单击Assign按钮。
  • 单击OK保存新的键盘快捷方式
  • enter image description here


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

    我的故事:开始在一家新公司工作,以前从未使用过Visual Studio。首先要做的事情之一就是如何复制行。设置完宏后,Resharper告诉我:是否要替换我的快捷方式:"Duplicate Text":)


    在Visual Studio 2010中,您可以使用CtrL+insert复制光标所在的整行,然后可以使用CtrL+DVshift+insert粘贴该行。


    与2017年相比,其CtrlDCtrlCCtrlV他们都为我工作。


    您需要的命令是edit.duplicate。它被映射到ctrlebakbd、ctrlv。这不会覆盖您的剪贴板。


    我使用应用程序链接:autohotkey,下面的代码保存在CommentDuplikateSaveClipboard.ahk文件中。您可以编辑/删除快捷方式,这很容易。我在windows的Autostart中有这个文件"Shortcut to CommentDuplikateSaveClipboard.ahk"的链接。此脚本保护您的剪贴板。如果您更感兴趣,可以添加此可/启用脚本的快捷方式。我有时会使用非常令人印象深刻的Multi Clipboard脚本来轻松处理磁盘上保存的许多clips,并使用ctrl+cxvbkbd来复制、粘贴、剪切、下一步、上一步、删除、全部删除。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    ;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


    在VS2019和VS2017中,您可以选择"工具"->"选项"->"键盘",然后在"方案"下拉列表中选择"Resharper(Visual Studio)"选项,您将得到一个映射,就像使用Resharper一样,在这种情况下,CtrL+D将执行复制行的技巧。无论如何,根据文档,在Visual Studio 2017版本15.8或更高版本中,这应该是不可能的。


    不是答案,只是一个有用的补充:作为一个免费赠品,我刚刚发明了…EHM…调整了lolo)removelineorblock宏发布的代码。享受!

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    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

    CtrL+是在vs 2017 v15.6中引入的一种新快捷方式,它似乎与CtrL+VbkBD完全相同。

    Ctrl + D will duplicate the line the cursor is in and insert it right below the line in focus. If you’d like to duplicate a specific set of code, simply select the portion of code you want to duplicate before invoking the duplicate code command.

    它不会影响你的剪贴板

    来源


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

    • 单击要复制的行。ctrl+c将复制该行。

    • 然后按ctrl+shift+enter在插入点下方插入空白

      (或者使用ctrl+enter在插入点上方插入空行。)

    • 然后只需使用ctrl+vbkbd粘贴行。