Visual Studio:快捷键:重复行

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

一些相似的例子:

  • 记事本++中 ,我可以复制当前行: Ctrl + D
  • EditPlus中Ctrl + J
  • NetBeans中Ctrl + Shift + /
  • Eclipse中按Ctrl + Alt + /
  • Vi / Vim中yy p
  • 等等

内置使用剪贴板的方法

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

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

macros解决scheme

如果您想要实现更完整的解决scheme,也许要创build一个更简单的键盘快捷键,或者您不希望影响剪贴板,请参阅本指南:

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 

要创buildmacros,只需进入macros浏览器(“工具 – >macros – >macros浏览器”或Alt + F8),然后将代码粘贴到新模块中。 现在只需将键盘快捷键分配给它:

  1. 进入工具 – >选项…
  2. 在环境下,单击键盘
  3. 在“显示命令包含”文本框中input“duplicate”(根据您给模块的名称)。
  4. 您现在应该看到下面的列表中的macros
  5. 从“使用新的快捷方式”列表中select“文本编辑器”
  6. 在“按快捷键”文本框中设置焦点,然后按键盘上的组合键(Ctrl + Shift + D)
  7. 点击“分配”button
  8. 您现在应该在“选定命令快捷方式”文本框中看到快捷方式
  9. 点击OKbutton

就是这样。 请享用!

有一个免费的扩展,你可以在这里下载,让你复制行而不需要replace剪贴板的内容。

默认情况下,它绑定到Alt + D ,但你可以改变它到任何你想要的工具 – >选项 – >环境 – >键盘。 在search框中input“Duplicate”,然后查找“Edit.DuplicateSelection”并编辑任何你想要的快捷方式。 我更喜欢Ctrl + D与其他编辑器保持一致。

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

在VS2012上, Ctrl + C + V适用于我,没有扩展名。

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

在Res20per中, Ctrl + D在VS2012中为我工作。 这是Resharper的热门关键。

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

  • 略短
  • 稍微快一点
  • 注释 :)
  • performance为以“///”开头的行
  • 可以撤消一个单一的撤消
import系统
导入EnvDTE
importEnvDTE80

公共模块Module1

     Sub DuplicateLine()
         Dim sel As TextSelection = DTE.ActiveDocument.Selection
         sel.StartOfLine(0)''移动开始
         sel.EndOfLine(True)''select结束
         Dim line As String = sel.Text
         sel.EndOfLine(False)''移动结束
         sel.Insert(ControlChars.NewLine +行,vsInsertFlags.vsInsertFlagsCollapseToEnd)
    结束小组

结束模块

如果您喜欢使用CTRL + ALT + UPCTRL + UP + DOWN复制日食样式行(或块),下面我发布macros用于此目的:

 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 

由于我无法在Visual Studio 2013中使用macros,我发现了一个Visual Studio插件(我在2012年和2013年使用它)。 重复select重复select和整个行 – 他们只需要部分select。 标准的快捷方式是ALT + D。

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

突出显示要复制的行。 按下控件,鼠标点击突出显示的文本,然后拖动到要去的位置。 它将复制突出显示的文本。

为什么要这么多漫长的方法来完成这么简单的事情呢? 从Microsoft下载并安装扩展需要不到一分钟的时间。 该页面表示,它将默认绑定到ALT + D ,但是对于我来说,它在Visual Studio Community 2015中自动将其绑定到CTRL + D ,而不做任何更改。

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

我不知道这是否存在于Visual Studio 2008中,但在Visual Studio 2010+中,您可以通过以下方式轻松完成此操作:

不要select任何东西,然后按Ctrl + C然后(不做任何事情) Ctrl + V

我一直在使用Wael发布的macros: Visual Studio的重复行命令 ,但是它在一个星期前停止工作,我假定是因为Windows更新。 而且我是正确的,截至2014年2月,macros在VS2010(和2008年显然)被禁用。

要解决这个问题,您必须卸载安全更新,或者将一行代码添加到configuration文件中,如下所示。

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

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

    编辑截图

必须使用pipe理员权限运行你的文本编辑器,否则将无法工作! 希望这可以帮助任何突然有他们的macrosfunction的人从他们的下面拉出来。

Visual Studio代码WebMatrix )中:

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

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

删除行: Ctrl + Shift + k

