Visual Studio: сокращенный ключ: дублирующая линия


423

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

Несколько похожих примеров:


6
Просто для информации, одним из многих преимуществ, предлагаемых ReSharper, является возможность сделать это.
AakashM

2
visualstudiogallery.msdn.microsoft.com/… Загрузите это, и alt + D будет дублировать ваш выбор или, если ничего не выделено, дублирует всю строку. К сожалению, макросы Visual Basic не работают в 2013 году, только макросы JS.
Шенк

1
OMG, в чем проблема назначить комбинацию человеку, как для дублирования линии ??? Я привык к Затмению. И Ctrl + D для удаления строки. Почему в VS так сложно ???
Андрей Музычук

2
@mghhgm ниже - ответ, который вы ищете. (shift + alt + down или shift + alt + up)
Виктор Баррантес

1
Пример vim не дублирует, это ctrl + c; ctrl + v. «Янки» режет и паштет. Это не совсем то же самое, что и другие примеры.
Ноябрь

Ответы:


406

В Visual Studio 2019

Ctrl + D

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

Ctrl + D

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

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

Дубликат строки в 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

Чтобы создать макрос, просто перейдите в проводник макросов («Инструменты-> Макросы-> Обозреватель макросов» или Alt+ F8) и скопируйте код в новый модуль. Теперь просто назначьте ему сочетание клавиш:

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

И это все. Наслаждайтесь!


3
Я просто попытался его, и это интересно , что он повторяет некоторые дополнительные символы , когда есть «блок кода на стороне сервера» с короткими метками, например: <div>Profile.UserName: <%=Profile.UserName %></div>- после того, дублируя эту строку с помощью этого макроса, становится следующим: <div>Profile.UserName: <%=Profile.UserName %></div> %></div>. Как видите, последняя часть «повторяется». Когда в нем нет блоков кода на стороне сервера, все работает нормально. Вы знаете обходной путь для этого? Кстати, еще одна интересная вещь, которую я испытал, заключается в том, что этот макрос является относительно «медленным», чего я не ожидал ... :)
Sk8erPeter

6
После февраля 2014 макросы отключены по соображениям безопасности. Прокрутите вниз и посмотрите ответ MasterHD для обходного пути, чтобы метод Wael продолжал работать даже после обновления безопасности.
MasterHD

4
я считаю, что Ctrl C + Ctrl V ограничивает случаи, когда я уже скопировал что-то в буфер обмена и хотел бы продублировать строку перед вставкой.
sawe

1
Почему на земле это так трудно осуществить дубликат действие или которые наиболее данное сочетание клавиш из других редакторов сделать очень эффективно и интуитивно. : /
kisanme

1
зачем это нужно Я скопировал что-то в другую вкладку, перехожу к определенной строке на этой вкладке, дублирую строку и затем использую <code> CTRL + V </ code> для вставки некоторого кода. В противном случае мне нужно пойти и заново скопировать другую часть кода снова. ..
Augustas

136

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

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


23
Это реальный ответ, который вы ищете, все остальное, что размещено здесь, является умным, но просто не то, что просили.
Ремко Бум

8
Edit.DuplicateSelectionПо-видимому, не присутствует в VSE 2013. Или что-то еще с термином дубликат на самом деле.
ʙᴀᴋᴇʀ ʙᴀᴋᴇʀ


2
Мэтью, вам нужно щелкнуть ЗДЕСЬ ссылку и установить расширение. Затем вы должны закрыть визуальную студию и снова открыть ее. ТОГДА вам нужно перейти в Инструменты ==> Параметры ==> Окружающая среда ==> Клавиатура и ТОГДА вы должны ввести Duplicate, и вы увидите его. Затем вы можете нажать F4, чтобы он действовал как QEDIT или что угодно, и жизнь станет хорошей.
ggb667

Даже если это немного больно, чтобы установить другой инструмент, это делает работу и делает это хорошо. Спасибо !
Сб

94

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


159
Существует множество случаев, когда вы не хотите проходить через буфер обмена, например, если вы хотите продублировать строку, а затем заменить некоторое содержимое в ней тем, что есть в буфере обмена.
Effata

7
Конечно, но вопрос задавался для ярлыка, а не для общего решения для редактирования текста, поэтому я думаю, что для простых целей этого достаточно (по крайней мере, так было в моем случае).
Cand

4
спасибо, но я ожидал что - то вроде Ctrl + J в Edit Plus или Ctrl + D в Notepad ++ ... есть ли в VS2008 или VS2010
Posto

2
Я только нашел это. Однако это не так уж и плохо - конечно проще было бы использовать ctrl + D, но если вы хотите дублировать 1 строку из 100 копий, вы можете сделать это с помощью ctrl + c (без необходимости выбирать что-либо, просто поместите командную строку поверх требуемой строки ) + 100 раз Ctrl + V. Это только один набор нажатий клавиш больше, чем Ctrl + D решение. Это может быть более проблематичным, если вы хотите сделать более сложное дублирование.
Cand

