Verschieben Sie die Verknüpfung der Zeile nach oben / unten in Visual Studio 2012

76

In VS2010 hatte ich eine Verknüpfung einrichten Alt+ Up/DownCodezeilen nach oben oder unten, so wie ich in meinem Java Tagen in Eclipse verwendet habe.

Nun, da Elektrowerkzeuge und Makros (wie ich diese Verknüpfung in VS2010 eingerichtet habe) in VS2012 nicht verfügbar sind, wie kann ich dies zum Laufen bringen?

Ich habe jemanden erwähnt, der erwähnt hat, dass Resharper dies kann, aber aus Liebe zu Feuer und Wasser kann ich die Befehlsnamen in der Liste der Befehle, die das können, nicht finden. Ich habe ReSharper_MoveUp / MoveDown ausprobiert und das verschiebt keine Zeilen nach oben / unten:

Der Befehl Move_Up hat den Trick nicht ausgeführt

Dadurch werden Textblöcke nach oben und unten verschoben. Ich möchte nur Zeile für Zeile nach oben oder unten, keine ausgefallene Logik. Vor

Was ich habe

Nach ALT+ Up(wenn sich der Cursor auf der WriteLine-Zeile befindet) möchte ich Folgendes sehen:

Line bewegte einen nach oben in der Klammer, eingerückt

Ich habe diese Threads gesehen: Was ist das Äquivalent für ALT + UP / DOWN (Zeile verschieben) von Eclipse in Visual Studio? , Visual Studio: Hotkeys zum Verschieben der Zeile nach oben / unten und zum Durchlaufen der letzten Änderungen , aber keine der vorgeschlagenen Lösungen funktioniert in VS2012.

Irgendwelche anderen Ideen?

UPD 7. November 2012 : . Erweiterungen holen Visual Studio 2012 ein. Jetzt kenne ich mindestens 3 Erweiterungen, die diese Funktionalität bieten:

UPD 15. November 2012: Ich bin gerade auf eine andere Erweiterung gestoßen, die behauptet, dass sie das tut, was hier erforderlich ist. Habe es aber nicht ausprobiert: LineMan Extension

UPD 10 Mai 2015 Gerade installiert VS2015 RC und dies ist bereits eingebaut: MoveLineUp / Down

Trailmax
quelle
2
FYI PowerTools 2012 ist da und hat dies jetzt.
Carl G

Antworten:

34

Update: huzzah, Productivity PowerTools VS2012 ist jetzt verfügbar und bietet diese Funktionalität (zusammen mit einem anderen persönlichen Favoriten , Tools.AddEndTokenAtTheEnd.)

MoveLine-Erweiterung (kompatibel mit VS 2012; ich musste meinen VS manuell neu starten, um die Befehle im Tastaturkürzel-Tool von VS anzuzeigen.)

