Visual Studio: короткая вырез. Key: Duplicate Line

Есть ли ярлык для команды Дублировать строку в Visual Studio 2008?

Некоторые аналогичные примеры:

  • in Notepad ++, я могу дублировать текущую строку с помощью: Ctrl + D
  • в EditPlus: Ctrl + J
  • в NetBeans: Ctrl + Shift + /
  • в Eclipse, Ctrl + Alt + /
  • в Vi/Vim, yy p
  • и др.

Ответ 1

В Visual Studio 2019

Ctrl + D

В Visual Studio 2017 (версия 15.6 и более поздняя)

Ctrl + D

В Visual Studio 2017 (до версии 15.6)

(редактировать) Эта функция теперь встроена в VS2017: Ctrl + E, V дублирует строку, если ничего не выбрано, или дублирует выделение. Вы можете назначить его другой комбинации клавиш или найти в меню:

Duplicate line in VS2017

См. эту ссылку для получения дополнительной информации.

Pre VS2017, встроенный метод с использованием буфера обмена

Как уже упоминалось @cand, вы можете просто сделать Ctrl + C; Ctrl + V.

Ctrl + C скопирует строку, если ничего не выбрано.

Макро-решение (до 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

Чтобы создать макрос, просто перейдите в проводник макросов ("Tools-> Macros-> Macro Explorer" или Alt + F8) и скопируйте код в новый модуль. Теперь просто назначьте ему сочетание клавиш:

  1. перейдите к Tools-> Параметры...
  2. в разделе "Окружающая среда" нажмите "Клавиатура"
  3. в текстовом поле "Показать команды, содержащие" введите "дубликат" (в соответствии с именем, которое вы дали модулю).
  4. Теперь вы должны увидеть макрос в списке ниже
  5. выберите "Текстовый редактор" из списка "Использовать новый ярлык в"
  6. установите фокус в текстовом поле "Нажать клавиши быстрого доступа" и нажмите комбинацию на клавиатуре, которую хотите использовать для этого (Ctrl + Shift + D в мой случай)
  7. нажмите кнопку "Назначить"
  8. Теперь вы должны увидеть ярлык в текстовом поле "Ярлыки для выбранной команды"
  9. нажмите кнопку ОК

And that it. Enjoy!

Ответ 2

Здесь вы можете бесплатно загрузить здесь, который позволяет дублировать строки без замены содержимого буфера обмена.

По умолчанию привязывается к Alt + D, но вы можете изменить его на все, что хотите, выбрав Инструменты- > Параметры- > Среда- > Клавиатура. Введите "Duplicate" в поле поиска и найдите "Edit.DuplicateSelection" и отредактируйте ярлык по своему желанию. Я предпочитаю Ctrl + D соответствовать другим редакторам.

Ответ 3

Это просто Ctrl + C; Ctrl + V, проверьте это ссылка. Пока вы не выбираете какой-либо текст, это приведет к дублированию строки, над которой курсор закончился, когда вы нажимаете Ctrl + C.

Ответ 4

Ctrl + C + V работает для меня на VS2012 без расширения.

Ответ 5

Ctrl + D работает для меня в VS2012 с помощью Resharper. Это горячая клавиша Resharper.

Ответ 6

В Visual Studio 2013 вы можете использовать Ctrl + C + V

Ответ 7

Здесь макрос, основанный на том, что находится в ссылке, опубликованной Ваэлем, но улучшенном в следующих областях:

  • немного короче
  • немного быстрее
  • Комментарии :)
  • ведет себя для строк, начинающихся с "///"
  • может быть отменено с помощью одного отменить
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

Ответ 8

Если вам нравится дублирование линии (или блока) стиля затмения с использованием CTRL + ALT + UP или CTRL + UP + 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

Ответ 9

Почему так много длинных методов, чтобы сделать что-то настолько простое? Для загрузки и установки расширения от Microsoft требуется меньше минуты. На странице указано, что он по умолчанию привяжет его к ALT + D, но для меня он автоматически привязал его к CTRL + D в Visual Studio Community 2015 без каких-либо изменений.

Здесь ссылка для загрузки расширения с Microsoft.com.

Ответ 10

В коде Visual Studio (WebMatrix):

Копировать строки вниз: Shift + Alt + down

Копировать строки вверх: Shift + Alt + up

Удалить строки: Ctrl + Shift + k

Ответ 11

Пока я понимаю, что это не сочетание клавиш, я решил, что добавлю это, поскольку это не требует использования буфера обмена и может помочь некоторым людям.

Выделите строку, которую вы хотите дублировать. Нажмите кнопку управления, щелкните мышью выделенный текст и перетащите туда, куда вы хотите перейти. Он будет дублировать выделенный текст.

Ответ 12

Поскольку я не могу использовать макросы в своей Visual Studio 2013, я нашел плагин Visual Studio (я использую его в 2012 и 2013 годах). Duplicate Selection дублирует выделение и целые строки - их нужно только частично отбирать. Стандартный ярлык ALT + D.

Ответ 13

Я не знаю, существует ли это в Visual Studio 2008, но в Visual Studio 2010+ вы можете легко сделать это:

Не выбирайте ничего, затем нажмите Ctrl + C И затем (ничего не делая) Ctrl + V

Ответ 14

Я использовал макрос, который опубликовал Wael: Дублировать строку для Visual Studio, но это перестала работать неделю назад, я предположил из-за обновления Windows. И я был прав, с февраля 2014 года макросы были отключены в 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"/>
            ...
    

    editor screenshot

Вы ДОЛЖНЫ запускать текстовый редактор с правами администратора, иначе он не сработает! Надеюсь, это поможет любому, у кого внезапно появилась их макрофункция, вытащенная из-под них.

