Visual Studio: atajo Clave: Línea duplicada


423

¿Hay un acceso directo para el comando Duplicar línea en Visual Studio 2008?

Algunos ejemplos similares:


66
Solo para información, uno de los muchos beneficios que ofrece ReSharper es la capacidad de hacer esto.
AakashM

2
visualstudiogallery.msdn.microsoft.com/… Descargue esto y alt + D duplicará su selección o si no se resalta nada, duplicará toda la línea. Lamentablemente, las macros visuales básicas no parecen funcionar en 2013, solo las macros js.
shenk

1
Dios mío, ¿cuál es el problema para asignar la combinación de una persona para duplicar la línea? Solía ​​Eclipse. Y Ctrl + D es para eliminar la línea. ¿Por qué es tan complicado en VS?
Andrii Muzychuk

2
@mghhgm a continuación es la respuesta que estás buscando. (shift + alt + down o shift + alt + up)
Victor Barrantes

1
El ejemplo de vim no se duplica, es ctrl + c; ctrl + v. "Yank" corta y pega. No es exactamente lo mismo que los otros ejemplos.
ANeves

Respuestas:


406

En Visual Studio 2019

Ctrl + D

En Visual Studio 2017 (v15.6 y posterior)

Ctrl + D

En Visual Studio 2017 (pre v15.6)

(editar) Esta función ahora está integrada en VS2017: Ctrl+ E, Vduplica una línea si no se selecciona nada o duplica la selección. Puede asignarlo a una combinación de teclas diferente o buscarlo en el menú:

Duplicate line in VS2017

Vea esta referencia para más información.

VS2017 anterior, método incorporado usando el portapapeles

Como @cand mencionó, puede hacer Ctrl+ C; Ctrl+ V.

Ctrl+ Ccopiará la línea si no se selecciona nada.

Solución macro (pre VS2017)

Si desea implementar una solución más completa, tal vez para crear un método abreviado de teclado más simple o no desea efectuar el portapapeles, consulte esta guía:

Comando de línea duplicada para 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

Para crear la macro, simplemente vaya al explorador de macros ("Herramientas-> Macros-> Explorador de macros" o Alt+ F8) y copie y pegue el código en un nuevo módulo. Ahora solo asigne un atajo de teclado:

  1. vaya a Herramientas-> Opciones ...
  2. en Entorno, haga clic en Teclado
  3. en el cuadro de texto "Mostrar comandos que contienen", ingrese "duplicado" (esto de acuerdo con el nombre que le dio al módulo).
  4. ahora debería ver la macro en la lista a continuación
  5. elija "Editor de texto" de la lista "Usar nuevo acceso directo en"
  6. establece el foco en el cuadro de texto "Presiona teclas de método abreviado" y presiona la combinación en el teclado que deseas usar ( Ctrl+ Shift+ Den mi caso)
  7. presione el botón "Asignar"
  8. ahora debería ver el acceso directo en el cuadro de texto "Accesos directos para el comando seleccionado"
  9. presione el botón OK

Y eso es. ¡Disfrutar!


3
Sólo traté de ella, y es interesante que repite algunos caracteres adicionales cuando hay un "bloque de código del lado del servidor" con las etiquetas cortas, así: <div>Profile.UserName: <%=Profile.UserName %></div>- después de la duplicación de esta línea usando esta macro, se convierte en la siguiente: <div>Profile.UserName: <%=Profile.UserName %></div> %></div>. Como puede ver, la última parte se "repite". Cuando no hay bloques de código del lado del servidor, funciona bien. ¿Conoces una solución para eso? Por cierto, otra cosa interesante que experimenté es que esta macro es relativamente "lenta", lo que no esperaba ... :)
Sk8erPeter

66
Después de febrero de 2014, las macros están deshabilitadas por razones de seguridad. Desplácese hacia abajo y vea la respuesta de MasterHD para la solución para obtener el método de Wael para seguir trabajando incluso después de la actualización de seguridad.
MasterHD

44
Encuentro que Ctrl C + Ctrl V es limitante en los casos en que ya he copiado algo en el portapapeles, y me gustaría duplicar una línea antes de pegar.
Sawe

1
¿Por qué demonios es tan difícil implementar una acción duplicada o una combinación de teclas que la mayoría de los otros editores hacen de manera muy eficiente e intuitiva? : /
kisanme

1
por qué es necesario Copié algo en otra pestaña, llego a una línea específica en esta pestaña, duplico la línea y luego uso <code> CTRL + V </code> para pegar algo de código. De lo contrario, tengo que volver a copiar otra parte del código. ..
Augustas

136