@ Mason240 Это была моя первоначальная реакция на процитированную часть в принятом ответе, однако дополнительная информация «Пока вы не выделите какой-либо текст, это будет дублировать строку, над которой находится курсор ...» делает это идеальным Решение в моем случае.
RyanfaeScotland

74

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


Работает на VS2008 также!
Теодрон

1
Работает в VS2017.
Кайл Делани

8
Нужно решение без перезаписи буфера обмена
Pierre de LESPINAY

Просто для дополнения ответа вам нужно всего лишь нажать полную комбинацию для первого дублирования. Начиная со второго, просто нажимайте Ctrl + V столько раз, сколько нужно для продолжения репликации линии.
Luty

34

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


11
нет его нет, только понял, что после публикации, но это ярлык Resharper. и если кто-то установил resharper, то это может помочь.
sawe

1
У меня есть резкость, и я не знал этого ярлыка! Спасибо.
DanO

Это сочетание клавиш по умолчанию, если вы используете схему клавиатуры Resharper «Resharper 2.x или IntelliJ IDEA». Resharper предлагает вам выбрать раскладку клавиатуры во время установки. Схема клавиатуры «Visual Studio» является одним из вариантов. Если вы выберете схему клавиатуры «Visual Studio», то Ctrl + D будет сопоставлен с чем-то другим.
GeoMac

Это ответ на вопрос ReSharper.
Энтони Бут

Обратите внимание, что это также работает, когда выбрано несколько строк, то есть вы можете дублировать целый набор кода, а не только одну строку. Недостатком, конечно же, является то, что resharper не бесплатен (но, похоже, мир .Net привык к этому больше, чем мир Java, откуда я родом).
Амос М. Карпентер

31

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


2
Рад, что я прогулялся вниз. Это то, что я хотел.
Дэрил

Работаю на VS Code Linux тоже.
Хан

4
Нужно решение без перезаписи буфера обмена
Pierre de LESPINAY

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

23

Вот макрос, основанный на той, что содержится в ссылке, опубликованной 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

1
Да, это на самом деле работает, тот, что в принятом ответе, копировал случайные вещи в новую строку. Хорошая работа, спасибо!
Zuallauz

Я не нашел опцию Macros в VS 2010 Express, это можно реализовать там?
Ненотлеп

1
После февраля 2014 макросы отключены по соображениям безопасности. Прокрутите вниз и посмотрите ответ MasterHD для обходного пути, чтобы заставить метод Марка продолжать работать даже после обновления безопасности.
MasterHD

11

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

10

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

Вот ссылка для загрузки расширения с Microsoft.com.


Вопрос о Visual Studio 2008, а не 2015 :)
sarcom

Следует отметить, что это расширение дублирует выделенные строки, а не выделение. Но это все еще полезно.
Ноябрь

Это наиболее полезно для меня, потому что я хотел решение, которое не заменит то, что я имел в буфере обмена. Это расширение именно то, что я искал. И, по словам автора расширения, в настоящее время это работает для Visual Studio 2012, 2013, 2015 и 2017.
Марк

8

В визуальном студийном коде ( WebMatrix ):

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

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

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


1
Это лучший ответ на данный момент; это даже позволит вам продублировать полный блок кода, если вы захотите, просто выбрав несколько строк. Протестировано в Visual Studio Code 1.7.2
Виктор Баррантес

7

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

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


Достигает того же результата со встроенной функциональностью! И вопрос только задал ярлык - не обязательно сочетание клавиш! Тем не менее, было бы более здорово, если бы мышь не была вовлечена.
ДанО

7

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


5

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

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


5

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

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

введите описание изображения здесь


4

Я использовал макрос, который выложил Уэль: Команда дублирования строки для 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"/>
            ...
    

    скриншот редактора

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


4

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

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

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


3

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



3

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

  • CTRL+ E,V
  • CTRL+ D(VS 2017 15.6+)

2

Ctrl+ Dэто новый ярлык, введенный в VS 2017 v15.6, который, кажется, делает именно то, что Ctrl+ E,V

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

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

Источник


1
Свежая установка VS2017 и VS2019: Ctrl + D по умолчанию не сопоставлен с Editor.DuplicateLine ...
thomasgalliker

2

Для Visual Studio Code 2019 :

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

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

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

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


1

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

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


Решарпер - очень медленно
Хорев Иван

1

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



1

Командой, которую вы хотите, является Edit.Duplicate . Он отображается CtrlE, CtrlV. Это не перезапишет ваш буфер обмена.


1

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

0

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

0

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


-3

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

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

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

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

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


1
Очень хорошая пошаговая инструкция для копирования и вставки. Но ОП ищет метод для дублирования строки ...
ʙᴀᴋᴇʀ ʙᴀᴋᴇʀ
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.