Produktivität mit Visual Studio Eclipse-Shortcuts und -Tooling in Visual Studio wiederfinden und einstellen
Eine Tutorial von Philipp Hauer vom 31.03.2012. Update: 13.09.12 ©
Inhaltsangabe
- Vorwort
- Auswahl von nützlichen Shortcuts in Visual Studio
- Freie Erweiterungen von Visual Studio
- Eclipse-Tooling in Visual Studio einrichten und nutzen
- Nützliche Funktionen auf günstige Shortcuts umbiegen (auf Eclipse-Standard)
-
Makro definieren:
- Zeile duplizieren
- Zeile entfernen
- Zeile verschieben
-
Exportieren und Importieren von Tastenkombinationen
- Kommentare
Vorwort
Wer lange mit Eclipse gearbeitet und sich dabei intensiver mit der IDE beschäftigt hat, wird viele Funktionen und Shortcuts lieben gelernt haben. Je mehr Shortcuts man kannte und nutze, umso einschneidender wird der Wechsel zu Visual Studio werden. Da merkt man erst, wie sehr diese Funktionen die Produktivität gesteigert haben.
Wie ist das Kürzel für Funktion XY in Visual Studio? Gibt es Refactoring- Vervollständigungsfunktion XY auch in Visual Studio? Lässt sich der Shortcut für XY nicht ändern? Dieser Artikel versucht eine Auswahl dieser Fragen zu beantworten und ist damit aus der Perspektive eines Eclipse-Umsteigers geschrieben.
Aber natürlich ist dieser Artikel auch für nicht Eclipse-Jünger lesenswert, da er viele interessante und mächtige Erweiterungen, Funktionen und Shortcuts beschreibt, welche schließlich die Produktivität mit Visual Studio steigern. Nur die Herangehensweise und Auswahl ist Eclipse-driven. ;-)
Referenzsystem ist Visual Studio 2010. Das meiste sollte aber auch in Visual Studio 2008 funktionieren. Einzig die Extension Productivity Power Tools gibt es nur für die 2010er Version.
Auswahl von nützlichen Shortcuts in Visual Studio
Folgende nützliche Shortcuts in Visual Studio sind meiner Meinung nach adäquat belegt und können so bleiben.
Shortcut | Bedeutung | Situation (Beispiel) |
---|---|---|
F7 | Sprung von XAML zu Codebehind | |
F12 | Sprung zur Definition. | Cursor steht auf Klassennamen |
Shift-F12 | Show References (Orte an dem das Element verwendet wird). | Cursor steht auf Klassennamen |
Strg-Tab | Zwischen Tabs wechseln | |
Strg+Tab (halten) | Öffnet Übersicht über geöffnete Tabs und weitere Funktionen | |
Strg-F | Suchen in aktueller Datei | |
Strg-Shift-F | Suchen in allen Dateien | |
Strg-Alt-F | Quick Find (Erweiterung CodeRush Xpress notwendig) |
Freie Erweiterungen für Visual Studio
Es gibt viele Erweiterungen für Visual Studio, die die Produktivität steigern. Leider sind viele kommerziell, aber es gibt auch gute freie. Prinzipiell gilt: Die Erweiterungen bieten mehr als ich in diesem Artikel präsentieren kann. Die offiziellen Dokus der Extensions sind aber sehr gut und es empfiehlt sich, diese zu konsultieren.
Erweiterung | Beschreibung |
---|---|
CodeRush Xpress | Extrem mächtige Extension. Fügt u. a. viele sinnvolle Automatismen und Refactorfunktionalitäten hinzu. Es gibt sehr viel zu entdecken - mehr als ich in diesem Tutorial zeigen kann. |
Productivity Power Tools | Viele kleinere Verbesserungen fürs Coding. Nur für Visual Studio 2010. |
Power Command | Fügt u. a. sinnvolle Befehle dem Kontextmenü im Projektmappen-Explorer hinzu. |
Eclipse-Tooling in Visual Studio einrichten und nutzen
Quick-Fix (Strg-1)
Eclipse-Jünger lieben es und werden es in Visual Studio sehr vermissen. Es möglicht blitzschnelle Codevervollständigung, -generierung und Refactoring (besonders schnell im Zusammenspiel mit Pfeil- und Entertasten). Zwei Beispiele von duzenden nützlichen Stortcuts sind:
Es muss nur der Instanzierungsteil geschrieben werden. Mit Strg-1 und Enter wird das Objekt einer korrekt getypten Variable zugewiesen.
Signatur first! Blitzschnell lässt sich ein passender Methoden-Stub generieren.
Aber die Erweiterung CodeRush schafft Abhilfe und fügt Visual Studio ein ähnliches Fenster hinzu. Allerdings muss der Shortcut dafür noch umgebogen werden (der ist standardmäßig ungünstig gelegt). Dazu müssen wir in die CodeRush-Optionen gehen (Strg+Shift+Alt+O) und dort unter IDE>Shortcuts den Shortcut für das Command Refactor!>Refactor auf Strg-1 legen. Sollte der Shotcut nicht existieren, kann er erstellt werden ("New Keyboard Shortcut" wählen. Shortcut: "Ctrl+1". Command: "Refactor". Context: "Focus>Documents>Source>Code Editor"):
Voila:
CodeRush-Refactor und Eclipse Quick-Fix können viel viel viel mehr als das. Einfach immer mal Strg+1 anschlagen und schauen, was da alles geht. ;-)
Methodenkommentar-Stub generieren lassen
Keine Überraschung: Während man in Eclipse den Cursor auf die Zeile über der Methodensignatur setzen und "/**" tippt, wird dieser automatisch zum vollständigen JavaDoc-Kommentar vervollständigt. Dabei werden für Parameter, Exception und Returnvalue entsprechende Tags angelegt. Analog funktioniert es in Visual Studio nur eben mit "///" - logisch, aber ich wollte es einmal geschrieben haben. Code-Doku ist unbeschreiblich wichtig. Der nächste Entwickler (und du in einem Jahr) werden dir dankbar sein. ;-)
Aktuell geöffnete Datei im Projektmappen-Explorer anzeigen: Link with Editor.
Aktuell geöffnete Datei wird damit im Explorer
hervorgehoben und ausgeklappt
Die "Link with Editor"-Funktion ist extrem nützlich und erspart in Eclipse ewiges Gesuche nach der aktuellen Klasse. In Visual Studio existiert dafür leider kein Button, die man bequem toggeln kann. Die Einstellung muss global in den Optionen eingeschaltet werden - aber immerhin: es geht. Zu finden unter:
- Englisch: Tools > Options > Projects and Solutions. Dort "Track Active Item in Solution Explorer" checken.
-
Deutsch: Extras > Optionen > Projekte und Projektmappen. Dort "Aktive Elemente im Projektmappen Explorer überwachen" checken.
Nützliche Funktionen auf günstige Shortcuts umbiegen (zu Eclipse-Standard)
Ich empfand, dass viele "Shortcuts" in Visual Studio ihren Namen nicht verdienen und eine Zumutung waren. Häufig muss man mehr als 2 Nicht-Kontrolltasten drücken, sie liegen ungünstig auf der Tastatur (2 Hände notwendig), müssen oft nacheinander gedrückt werden und/oder lassen sich schlecht merken. All das schreit förmlich nach Umbiegen der Shortcuts.
Das ist kein Aufruf alle Shortcuts in Visual Studio kategorisch umzubiegen - viele sind kurz und gut. Sich an diese Standardkürzel zu gewöhnen ist sinnvoll, aber unsinnige Shortcuts können und sollten meiner Meinung nach geändert werden.
Die Option zum Ummappen der Kürzel ist in den Optionen unter Environment>Keyboard bzw. Umgebung>Tastatur zu finden.
Noch ein Hinweis: Sollte ein Hotkey einmal nicht ziehen, kann es helfen, den Kontext des neuen Kürzels auf "Text-Editor" (statt "Global") zu setzen - oder es einfach immer machen.
Funktion | Eclipse-Belegung | Commandname in Visual Studio | Bemerkung |
---|---|---|---|
Zeile/Auswahl Ein- und Auskommentieren | Strg-7 | Edit.CommentSelection
Bearbeiten.Auswahlkommentieren Edit.UncommentSelelection Bearbeiten.Auskommentierung |
Da Visual Studio nicht erkennt, wenn eine Markierung bereits auskommentiert ist und daher bei Betätigung des Shortcuts einkommentiert werden soll, muss ein separates Kürzel definiert werden (z. B. Strg-Shift-7) |
Zeile/Auswahl verschieben | Alt-Oben
Alt-Unten |
Edit.MoveLineDown
Edit.MoveLineUp |
Die Erweiterung Productivity Power Tools bringt diese Einstellung mit. Alternativ (oder wenn nur Visual Studio 2008 zu Verfügung steht), kann ein Makro definiert werden. |
Zeile/Auswahl löschen | Strg-D | Edit.LineDelete
Bearbeiten.Zeileentfernen |
Sollte dies nicht funktionieren, kann ein Makro definiert werden. |
Zeile/Auswahl duplizieren | Strg-Alt-Oben
Strg-Alt-Unten |
/ | Nicht vorhanden. Für diese Funktionalität muss ein Makro definiert werden.
Alternative: CodeRush bietet das Command Duplicate, was einem Kürzel zugewiesen werden kann. Dies kann in den CodeRush-Optionen (Strg+Alt+Shift+O) eingestellt werden. Dort links IDE>Shortcuts und rechts Code auswählen. Dann das Command DuplicateLine umbiegen. Problem hierbei: Es können nicht mehrere Zeilen auf einmal dupliziert werden. |
Automatisch formatieren | Strg-F | Edit.FormatDocument
(Edit.FormatSelection) Bearbeiten.Dokumentformatieren |
Hier bin ich selbst vom Eclipse-Standard abgewichen, weil Strg-F sinnvoll mit Suche belegt ist. Da Strg-Shift-F und Strg-Alt-F ebenfalls sinnvoll belegt sind, habe ich mich für Strg-Shift-Alt-F entschieden. Nicht schön, aber in Visual Studio brauch ich es nicht oft, weil der Formatter weniger mächtig ist als in Eclipse. |
Vorwärts und rückwärts zwischen Dokumenten navigieren | Alt-Links
Alt-Rechts |
View.NavigateBackward (Kontext: TextEditor)
|
Ist CodeRush installiert, so ist dieses Kürzel für CamelCaseRight und CamelCaseLeft belegt. Aber CodeRush weist bei Verwendung des Shortcuts mit einem PopUp darauf hin. In diesem Popup kann mit "Disable" die CodeRush-Belegung deaktiviert werden. Anschließend sollte es funktionieren. |
Tab schließen | Strg-W | File.Close
Datei.Schließen |
Ist CodeRush installiert, muss wieder einmalig bei erster Benutzung die CodeRush-Belegung im aufgehenden Fenster deaktiviert werden. |
Folgende Shortcuts finde ich sinnvoll und so zentral, dass ich sie so gelassen habe, um beim Standard zu bleiben:
Eclipse-Shortcut | Beschreibung | Visual Studio Äquivalent |
---|---|---|
F3 | Go to declaration | F12 |
Strg-Shift-G | Show references | Shift-F12 |
Eigene Makros definieren
Da Visual Studio oder älteren Visual Studio Versionen für einige Funktionen (wie das Zeilen/Auswahl duplizieren) kein Command definiert, muss hierfür ein eigenes Makro definiert werden. Das ist aber kein Problem.
Makro erstellen am Beispiel von: Zeile duplizieren
1. Makro definieren
- Dazu "Extras>Makros>Makro-Explorer" bzw. "Tools>Macros>Macro Explorer".
- Unter dem standardmäßig vorhandenen Makro-Projekt "MyMacros" ein neues Modul erstellen (mit Rechtklick, Name z.B. "DuplicateLineModule").
- Doppelklick auf das Modul und den Makro-Code für die Zeilenduplikation einfügen:
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
2. Makro einem Shortcut zuweisen
- Das Makro erscheint nun neben den Standard-Commands von Visual Studio unter dem Namen "Macros.MyMacros.DuplicateLineModule.DuplicateLineDown" und "Macros.MyMacros.DuplicateLineModule.DuplicateLineUp".
- Zuweisung zu einem Shortcut. Eclipse-Belegung: Strg-Alt-Oben bzw. Strg-Alt-Unten. Kontext: Global!
Makro-Code: Zeile entfernen
Sollte das Command "Edit.LineDelete/Bearbeiten.Zeileentfernen" nicht ziehen, kann hierfür ein Makro definiert werden. Vorgehensweise wie oben.
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
Makro-Code: Zeile verschieben
Sollte die Productivity Power Tools nicht installiert werden können (beispielsweise bei Visual Studio 2008), kann die Funktionalität über ein Makro hergestellt werden (Commands MoveLineUp() bzw. MoveLineDown() zuweisen: Alt-Oben bzw. Alt-Unten). Vorgehensweise wie oben.
Imports System
Imports EnvDTE
Imports EnvDTE80
Imports EnvDTE90
Imports EnvDTE90a
Imports EnvDTE100
Imports System.Diagnostics
Public Module MoveLineOrBlock
'' Moves the selected lines up one line. If no line is
'' selected, the current line is moved.
''
Sub MoveLineUp()
DTE.UndoContext.Open("MoveLineUp")
Dim objSel As TextSelection = DTE.ActiveDocument.Selection
' store the original selection and cursor position
Dim topPoint As TextPoint = objSel.TopPoint
Dim bottomPoint As TextPoint = objSel.BottomPoint
Dim lTopLine As Long = topPoint.Line
Dim lTopColumn As Long = topPoint.LineCharOffset
Dim lBottomLine As Long = bottomPoint.Line
Dim lBottomColumn As Long = bottomPoint.LineCharOffset()
' move to the line above the top line
objSel.MoveToLineAndOffset(lTopLine - 1, 1)
' and move it down, until its below the bottom line:
Do
DTE.ExecuteCommand("Edit.LineTranspose")
Loop Until (objSel.BottomPoint.Line >= lBottomLine)
' Since the line we are on has moved up, our location in the file has changed:
lTopLine = lTopLine - 1
lBottomLine = lBottomLine - 1
' restore the cursor to original position and selection
objSel.MoveToLineAndOffset(lBottomLine, lBottomColumn)
objSel.MoveToLineAndOffset(lTopLine, lTopColumn, True)
DTE.UndoContext.Close()
End Sub
'' Moves the selected lines down one line. If no line is
'' selected, the current line is moved.
''
Sub MoveLineDown()
DTE.UndoContext.Open("MoveLineDown")
Dim objSel As TextSelection = DTE.ActiveDocument.Selection
' store the original selection and cursor position
Dim topPoint As TextPoint = objSel.TopPoint
Dim bottomPoint As TextPoint = objSel.BottomPoint
Dim lTopLine As Long = topPoint.Line
Dim lTopColumn As Long = topPoint.LineCharOffset
Dim lBottomLine As Long = bottomPoint.Line
Dim lBottomColumn As Long = bottomPoint.LineCharOffset()
' move to the bottom line
objSel.MoveToLineAndOffset(lBottomLine, 1)
' and move it down, which effectively moves the line below it up
' then move the cursor up, always staying one line above the line
' that is moving up, and keep moving it up until its above the top line:
'Dim lineCount As Long = lTopLine - lBottomLine
Dim lineCount As Long = lBottomLine - lTopLine
Do
DTE.ExecuteCommand("Edit.LineTranspose")
objSel.LineUp(False, 2)
lineCount = lineCount - 1
Loop Until (lineCount < 0)
' Since the line we are on has moved down, our location in the file has changed:
lTopLine = lTopLine + 1
lBottomLine = lBottomLine + 1
' restore the cursor to original position and selection
objSel.MoveToLineAndOffset(lBottomLine, lBottomColumn)
objSel.MoveToLineAndOffset(lTopLine, lTopColumn, True)
DTE.UndoContext.Close()
End Sub
End Module
Exportieren und Importieren von Tastenkombinationen
Bei Zeit schreibe ich hierzu auch etwas selbst. Solange siehe hier (ungetestet).