Ответ 15

Просто наведите указатель мыши на строку для копирования и выполните CTRL + C, затем CTRL + V в той же строке. Работает как магия: -)

Ответ 16

В visual studio 2008 вы можете использовать CTRL + C + V

Ответ 17

Для тех, кого это интересует, я воссоздал точное поведение Notepad ++ в Mac Visual Studio. Ниже вы можете найти код (подробно прокомментированный). Если вы хотите иметь ярлык, например, в Notepad ++ (Ctrl + D), вы можете легко сделать это, перейдя в Tools > Option > Environment > Keyboard и выполните поиск Macros.MyMacros.DuplicateText.DuplicateText. Выберите команду и назначьте ярлык (я рекомендую назначить его только текстовому редактору, а не глобально).

Для тех, кто не знает, как добавить этот макрос в Visual Studio, ниже объяснение, как это сделать:

  • Перейдите к Tools, Macros, Macro Explorer (или используйте shortcur Alt + F8)
  • Теперь в проводнике макросов щелкните правой кнопкой мыши по MyMacros и выберите New Module
  • Откроется новый windo и дайте ему имя DuplicateText
  • Теперь откройте этот модуль, дважды щелкнув его. Откроется новое окно (Microsoft Visual Studio Macros).
  • Теперь удалите весь текст, который вы видите, и вставьте здесь код ниже.

Вот код

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

Ответ 18

Для тех, кто все еще рассматривает этот вопрос в Visual Studio после 2008 года, добавлен настоящий Edit.Duplicate:

  • CTRL + E, V
  • CTRL + D (VS 2017 15. 6+)

Ответ 19

для Visual Studio 2012, 2013, 2015, 2017 перейдите по ссылке и загрузите расширение

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

Теперь зайдите в "Инструменты"> "Параметры"> "Клавиатура" и введите "Duplicate" в поле поиска (полная командная строка "Edit.DuplicateSelection"). Здесь вы можете привязать его к любому ярлыку так же, как и для любой другой команды.

Ответ 20

В Visual Studio 2017 и, возможно, в другой версии Нет необходимости в Макро или Расширении,

  1. Откройте " Tools > Options > Environment > Keyboards
  2. В разделе Show commands containing: write Edit.Duplicate
  3. Поместите курсор на Press shortcut keys: нажмите Ctrl + D и нажмите кнопку Assign
  4. нажмите " OK чтобы сохранить новую комбинацию клавиш

enter image description here

Ответ 21

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

Моя история: начал работать в новой компании, раньше не использовал Visual Studio. Одна из первых вещей - как дублировать строку. После настройки макроса ReSharper сказал мне: вы хотели бы заменить мой ярлык, который был: "duplicate text":)

Ответ 22

Я использую ссылку на приложение: AutoHotkey с приведенным ниже кодом, сохраненным в файле CommentDuplikateSaveClipboard.ahk. Вы можете легко редактировать или удалять ярлыки.
У меня есть ссылка на этот файл "Shortcut to CommentDuplikateSaveClipboard.ahk" в Autostart в окнах.
Этот скрипт защищает ваш буфер обмена.
Если вам интересно, вы добавили бы ярлыки к скрипту /able/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

Ответ 23

В Visual Studio 2010 вы скопируете всю строку, на которой курсор включен, с CTRL + INSERT, затем вы можете использовать CTRL + V или SHIFT + INSERT, чтобы вставить его.

Ответ 24

VS 2017 - Ctrl + D или Ctrl + C; Ctrl + V оба они работают для меня.

Ответ 25

Команда, которую вы хотите, это Edit.Duplicate. Он отображается на Ctrl E, Ctrl V. Это не перезапишет ваш буфер обмена.

Ответ 26

Ctrl + D - новый ярлык, введенный в VS 2017 v15.6, который, похоже, делает то, что Ctrl + E, V

Ctrl + D будет дублировать строку, в которой находится курсор, и вставить ее прямо под линию в фокусе. Если вам нравится дублировать определенный набор кода, просто выберите часть кода, которую вы хотите дублировать, перед вызовом команды дублирующего кода.

Это не повлияет на ваш буфер обмена

Источник

Ответ 27

Не ответ, просто полезное дополнение: в качестве халявы я только что придумал (ну... эмм... скорректировал код, отправленный Лоло) макросом 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

Ответ 28

в VS2019, а также в VS2017 вы можете выбрать Tools-> Параметры-> Клавиатура и выбрать в раскрывающемся меню Resharper ( Visual Studio), и вы получите отображение, как если бы вы использовали Resharper, в этом случае Ctrl + D сделают трюк для дублирования строки. В любом случае, на основании документации это должно быть за пределами Visual Studio 2017 версии 15.8 или более поздней версии.

Ответ 29

Для визуальной студии 2019:

Отредактируйте сочетания клавиш меню с помощью: ctrl + k и ctrl + s

Отредактируйте "Копировать строку вниз" (Shift + Alt + DownArrow) в свой собственный ярлык.

Вы можете найти его с помощью идентификатора команды: editor.action.copyLinesDownAction

Для меня это ctrl + d

Ответ 30

Для visual studio 2010 попробуйте использовать эти команды для быстрого дублирования строк (использует буфер обмена):

  • Нажмите на строку, которую вы хотите скопировать. Ctrl + C скопирует эту строку.

  • Затем нажмите Ctrl + Shift + Enter, чтобы вставить пробел ниже точки вставки

    (В качестве альтернативы используйте Ctrl + Enter, чтобы вставить пустую строку над точкой вставки.)

  • Затем просто используйте Ctrl + V, чтобы вставить строку.