Hay una extensión gratuita que puede descargar aquí que le permite duplicar líneas sin reemplazar el contenido del portapapeles.

Por defecto está vinculado a Alt+ D, pero puede cambiarlo a lo que desee yendo a Herramientas-> Opciones-> Medio ambiente-> Teclado. Escriba "Duplicar" en el cuadro de búsqueda y busque "Editar. Duplicar selección" y edite el acceso directo a lo que desee. Prefiero Ctrl+ Dser coherente con otros editores.


23
Esta es la respuesta real que está buscando, todo lo demás publicado aquí es inteligente, pero no es lo que se le pidió.
Remco Boom

8
Edit.DuplicateSelectionno parece estar presente en VSE 2013. O cualquier otra cosa con el término duplicado de hecho.
ᴍᴀᴛᴛ ʙᴀᴋᴇʀ


2
Matthew, debes hacer clic en el enlace AQUÍ e instalar la extensión. ENTONCES tienes que cerrar el estudio visual y volver a abrirlo. ENTONCES tienes que ir a Herramientas ==> Opciones ==> Entorno ==> Teclado y ENTONCES tienes que escribir Duplicar y lo verás. Luego puedes presionar F4 para que actúe como QEDIT o lo que quieras y la vida será buena.
ggb667

Incluso si es un poco doloroso tener que instalar otra herramienta, esta hace el trabajo y lo hace bien. Gracias !
Sbu

94

Es simple Ctrl+ C; Ctrl+ V, revisa este enlace . Siempre que no seleccione ningún texto, esto duplicará la línea sobre la que se encuentra el cursor cuando presiona Ctrl+ C.


159
Existen numerosas ocasiones en las que no desea pasar por el portapapeles, por ejemplo, si desea duplicar una línea y luego reemplazar parte del contenido con algo que tenga en el portapapeles.
Effata

77
Claro, pero la pregunta pedía un atajo, no una solución general para la edición de texto, así que creo que para propósitos simples es suficiente (al menos en mi caso).
cand

44
gracias, pero esperaba algo como Ctrl + j en Edit Plus o Crtl + D en Notepad ++ ... ¿hay alguno en VS2008 o en VS2010
Posto

2
Solo he encontrado este. Sin embargo, no es tan malo, por supuesto, sería más fácil usar ctrl + D, pero si desea duplicar 1 línea en 100 copias, puede hacerlo usando ctrl + c (sin necesidad de seleccionar nada, simplemente coloque el símbolo del sistema sobre la línea deseada ) + 100 veces ctrl + v. Es solo un conjunto de pulsaciones de teclas más que la solución ctrl + d. Puede ser más problemático si desea hacer una duplicación más compleja.
cand

@ Mason240 Esa fue también mi reacción inicial a la parte citada en la respuesta aceptada, sin embargo, la información adicional "Siempre que no seleccione ningún texto, esto duplicará la línea sobre la que se encuentra el cursor ..." solución en mi caso.
RyanfaeScotland

74

Ctrl+ C+ Vfunciona para mí en VS2012 sin extensión.


Funciona en VS2008 también!
Teodron

1
Funciona en VS2017.
Kyle Delaney el

8
Necesita una solución sin sobrescribir el portapapeles
Pierre de LESPINAY

Solo para complementar la respuesta, solo necesita presionar la combinación completa para la primera duplicación. Desde el segundo, simplemente presione Ctrl + V tantas veces como sea necesario para seguir replicando la línea.
Luty

34

Ctrl+ Dfunciona para mí en VS2012 con Resharper. Es la tecla de acceso rápido de Resharper.


11
no, no lo es, solo me di cuenta de eso después de publicar, pero es un atajo de Resharper. y si se ha instalado un compartidor, esto podría ayudar.
Sawe

1
¡Tengo un compartidor, y no conocía ese atajo! Gracias.
DanO

Este es el acceso directo predeterminado si está utilizando el esquema de teclado "Resharper 2.xo IntelliJ IDEA" de Resharper. Resharper le permite seleccionar la asignación del teclado durante la instalación. El esquema de teclado "Visual Studio" es una de las opciones. Si elige el esquema de teclado "Visual Studio", Ctrl + D se asignará a otra cosa.
GeoMac

Esa es una respuesta a una pregunta de ReSharper.
Antony Booth

Tenga en cuenta que esto también funciona cuando se seleccionan varias líneas, es decir, puede duplicar un montón de código, no solo una línea. Lo malo, por supuesto, es que resharper no es gratis (pero parece que el mundo .Net está acostumbrado a eso más que el mundo Java de donde vengo).
Amos M. Carpenter

31

En Visual Studio 2013 puedes usar Ctrl+ C+V


