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+e,v如果未选择任何内容,则复制一行,或者复制选择。您可以将其指定给不同的组合键,或在菜单中找到:
有关详细信息,请参阅此参考。
VS2017之前,使用剪贴板的内置方法如@cand所述,您只需执行ctrl+c;ctrl+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 ModuleTo 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+c;ctrl+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"/>
...
您必须使用管理员权限运行文本编辑器,否则它将无法工作!希望这能帮助那些突然从其下面拉出宏功能的人。
在Visual Studio 2008中,可以使用ctrl+c+vbkbd
只需将鼠标放在行上进行复制,然后在同一行上执行ctrl+c,然后执行ctrl+vbkbd。像魔法一样工作:—)
对于在Visual Studio 2008之后仍在查看此问题的用户,添加了真正的edit.duplicate:
- ctrl+e,vbkbd
- 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或其他版本中,不需要宏或扩展,
http://www.jetbrains.com/resharper/
我的故事:开始在一家新公司工作,以前从未使用过Visual Studio。首先要做的事情之一就是如何复制行。设置完宏后,Resharper告诉我:是否要替换我的快捷方式:"Duplicate Text":)
在Visual Studio 2010中,您可以使用CtrL+insert复制光标所在的整行,然后可以使用CtrL+DV或shift+insert粘贴该行。
与2017年相比,其
您需要的命令是edit.duplicate。它被映射到ctrlebakbd、ctrlv。这不会覆盖您的剪贴板。
我使用应用程序链接:autohotkey,下面的代码保存在
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粘贴行。