ChatGPT解决这个技术问题 Extra ChatGPT

Visual Studio:快捷键:重复行

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

一些类似的例子:

在记事本++中,我可以使用以下命令复制当前行:Ctrl+D

在 EditPlus 中:Ctrl+J

在 NetBeans 中:Ctrl+Shift+↓/↑

在 Eclipse 中,Ctrl+Alt+↓/↑

在 Vi/Vim 中,是的

等等

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

M
Michele Bortot

在 Visual Studio 2022 中

Ctrl + E, V

在 Visual Studio 2019 中

Ctrl + D

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

Ctrl + D

在 Visual Studio 2017(pre v15.6)中

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

https://i.stack.imgur.com/4Mfkb.png

有关详细信息,请参阅 this reference

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

正如@cand 提到的,你可以做 Ctrl + C ; Ctrl + V。

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

宏解决方案(VS2017之前)

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

Visual Basic:导入 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)并将代码复制粘贴到新模块中。现在只需为其分配一个键盘快捷键:转到环境下的工具->选项...,单击“显示包含的命令”文本框中的键盘,输入“重复”(根据您给模块提供的名称。)你应该现在在下面的列表中看到宏从“使用新的快捷方式”列表中选择“文本编辑器”在“按下快捷键”文本框中设置焦点并点击您希望用于它的键盘上的组合(Ctrl+Shift+ D 在我的情况下)点击“分配”按钮,您现在应该在“选定命令的快捷方式”文本框中看到快捷方式点击确定按钮,就是这样。享受!


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

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

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


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

很简单 Ctrl + CCtrl + 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这也是我对已接受答案中引用部分的最初反应,但是附加信息“只要您不选择任何文本,这将复制光标所在的行...”使其成为理想在我的情况下的解决方案。
R
Rahil Wazir

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


也适用于 VS2008!
在VS2017中工作。
需要一个没有剪贴板覆盖的解决方案
只是为了补充答案,您只需要按完整组合进行第一次复制。从第二个开始,只需按需要重复按 Ctrl + V 即可继续复制该行。
M
Mwiza

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


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

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


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

这是一个基于 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

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

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

转到工具>选项>环境>键盘在显示命令下包含:编写Edit.Duplicate将光标放置到按快捷键:然后按Ctrl + D并单击分配按钮单击确定以保存新的键盘快捷键

https://i.stack.imgur.com/lQbln.gif


这个答案帮助了我,但方式不同。我有 VS 2022 并且我安装了 Resharper 试用版,但它已过期。卸载后,我所有的宏都错误或不存在。在我从该列表中选择 Edit.Duplicate 后,每个字段都是灰色的。我必须按下重置按钮,然后直接从“选定命令的快捷方式”字段中更改它。
p
phuclv

如果您喜欢使用 CTRL+ALT+UP 或 CTRL+UP+DOWN 复制 Eclipse 样式的行(或块),下面我为此目的发布宏:

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

m
mghhgm

在视觉工作室代码(WebMatrix)中:

向下复制行:Shift + Alt + 向下

向上复制行:Shift + Alt + 向上

删除行:Ctrl + Shift + k


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

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

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


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

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


W
Warty

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

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


使用内置功能实现相同的结果!这个问题只问了一个快捷方式——不一定是键盘快捷方式!不过,如果不必涉及鼠标,那会更棒。
A
Alireza Noori

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

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


M
MasterHD

我一直在使用 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 ... <配置> <运行时> ...

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


K
Kalyan Halder

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

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

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


M
Mwiza

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


M
Mwiza

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


i
icanfathom

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

CTRL+E, V

CTRL+D (VS 2017 15.6+)


L
László L. L.

对于 Visual Studio Code 2019:

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

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

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

对我来说,它是 ctrl+d


K
Kautsky Lozano

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

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

它不会影响您的剪贴板

Source


全新安装 VS2017 和 VS2019:Ctrl+D 默认未映射到 Editor.DuplicateLine...
M
Mars Robertson

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

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


resharper - 非常慢
M
Mwiza

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


D
Danyal Ahmed Chaudhry

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


H
HaveSpacesuit

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


M
Mwiza

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

;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

p
phuclv

不是一个答案,只是一个有用的补充:作为一个免费赠品,我刚刚发明了(嗯......嗯......调整了 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

d
ddieppa

VS2019VS2017 中,您可以选择 Tools->Options->Keyboard 并且您可以在方案下拉列表中选择 Resharper (Visual Studio) 选项,您将获得一个类似于使用 Resharper 的映射,在这种情况下 Ctrl + D 可以解决问题复制线。无论如何,基于 documentation,这在 Visual Studio 2017 版本 15.8 或更高版本中应该不会出现


T
TechDogLover OR kiaNasirzadeh

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


J
Joshua Gato

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