2
Me alegro de haberme paseado. Esto es lo que quería.
Daryl

Trabajando en VS Code Linux, también.
Han

44
Necesita una solución sin sobrescribir el portapapeles
Pierre de LESPINAY

2
sería genial si no anulara el portapapeles
mikus

23

Aquí hay una macro basada en la del enlace publicado por Wael, pero mejorada en las siguientes áreas:

  • un poco más corto
  • un poco más rápido
  • comentarios :)
  • se comporta para líneas que comienzan con "///"
  • se puede deshacer con un solo deshacer
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
Sí, este realmente funciona, el de la respuesta aceptada fue copiar cosas al azar en la nueva línea. Buen trabajo, gracias!
zuallauz

No encontré la opción Macros en VS 2010 Express, ¿se puede implementar allí?
Nenotlep

1
Después de febrero de 2014, las macros están deshabilitadas por razones de seguridad. Desplácese hacia abajo y vea la respuesta de MasterHD para la solución alternativa para que el método de Mark siga funcionando incluso después de la actualización de seguridad.
MasterHD

11

Si desea duplicar la línea (o bloque) de estilo eclipse usando CTRL+ ALT+ UPo CTRL+ UP+ DOWN, a continuación publico macros para este propósito:

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

¿Por qué tantos métodos prolongados para lograr algo tan simple? Se tarda menos de un minuto en descargar e instalar la extensión de Microsoft. La página dice que lo vinculará a ALT+ Dde forma predeterminada, pero para mí lo vincula a CTRL+ Dautomáticamente en Visual Studio Community 2015 sin ningún cambio.

Aquí está el enlace para descargar la extensión desde Microsoft.com.


La pregunta es sobre Visual Studio 2008 y no 2015 :)
sarcom

Cabe señalar que esta extensión duplica las líneas seleccionadas, y no la selección. Pero sigue siendo útil.
ANeves

Este es el más útil para mí porque quería una solución que no reemplazara lo que tenía en el portapapeles. Esta extensión es exactamente lo que estaba buscando. Y según el autor de la extensión, esto actualmente funciona para Visual Studio 2012, 2013, 2015 y 2017.
Marcado

8

En código visual studio ( WebMatrix ):

Copiar líneas hacia abajo: Shift+ Alt+down

Copiar líneas arriba: Shift+ Alt+up

Eliminar líneas: Ctrl+ Shift+k


1
Esta es la mejor respuesta hasta ahora; incluso le permitirá duplicar un bloque completo de código, si lo desea, simplemente seleccionando varias líneas. Probado en Visual Studio Code 1.7.2
Victor Barrantes

7

Si bien me doy cuenta de que esto no es un atajo de teclado, pensé que lo agregaría, ya que no requiere el uso del portapapeles y podría ayudar a algunas personas.

Resalte la fila que desea duplicar. Presione control, haga clic con el mouse en el texto resaltado y arrastre hasta donde desee ir. Duplicará el texto resaltado.


¡Logra el mismo resultado con la funcionalidad incorporada! Y la pregunta solo pedía un atajo, ¡no necesariamente un atajo de teclado! Aún así, sería más increíble si el mouse no tuviera que estar involucrado.
DanO

7

Como no puedo usar macros en mi Visual Studio 2013, encontré un complemento de Visual Studio (lo uso en 2012 y 2013). Selección duplicada duplica las selecciones y las líneas completas; solo deben seleccionarse parcialmente. El atajo estándar es ALT+ D.


5

No sé si esto existe en Visual Studio 2008, pero en Visual Studio 2010+ puede hacer esto fácilmente:

No seleccione nada, luego presione Ctrl+ CY luego (sin hacer nada más) Ctrl+V


5

En Visual Studio 2017 y tal vez otra versión No necesita Macro o Extensión ,

  1. Ir Tools > Options > Environment > Keyboards
  2. Debajo de Show commands containing:escribirEdit.Duplicate
  3. Coloque el cursor en Press shortcut keys:y presione Ctrl+ Dy haga clic en el Assignbotón
  4. haga clic OKpara guardar su nuevo atajo de teclado

ingrese la descripción de la imagen aquí


4

He estado usando la macro que publicó Wael: comando de línea duplicada para Visual Studio , pero dejó de funcionar hace una semana, supuse debido a una actualización de Windows. Y estaba en lo correcto, a partir de febrero de 2014, las macros se han deshabilitado en VS2010 (y aparentemente en 2008).

Para solucionar esto, deberá desinstalar las actualizaciones de seguridad o agregar una línea de código a los archivos de configuración como se muestra aquí .