Carl G.
quelle
3
Wenn Sie eine Tastenkombination einrichten, legen Sie einen Bereich für "Texteditor" fest.
Youngjae
Der Schlüssel zum Erfolg liegt darin, dass Ihre Verknüpfung zum Texteditor gehören sollte UND Sie bereits zugewiesene Tastaturkürzel ENTFERNEN (ENTFERNEN) müssen. Wenn Sie einen Resharper haben, müssen Sie 'Resharper.Resharper.GoToNextMethod' und '..GoToPrevMethod' entfernen (beachten Sie, dass möglicherweise zwei Verknüpfungen (XAML und Text Editor) entfernt werden müssen.
kingdango
@Carl G - Gibt es eine Möglichkeit, das Wort durch Abkürzung horizontal zu verschieben? wie Alt + Up oder Alt + Down?
Sasan K
57

Für diejenigen, die mit Visual Studio 2013 oder höher auf diese Frage gekommen sind, ist die Funktion direkt in das Programm integriert. Verwenden Sie einfach AltUpund AltDown, um die Linie mit dem Cursor - oder den ausgewählten Linien - nach oben und unten zu bewegen.

Wenn Sie möchten es in erneut zu binden Extras > Optionen > Umwelt > Tastatur sind die Tasten Edit.MoveSelectedLinesUpund Edit.MoveSelectedLinesDown. Möglicherweise müssen Sie zuerst Ihre neue Kombination von anderen vorhandenen Schlüsseln entfernen.

Keavon
quelle
Die Frage war über 2012.
Trailmax
20
@trailmax Ich bin mir bewusst, und das hat bereits seine Antworten erhalten, aber ich poste dies, damit Leute, die 2013 verwenden, wissen können, dass dies bereits existiert, damit sie nicht weiter suchen, wie ich es musste.
Keavon
@ RayL Vielleicht haben Sie diese Schlüssel auf etwas anderes zurückgesetzt?
Keavon
4
@ RayL Edit.MoveSelectedLinesUpund Edit.MoveSelectedLinesDown. Bitte melden Sie sich zurück, wenn diese für Sie funktionieren.
Keavon
1
@keavon, das funktioniert, aber aus irgendeinem Grund kann ich diesem Befehl keinen "Atl + Aufwärtspfeil" zuweisen ... hat möglicherweise etwas mit der Installation von Resharper oder Powertools zu tun. Ich denke, das hat mich anfangs vermasselt. Seltsam. "Strg + Alt + NACH OBEN Pfeil" funktioniert aber großartig! Vielen Dank.
RayLoveless
10

Installieren Sie ReSharper.

Öffnen Sie Extras -> Optionen -> Umgebung -> Tastatur (wie in einem Bild gezeigt).

  1. Suchen Sie "ReSharper.ReSharper_MoveUp"
  2. Wählen Sie unter "Neue Verknüpfung verwenden in:" die Option "Texteditor".
  3. Klicken Sie auf "Tastenkombinationen drücken:" und drücken Sie die Tastenkombination (z. B. Alt + ArrowUp).
  4. Klicken Sie auf die Schaltfläche "Zuweisen". Gleiches gilt für "ReSharper.ReSharper_MoveDown".

PS Funktioniert gut für einzelne Zeilen und mehrere ausgewählte Zeilen, entfernt jedoch die Auswahl, nachdem 1 Zeile verschoben wurde. Ich hoffe, es gibt eine Möglichkeit, mehrere Zeilen in einer Auswahl mehrmals zu verschieben.

Ivan Aksamentov - Tropfen
quelle
2
Nein, Resharper versucht zu hilfreich zu sein und drängt diesmal zu sehr. Es verschiebt den Codeblock mit der aktuellen Zeile. Und alles, was ich möchte, ist, einfach eine Zeile nach oben oder unten zu verschieben, keinen verwandten Block.
Trailmax
Für mich verschieben die Befehle "ReSharper.ReSharper_MoveUp" und "ReSharper.ReSharper_MoveDown" nur eine aktuelle Zeile, wenn keine Auswahl vorhanden ist, auch innerhalb des Blocks. Ich bin mir nicht sicher, warum du es anders hast. Ich verwende ReSharper 7.0.97.60 und VS 2012 RTM von MSDN.
Ivan Aksamentov - Drop
2
Ein Beispiel dafür, wo dies nicht funktioniert, ist, wenn eine usingAnweisung oben in einer Datei angezeigt wird und der Benutzer die Anweisung mehrere Zeilen nach unten verschieben möchte, um innerhalb der namespaceDefinition zu liegen. Die Verwendung des MoveDown-Befehls von R # funktioniert für einige Iterationen ordnungsgemäß, bis die usingAnweisung direkt unter der namespaceZeile angezeigt wird. Jetzt wird bei der nächsten Iteration versucht, den Namespace unter seinen aktuellen Block zu verschieben.
Carl G
7

Wenn Sie Resharper haben, können Sie Ctrl+ Shift+ Alt+ drücken, um die aktuelle Aufstellung zu verschieben. oder Ctrl+ Shift+ Alt+ , um eine Zeile nach unten zu verschieben.

Dies funktioniert in VS 2012 Premium mit Visual Studio-Tastaturschema in Resharper 7 (7.0.97.60 um genau zu sein).

Bearbeiten: Dies ist den Befehlen 'ReSharper.ReSharper_MoveUp' / 'MoveDown' zugeordnet.

Noch ein anderer Benutzer
quelle
1
Das funktioniert bei mir aus irgendeinem Grund nicht. Ich habe genau den gleichen Resharper und ordne die gleichen Befehle zu. Und wenn ich versuche, die Linien nach oben / unten zu bewegen, springen sie auf verrückte Weise: manchmal nach oben in eine andere Methode, manchmal nach unten unter den nächsten Block. Aber nicht was ich will - (
trailmax
Yups - das habe ich gesehen, wenn auch etwas zu spät. Haben Sie versucht, Ihre Tastaturbelegung zurückzusetzen? Könnten die Verknüpfungen einem anderen Befehl zugeordnet sein? Ihr Screenshot zeigt an, dass es für XAML zugeordnet ist. Können Sie sehen, ob es auch für Text zugeordnet ist?
YetAnotherUser
Ja, habe nach Texteditor gesucht. Tatsächlich habe ich gerade VS2012 und Resharper neu installiert und es hat eine Standardzuordnung. Ihre Verknüpfungen funktionieren, aber es bewegt sich nicht eine Zeile nach oben oder unten - bewegt einen Block nach oben oder unten - (
Trailmax
Es bewegt den gesamten Codeblock, wenn der Cursor auf den Zeilenanfangs- / Endcodeblock gesetzt wird. Haben Sie versucht, die gesamte Zeile auszuwählen und dann die Verknüpfung zu versuchen?
Noch ein anderer Benutzer
6

In Visual Studio 2017 (mindestens) habe ich unten

Geben Sie hier die Bildbeschreibung ein

Vineel
quelle
Es ist in VS2019, wo Sie zeigen, aber die Schlüssel wurden nicht zugeordnet (zumindest in meiner Installation). Musste die Schlüssel manuell zuordnen.
ΩmegaMan
2

Sie können die Erweiterung Move Line Command verwenden .

Folgen Sie einfach dem Kommentar von Formel 349:

Ich konnte dies mit 2012 so wie es ist zum Laufen bringen.

Benennen Sie das Paket in .zip um und entpacken Sie alle Dateien in einen Ordner. Bearbeiten Sie die Datei extension.vsixmanifest und suchen Sie nach dem XML-Knoten SupportedProducts. Ändern Sie die Version = "10.0" in Version = "11.0".

Komprimieren Sie den Ordnerinhalt erneut und benennen Sie ihn wieder in .vsix um. Funktioniert super!

gius
quelle
Entschuldigung Gius. Ich habe Ihre Antwort verpasst - war im Urlaub und habe aus irgendeinem Grund keine Benachrichtigung erhalten.
Trailmax
2

Während viele Leute scheinen, verschiedene zu empfehlen. Visual Studio Extensions und Resharper möchte ich darauf hinweisen, dass es einen nativen Hotkey gibt, der dieses Ziel erreicht. Ich bin auf diese Frage gekommen, um die Antwort zu finden, da mein Resharper meine Standard-Hotkeys durch die Versionen MoveUp und MoveDown ersetzt hat.

Und während die Hotkeys von Resharper die Dinge auf und ab bewegen, sind sie nicht das, wonach das Originalplakat sucht, und sie sind nicht das, was ich wollte. Diese Hotkeys verschieben Methoden und Codeblöcke, nicht einzelne Zeilen.

Visual Studio verfügt über zwei Hotkey-Befehle, mit denen Sie die ausgewählten Zeilen nach oben oder unten verschieben können. Diese Hotkeys sind:

  • Edit.MoveSelectedLinesDown
  • Edit.MoveSelectedLinesUp

Ich verwende jedoch Visual Studio 2013, sodass ich nicht weiß, ob diese in einer älteren Version vorhanden sind. Wenn 2012 diese Hotkeys nicht hat, ist möglicherweise eine Erweiterung die einzige Lösung.

In beiden Fällen hatte ich ein Problem mit der Suche nach dem genauen Hotkey in der Liste von Visual Studio, und es dauerte eine Weile, bis ich diese gefunden hatte. Ich hoffe, dass meine Lösung es schafft, jemand anderem in einer ähnlichen Situation wie meiner eigenen zu helfen.

JesseNewman19
quelle
Ja, diese gab es in VS2012 nicht. Und die zweite Antwort besagt, dass VS2013 diese hat.
Trailmax
Predigen! Resharper ist in meiner jetzigen Firma verpönt, also versuche ich, es zu umgehen ... nach der Deinstallation von Resharper sind alle meine Verknüpfungen kaputt :(
Eleanor Zimmermann
1

Shift+ Delund dann Ctrl+V

Shift+ Delführt die Schnittoperation (wie Ctrl+ X) in der aktuellen Zeile aus, auf der sich der Cursor befindet.

Dann können Sie Ctrl+ verwenden, Vum es an einer beliebigen Stelle einzufügen.

Gut ist, dass Sie nicht die gesamte aktuelle Zeile auswählen müssen, sondern nur den Cursor auf der Zeile positionieren müssen.

Ein Nachteil bei der Verwendung dieser Verknüpfung ist, dass Sie nicht sehen können, wie sich die Linie vor Ihren Augen lebhaft (nach oben oder unten) bewegt .

Saurav Sahu
quelle
0

Die Verknüpfungen von ReSharper nach oben und unten sind intelligent. Statt nur die aktuelle Zeile zu verschieben (was leicht zu Codebruch führen kann), wird die aktuelle Anweisung in der Liste der Anweisungen, aus denen der Methodenkörper besteht, nach oben und unten verschoben. Dies ist viel leistungsfähiger als nur das Verschieben einer einzelnen Codezeile.

Dies hilft Ihnen jedoch nicht dabei, Ihre Aussage in den ifBlock zu bekommen. Hier müssen Sie eines von zwei Dingen tun.

Bewegen Sie zuerst die Anweisung über den ifBlock und drücken Sie sie dann mit Ctrl+ Shift+ Alt+ Rightnach unten. Die Anweisung befindet sich jetzt im ifBlock, und Sie können sie nach oben und unten verschieben. Sie können auch Ctrl+ Shift+ Alt+ verwenden Left, um es außerhalb des ifBlocks im Bereich aufzurufen.

Alternativ können Sie das Text-Caret an der Außenseite der schließenden Klammer des ifBlocks platzieren und mit Ctrl+ Shift+ Alt+ Downdie Klammer nach unten bewegen, indem Sie die folgenden Anweisungen, einschließlich der Anweisungen innerhalb des ifBlocks, überschreiten.

Diese Schlüssel können viel mehr als nur eine einzelne Anweisung verschieben. Wenn Sie das Text-Caret auf eine Methoden- oder Klassendeklaration setzen Upund Downdie gesamte Methoden- oder Klassendeklaration nach oben und unten verschieben. Wenn Sie das Text-Caret in die Parameterliste einer Methode einfügen Leftund Righteinzelne Parameter neu anordnen (und dann Alt+ Enterdas Refactoring "Signatur ändern" aufrufen kann).

Weitere Details auf den Hilfeseiten .

bürgermatt
quelle
2
Verknüpfungen, die versuchen, "klug" zu sein, sind das Problem mit R #. Oft muss ich nur eine Linie nach oben oder unten verschieben, was nichts mit dem Zielfernrohr oder den Klammern zu tun hat.
Trailmax
Wenn Sie nicht verstehen möchten, wie die Befehle, die Sie nach der Arbeit gefragt haben, funktionieren, kann ich Ihnen nicht helfen. ReShaprer "versucht" nicht, klug zu sein, sondern versteht die Struktur Ihres Codes und hilft Ihnen dabei, ihn neu zu ordnen. Verwenden Sie die Befehle des Editors zum Bearbeiten von einfachem Text. Dies ist nicht das "Problem" von ReSharper - es gibt Ihnen Werkzeuge, Sie können es entweder lernen und verwenden oder etwas anderes verwenden.
Citizenmatt