visual-studio code - Visual Studio:Abkürzung Key:Duplicate Line




2015 window (21)

Gibt es eine Verknüpfung für den Befehl Duplicate Line in Visual Studio 2008?

Einige ähnliche Beispiele:

  • In Notepad++ kann ich die aktuelle Zeile mit: Strg + D duplizieren
  • in EditPlus : Strg + J
  • in NetBeans : Strg + Umschalt + /
  • in Eclipse , Strg + Alt + /
  • in Vi/Vim , yy p
  • etc.

Answers

In Visual Studio 2013 können Sie Strg + C + V verwenden


VS 2017 seine Ctrl + D oder Ctrl + C ; Ctrl + V Beide arbeiten für mich.


Eingebaute Methode mit Zwischenablage

Als @cand erwähnt, können Sie einfach Strg + C ; Strg + V.

Strg + C kopiert die Zeile, wenn nichts ausgewählt ist.

Makro-Lösung

Wenn Sie eine vollständigere Lösung implementieren möchten, um beispielsweise eine einfachere Tastenkombination zu erstellen oder die Zwischenablage nicht zu ändern, finden Sie in diesem Handbuch folgende Informationen:

Doppelter Zeilenbefehl für 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

Um das Makro zu erstellen, gehen Sie einfach zum Makro-Explorer ("Extras-> Makros -> Makro-Explorer" oder Alt + F8 ) und kopieren Sie den Code in ein neues Modul. Jetzt geben Sie einfach eine Tastenkombination dazu:

  1. gehe zu Extras-> Optionen ...
  2. Klicken Sie unter Umgebung auf Tastatur
  3. Geben Sie im Textfeld "Show Commands Containing" "duplicate" ein (dies entspricht dem Namen, den Sie dem Modul gegeben haben.)
  4. Sie sollten nun das Makro in der Liste unten sehen
  5. Wählen Sie "Texteditor" aus der Liste "Neue Verknüpfung verwenden in"
  6. setze den Fokus in das Textfeld "Tastenkombinationen drücken" und drücke die Kombination auf der Tastatur, die du dafür verwenden möchtest (in meinem Fall Strg + Shift + D )
  7. Klicken Sie auf die Schaltfläche "Zuweisen"
  8. Sie sollten nun die Verknüpfung im Textfeld "Verknüpfungen für ausgewählten Befehl" sehen
  9. Drücken Sie die OK-Taste

Und das ist es. Genießen!


Obwohl mir bewusst ist, dass dies keine Tastenkombination ist, dachte ich, dass ich das hinzufügen würde, da es nicht die Verwendung der Zwischenablage erfordert und einigen Leuten helfen könnte.

Markieren Sie die Zeile, die Sie duplizieren möchten. Drücken Sie die Steuerung, klicken Sie mit der Maus auf den markierten Text und ziehen Sie ihn an die gewünschte Stelle. Es wird den markierten Text duplizieren.


Keine Antwort, nur eine nützliche Ergänzung: Als Freebie habe ich gerade (naja ... ähm ... den von Lolo geposteten Code angepasst) ein RemoveLineOrBlock-Makro erfunden. Genießen!

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

Wenn du Eclipse-Style-Zeilen (oder Block-Duplikate) mit STRG + ALT + UP oder STRG + UP + DOWN magst , stelle ich unten Makros für diesen Zweck ein:

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

Ich weiß nicht, ob das in Visual Studio 2008 vorhanden ist, aber in Visual Studio 2010+ können Sie dies einfach tun, indem Sie:

Wählen Sie nichts aus, drücken Sie dann Strg + C und dann (ohne etwas anderes zu tun) Strg + V


In Visual Studio 2010 kopieren Sie die gesamte Zeile, auf der sich der Cursor befindet, mit STRG + EINFÜGEN, und Sie können STRG + V oder UMSCHALT + EINFÜGEN verwenden, um sie einzufügen .


Es gibt eine kostenlose Erweiterung, die Sie visualstudiogallery.msdn.microsoft.com/… herunterladen können, mit der Sie Zeilen duplizieren können, ohne den Inhalt der Zwischenablage zu ersetzen.