对于那些感兴趣的,我重新创build了一个Visual Studiomacros的记事本++的确切行为。 下面你可以find代码(广泛评论)。 如果你想在Notepad ++( Ctrl + D )中有一个快捷方式,你可以通过Tools > Option > Environment > Keyboard轻松做到这一点,并searchMacros.MyMacros.DuplicateText.DuplicateText 。 select命令并分配快捷方式(我build议仅将其分配给文本编辑器,而不是全局)。

对于那些不知道如何将这个macros添加到Visual Studio中,下面的解释如何做到这一点:

  1. 转到ToolsMacrosMacro Explorer (或使用shortcur Alt + F8
  2. 现在在macros资源pipe理器中,右键单击MyMacros并selectNew Module
  3. 一个新的窗口打开,并给它的名称DuplicateText
  4. 现在通过双击打开这个模块。 一个新窗口( Microsoft Visual Studio Macros )打开。
  5. 现在删除您看到的所有文本,并粘贴下面的代码。

这是代码

 Imports System Imports EnvDTE Imports EnvDTE80 Public Module DuplicateText ' Notepad++ duplication of text ' If no text is selected, duplicate the current line on the next line and leave the cursor ' at the current position. ' In all other cases, duplicate the selected text and insert it after the selection (without ' inserting a new line), leaving the selection intact Sub DuplicateText() Dim selTextSelection As TextSelection = DTE.ActiveDocument.Selection ' Retrieve the current cursor position Dim iActiveLine As Integer = selTextSelection.ActivePoint.Line Dim iActiveLineCharOffset As Integer = selTextSelection.ActivePoint.LineCharOffset ' Retrieve the selection start position Dim iStartLine As Integer = selTextSelection.TopPoint.Line Dim iStartLineCharOffset As Integer = selTextSelection.TopPoint.LineCharOffset ' Retrieve the selection end position Dim iEndLine As Integer = selTextSelection.BottomPoint.Line Dim iEndLineCharOffset As Integer = selTextSelection.BottomPoint.LineCharOffset If selTextSelection.IsEmpty Then ''' Case when no text is selected ' Select the current line and insert it after this line selTextSelection.SelectLine() selTextSelection.Insert(selTextSelection.Text, vsInsertFlags.vsInsertFlagsInsertAtEnd) ' Move the cursor back to the original position selTextSelection.MoveToLineAndOffset(iActiveLine, iActiveLineCharOffset) Else ''' Case when there is a selection ' Insert the selected text after the selection selTextSelection.Insert(selTextSelection.Text, vsInsertFlags.vsInsertFlagsInsertAtEnd) ' Recreate the original selection ' > Determine from which point the selection has to start ' >>> If the active point is at the start, start selecting from the end point, ' >>> else if the active is at the end, start selecting from the start point Dim iFromLine As Integer = If(iActiveLine = iStartLine, _ iEndLine, _ iStartLine) Dim iFromCharOffset As Integer = If(iActiveLineCharOffset = iStartLineCharOffset, _ iEndLineCharOffset, _ iStartLineCharOffset) ' > Move the cursor temporary to the point where you start selecting (see above) selTextSelection.MoveToLineAndOffset(iFromLine, iFromCharOffset) ' > Move the cursor to the (original) active point while selecting the text selTextSelection.MoveToLineAndOffset(iActiveLine, iActiveLineCharOffset, True) End If End Sub End Module 

我使用应用程序链接:下面的代码保存在CommentDuplikateSaveClipboard.ahk文件的AutoHotkey 。 您可以编辑/删除快捷方式,这很容易。
我有链接到这个文件"Shortcut to CommentDuplikateSaveClipboard.ahk"在Windows Autostart
这个脚本保护你的剪贴板。
如果你更好奇,你可以添加快捷键到这个/启用脚本。
我有时使用非常令人印象深刻的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 

只要把你的鼠标放在行上复制,然后按CTRL + C ,然后在同一行上按CTRL + V. 像魔术一样工作:-)

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

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

 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 

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

我的故事:开始在一家新公司工作,之前从未使用过Visual Studio。 第一件事之一 – 如何复制线。 设置macrosReSharper后告诉我:你想replace我的快捷方式是:“重复文本”:)

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

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

  • 点击你想要复制的行。 Ctrl + C将复制该行。

  • 然后按Ctrl + Shift + Enter在插入点下面插入一个空白

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

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