En una máquina Windows de 64 bits, las rutas predeterminadas para estos archivos son:

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

    captura de pantalla del editor

¡ DEBE ejecutar su editor de texto con derechos de administrador o no funcionará! Esperemos que esto ayude a cualquier otra persona que de repente tenga su funcionalidad macro sacada de debajo de ellos.


4

para Visual Studio 2012, 2013, 2015, 2017 siga el enlace y descargue la extensión

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

Ahora vaya a Herramientas> Opciones> Teclado y escriba "Duplicar" en el cuadro de búsqueda (la cadena de comando completa es "Editar.DuplicarSelección"). Aquí puede vincularlo a cualquier acceso directo de la misma manera que lo haría con cualquier otro comando.


3

Simplemente coloque el mouse en la línea para copiar y haga CTRL+ C, luego CTRL+ Ven la misma línea. Funciona como magia :-)



3

Para aquellos que todavía están viendo esta pregunta en Visual Studio después de 2008, se ha agregado un Edit.Duplicate real:

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

2

Ctrl+ Des un nuevo acceso directo introducido en VS 2017 v15.6 que parece hacer exactamente lo que Ctrl+ E,V

Ctrl + D duplicará la línea en la que se encuentra el cursor y la insertará justo debajo de la línea en foco. Si desea duplicar un conjunto específico de código, simplemente seleccione la parte del código que desea duplicar antes de invocar el comando de código duplicado.

No afectará tu portapapeles

Fuente


1
Instalación nueva de VS2017 y VS2019: Ctrl + D no se asigna de forma predeterminada al Editor. DuplicateLine ...
thomasgalliker

2

Para Visual Studio Code 2019 :

Editar atajos de teclado del menú con: ctrl+k y ctrl+s

Edite "Copiar línea abajo" ( Shift+ Alt+ DownArrow) en su propio acceso directo.

Puede encontrarlo con el ID de comando: editor.action.copyLinesDownAction

Para mí, es ctrl+d


1

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

Mi historia: comencé a trabajar en una nueva empresa, nunca antes usé Visual Studio. Una de las primeras cosas: cómo duplicar la línea. Después de configurar la macro, ReSharper me dijo: ¿le gustaría sustituir mi acceso directo que era: "texto duplicado" :)


resharper - muy lento
Horev Ivan

1

En Visual Studio 2010, copie toda la línea en la que está el cursor con CTRL+, INSERTluego puede usar Ctrl+ Vo SHIFT+ INSERTpara pegarlo.



1

El comando que desea es Editar . Duplicar . Se asigna al CtrlE, CtrlV. Esto no sobrescribirá su portapapeles.


1

Uso el enlace de la aplicación: AutoHotkey con el siguiente código guardado en el CommentDuplikateSaveClipboard.ahkarchivo. Puede editar / eliminar accesos directos, es fácil.
Tengo un enlace a este archivo "Shortcut to CommentDuplikateSaveClipboard.ahk"en Autostartlas ventanas.
Este script protege tu portapapeles.
Si tiene más curiosidad, agregaría accesos directos a este script habilitado / habilitado.
A veces uso muy impresionante Multi Clipboardsecuencia de comandos para fácil manejo con muchas clipsguardado en el disco y su uso con CTRL+ C, X, Vcopiar, pegar, cortar, siguiente, anterior, borrar, elimine todos.

;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

No es una respuesta, solo una adición útil: como obsequio, acabo de inventar (bueno ... ehm ... ajusté el código publicado por Lolo) una macro RemoveLineOrBlock. ¡Disfrutar!

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

en VS2019 y también en VS2017 , puede seleccionar Herramientas-> Opciones-> Teclado y puede elegir en la opción desplegable del esquema Resharper (Visual Studio) , y obtendrá una asignación como si estuviera usando Resharper , en este caso Ctrl+ Dhará el truco para duplicar la línea. De todos modos, según la documentación, esto debería estar fuera de la puerta en Visual Studio 2017 Versión 15.8 o superior


-3

Para Visual Studio 2010, intente usar estos comandos para la duplicación rápida de línea (usa el portapapeles):

  • Haga clic en la línea que desea copiar. Ctrl+ Ccopiará esa línea.

  • Luego presione Ctrl+ Shift+ Enterpara insertar un espacio en blanco debajo del punto de inserción

    (Alternativamente, use Ctrl+ Enterpara insertar una línea en blanco sobre el punto de inserción).

  • Luego simplemente use Ctrl+ Vpara pegar la línea.


1
Muy buenas instrucciones paso a paso para copiar y pegar. Pero el OP está buscando un método para duplicar una línea ...
ᴍᴀᴛᴛ ʙᴀᴋᴇʀ
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.