Standardmäßig ist es an Alt + D gebunden, aber Sie können es ändern, indem Sie auf Extras-> Optionen-> Umgebung-> Tastatur gehen. Geben Sie "Duplicate" in das Suchfeld ein und suchen Sie nach "Edit.DuplicateSelection" und bearbeiten Sie die Verknüpfung nach Belieben. Ich bevorzuge Strg + D , um mit anderen Editoren konsistent zu sein.


Ich habe das Makro verwendet, das Wael gepostet hat: Duplicate line command für Visual Studio , aber es hat vor einer Woche nicht mehr funktioniert, vermutete ich wegen eines Windows-Updates. Und ich hatte Recht, ab Februar 2014 wurden Macros in VS2010 (und 2008 anscheinend) deaktiviert.

Um dies zu beheben, müssen Sie entweder die Sicherheitsupdates deinstallieren oder eine Zeile Code in die Konfigurationsdateien einfügen, wie here gezeigt.

Auf einem 64-Bit-Windows-Computer sind die Standardpfade für diese Dateien wie folgt:

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

Sie müssen Ihren Texteditor mit Admin-Rechten ausführen oder es wird nicht funktionieren! Hoffentlich hilft das jedem anderen, der plötzlich seine Makrofunktionalität herausgezogen hat.


Hier ist ein Makro, das auf dem Link von Wael basiert, aber in den folgenden Bereichen verbessert wurde:

  • etwas kürzer
  • etwas schneller
  • Bemerkungen :)
  • verhält sich für Zeilen, die mit "///" beginnen
  • kann mit einem einzigen Undo rückgängig gemacht werden
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

Strg + C + V funktioniert für mich auf VS2012 ohne Erweiterung.


Strg + D funktioniert für mich in VS2012 mit Resharper. Es ist Hotkey von Resharper.


Da ich in Visual Studio 2013 keine Makros verwenden kann, habe ich ein Visual Studio Plugin gefunden (ich benutze es in 2012 und 2013). visualstudiogallery.msdn.microsoft.com/… dupliziert Auswahlen und ganze Zeilen - sie müssen nur teilweise ausgewählt werden. Die Standardverknüpfung ist ALT + D.


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

Meine Geschichte: Ich habe angefangen in einer neuen Firma zu arbeiten, habe vorher noch nie Visual Studio benutzt. Eines der ersten Dinge - wie man Zeilen dupliziert. Nach dem Einrichten von Makro ReSharper sagte mir: Möchten Sie meine Verknüpfung ersetzen, die war: "doppelten Text" :)


In Visual Studio 2008 können Sie STRG + C + V verwenden


Es ist einfach Strg + C ; Strg + V , überprüfen Sie diesen link . Solange Sie keinen Text auswählen, wird die Zeile, um die sich der Cursor befindet, dupliziert, wenn Sie Strg + C drücken.


Für Interessierte habe ich das exakte Verhalten von Notepad ++ in einem Visual Studio Macro nachgebildet. Im Folgenden finden Sie den Code (ausführlich kommentiert). Wenn Sie eine Verknüpfung wie in Notepad ++ ( Strg + D ) haben möchten, können Sie dies einfach über Macros.MyMacros.DuplicateText.DuplicateText Tools > Option > Environment > Keyboard und nach Macros.MyMacros.DuplicateText.DuplicateText suchen. Wählen Sie den Befehl und weisen Sie die Verknüpfung zu (ich empfehle, sie nur dem Texteditor und nicht global zuzuweisen).

Für diejenigen, die nicht wissen, wie man dieses Makro zu Visual Studio hinzufügt, folgt die Erklärung, wie man das macht:

  1. Gehen Sie zu Extras, Macros , Macro Explorer (oder verwenden Sie die Tastenkombination Alt + F8 )
  2. Klicken MyMacros nun im Makro-Explorer mit der rechten MyMacros auf MyMacros und wählen Sie New Module
  3. Ein neues Windo öffnet sich und gibt ihm den Namen DuplicateText
  4. Öffnen Sie nun dieses Modul mit einem Doppelklick. Ein neues Fenster ( Microsoft Visual Studio Macros ) wird geöffnet.
  5. Löschen Sie nun den gesamten Text, den Sie sehen, und fügen Sie den folgenden Code ein.

Hier ist der Code

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

Ich verwende den Anwendungslink: AutoHotkey mit dem Code, der in der Datei CommentDuplikateSaveClipboard.ahk gespeichert ist. Sie können Verknüpfungen bearbeiten / entfernen, es ist einfach.
Ich habe einen Link zu dieser Datei "Shortcut to CommentDuplikateSaveClipboard.ahk" in Autostart in Windows.
Dieses Skript schützt Ihre Zwischenablage.
Wenn Sie neugieriger sind, würden Sie Shortcuts zu thable / enable script hinzufügen.
Ich benutze manchmal sehr beeindruckende Multi Clipboard Skript, um einfach mit vielen clips auf der Festplatte zu speichern und mit Strg + C, X, V zu kopieren, einfügen, schneiden, nächste, vorherige, löschen Sie diese, alle löschen.

;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

Der gewünschte Befehl ist Edit.Duplicate . Es ist Ctrl E , Strg V zugeordnet . Dadurch wird Ihre Zwischenablage nicht überschrieben.


Ich wollte immer, dass Visual Studio eine Option enthält, um die Regionen einfach zu reduzieren / erweitern. Ich habe die folgenden Makros, die genau das tun werden.

Imports EnvDTE
Imports System.Diagnostics
' Macros for improving keyboard support for "#region ... #endregion"
Public Module CollapseExpandRegions
' Expands all regions in the current document
  Sub ExpandAllRegions()

    Dim objSelection As TextSelection ' Our selection object

    DTE.SuppressUI = True ' Disable UI while we do this
    objSelection = DTE.ActiveDocument.Selection() ' Hook up to the ActiveDocument's selection
    objSelection.StartOfDocument() ' Shoot to the start of the document

    ' Loop through the document finding all instances of #region. This action has the side benefit
    ' of actually zooming us to the text in question when it is found and ALSO expanding it since it
    ' is an outline.
    Do While objSelection.FindText("#region", vsFindOptions.vsFindOptionsMatchInHiddenText)
        ' This next command would be what we would normally do *IF* the find operation didn't do it for us.
        'DTE.ExecuteCommand("Edit.ToggleOutliningExpansion")
    Loop
    objSelection.StartOfDocument() ' Shoot us back to the start of the document
    DTE.SuppressUI = False ' Reenable the UI

    objSelection = Nothing ' Release our object

  End Sub

  ' Collapses all regions in the current document
  Sub CollapseAllRegions()
    Dim objSelection As TextSelection ' Our selection object

    ExpandAllRegions() ' Force the expansion of all regions

    DTE.SuppressUI = True ' Disable UI while we do this
    objSelection = DTE.ActiveDocument.Selection() ' Hook up to the ActiveDocument's selection
    objSelection.EndOfDocument() ' Shoot to the end of the document

    ' Find the first occurence of #region from the end of the document to the start of the document. Note:
    ' Note: Once a #region is "collapsed" .FindText only sees it's "textual descriptor" unless
    ' vsFindOptions.vsFindOptionsMatchInHiddenText is specified. So when a #region "My Class" is collapsed,
    ' .FindText would subsequently see the text 'My Class' instead of '#region "My Class"' for the subsequent
    ' passes and skip any regions already collapsed.
    Do While (objSelection.FindText("#region", vsFindOptions.vsFindOptionsBackwards))
        DTE.ExecuteCommand("Edit.ToggleOutliningExpansion") ' Collapse this #region
        'objSelection.EndOfDocument() ' Shoot back to the end of the document for
        ' another pass.
    Loop
    objSelection.StartOfDocument() ' All done, head back to the start of the doc
    DTE.SuppressUI = False ' Reenable the UI

    objSelection = Nothing ' Release our object

  End Sub
End Module




visual-studio visual-studio-2008 keyboard-shortcuts