The other day I posted about a talk I gave at a User Group meeting that focused on Delphi IDE keystroke shortcuts (mostly code editor features and shortcuts). After processing my simple notes list and adding in comments and links to the documentation where appropriate I’ve come up with what we see in this post.
This represents the list of my favourite keyboard shortcuts (and related features), some of which have been available since Delphi1, some added in the most recent versions and many more added at various points in between. I hope you can find some useful additions to your Delphi coding arsenal in this collection. Note that the list is mostly keystrokes, but the mouse is mentioned here and there. I do find having a wealth of keystrokes available to call upon helps me be efficient in use of the Delphi IDE.
Without further ado, here’s the list:
Code Insight, mostly added in Delphi 3. Some of these can be enabled or disabled as you choose in the Code Insight page of the Tools, Options dialog:
Code Completion. The (resizable) popup list we often see automatically, but which can be forced up when required. | Ctrl+Space |
Code Parameters. The tooltip that shows the names and types of the parameters required in a parameter list, with the current parameter shown in bold. Again, this often comes up as required but can be forced up when the cursor is in a parameter list using this keystroke. | Ctrl+Shift+Space |
Code Templates (now called Live Templates). Very under-used mechanism for auto-entering a block of often-entered text. The IDE ships with a bunch of predefined Code Templates and you can define your own also (which is where the real benefit comes in). Originally the Code Template definition was quite trivial, but since the introduction of Live Templates in Delphi 2006, the definition is now in XML and a little cumbersome, but is covered in the documentation. | Ctrl+J |
Tooltip Help Insight. This pops up when you hover over a symbol giving you information on it. If that symbol has XML documentation comments (XMLDOC comments) defined for the item, or its parameters, these will be included in the help popup. XMLDOC comments can be readily entered in Delphi XE2 by the included product Documentation Insight Express. | Ctrl+Shift+H |
Tooltip Symbol Insight. This is enabled by default, but so is Tooltip Help Insight, which takes precedence. Disabling Help Insight allows this to work – it shows some declaration and type information for the symbol under the mouse cursor | hover mouse over a symbol |
Tooltip Expression Evaluation. In debug mode, hovering the mouse over an identifier or a selected expression will evaluate it. If the expression yields an object then the tooltip will allow you to drill down into its constituent members. | hover mouse over a symbol or highlighted expression in debug mode |
Class Completion. If a class has a method declaration, this will enter the implementation if pressed with the cursor within the class. If there is a method implementation this will enter a corresponding declaration. Given a minimal property declaration (e.g. property Foo: Integer;) this will declare a private backing variable and a setter that assigns its passed value to it and extend the property declaration accordingly. | Ctrl+Shift+C |
Block Completion. This typing saver finishes code blocks for you. | Enter |
Error Insight. This is the name for the squiggly red lines in the code editor indicating where a background compilation has detected errors in the source. The errors are also listed in the Structure window in recent Delphi versions. As we have all seen over many recent versions, after a few compilations, Error Insight leaves various perfectly valid and compilable expressions marked with red squigglies and most people get quite irked by it, essentially paying no attention because of its lack of reliability. The tip here is to go to the Code Insight options and turn Error Insight off. | |
Code Browsing. When you hold the Ctrl key down and move your mouse around the code editor, any item whose declaration can be located turns into a hyperlink and the mouse cursor indicates clicking it will take you somewhere. In short, Ctrl+click will take you to a symbol’s declaration or definition. However that involves the mouse, so there is another keystroke that is less commonly mentioned for this. | Alt+Up |
Browsing History. Once you start code browsing, these keystrokes allow you to go back and forth in the browsing history. | Alt+Left and Alt+Right |
Method hopping, i.e. jumping from one method to another within a source file:
Scroll through methods | Ctrl+Alt+mouse scroll wheel |
Toggle class lock. Normally method hopping goes through all methods in a file. This toggles a lock on just hopping through the methods of just the current class. | Ctrl+Q, L |
Move to top of current method or to previous method (unless your graphics driver software takes the keystroke to orient your monitor display to the natural orientation) | Ctrl+Alt+Up |
Move to next method (unless your graphics driver software takes the keystroke to orient your monitor display upside down) | Ctrl+Alt+Down |
Move to first method in file | Ctrl+Alt+Home |
Move to last method in file | Ctrl+Alt+End |
Regions and code folding. Regions are great for hiding away code sections that you don’t want to see when scrolling around in your code. They are a special case of compiler directives that each adds in a new code folding area.
Collapse current foldable code block or region | Ctrl+Shift+K, Ctrl+Shift+E |
Expand current foldable code block or region | Ctrl+Shift+K, Ctrl+Shift+U |
Toggle code block collapsed state | Ctrl+Shift+K, Ctrl+Shift+T |
Collapse all regions | Ctrl+Shift+K, Ctrl+Shift+R |
Collapse all nested procedures | Ctrl+Shift+K, Ctrl+Shift+P |
Collapse all methods | Ctrl+Shift+K, Ctrl+Shift+M |
Collapse all classes | Ctrl+Shift+K, Ctrl+Shift+C |
Expand all code | Ctrl+Shift+K, Ctrl+Shift+A |
Toggle code folding support | Ctrl+Shift+K, Ctrl+Shift+O |
Miscellaneous editor keystrokes:
Drop (or remove) bookmark – seems to be a bug that one keystroke option doesn’t handle bookmark 0 | Ctrl+Shift+1-9 or Ctrl+K, 0-9 |
Go to bookmark | Ctrl+0-9 or Ctrl+Q, 0-9 |
Module navigation (a name which appears to have been dropped from the documentation over recent releases). The keystrokes take you from a method declaration to a method implementation or vice versa (either keystroke does both jobs) | Ctrl+Shift+Up or Ctrl+Shift+Down |
Code formatting | Ctrl+D |
Indent marked block | Tab or Ctrl+Shift+I or Ctrl+K, I |
Unindent marked block | Shift+Tab or Ctrl+Shift+U or Ctrl+K, U |
Insert new GUID | Ctrl+Shift+G |
Go to line number | Alt+G |
SyncEdit. This is an awesome mechanism for intelligently updating an identifier name in a marked block. Also available via an icon in the editor gutter that looks like 2 pencils joined together. | Ctrl+Shift+J |
Open unit under cursor. Handy for looking at the VCL source when in a uses clause. | Ctrl+Enter |
Find references | Ctrl+Shift+Enter |
Insert compiler options at top of current file | Ctrl+O, O |
Delimiter match – pretty redundant in recent versions as the highlighting does this for you | Alt+[ or Alt+] |
Toggle case of marked block. For those of us who aren’t touch typists it’s very common to accidentally type quite a bit of text while Caps Lock is on. When you notice this just mark the block and use this keystroke. | Ctrl+O, U |
Delete word to left of cursor | Ctrl+BackSpace |
Delete word to right of cursor | Ctrl+T |
Delete current line | Ctrl+Y |
Start and stop recording keystroke macro | Ctrl+Shift+R |
Play back keystroke macro | Ctrl+Shift+P |
Comment current line or marked block | Ctrl+/ |
Show list of open files | Ctrl+Alt+F12 |
Incremental search. General search is no longer modal in recent IDEs | Ctrl+E |
Add to do item. I find this keystroke often gets mis-interpreted for some unknown reason, so I have to resort to a right-click in the editor followed by pressing E. To do list items (and the to do list itself) can be a handy way of keeping on top of notes regarding code you are building up. | Ctrl+Shift+T |
Move marked block | mouse drag |
Copy marked block | Ctrl+mouse drag |
Set focus to Tool Palette | Ctrl+Alt+P |
IDE Insight. The mother of all searching keystrokes – offers an incremental search through a whole bunch of parts of the IDE. | Ctrl+. or F6 |
Select selected control’s parent | Esc |
Move selected component(s) 1 grid unit | Ctrl+Shift+cursors or mouse drag |
Move selected component(s) 1 pixel | Ctrl+cursors or Alt+mouse drag |
Resize selected component(s) by 1 pixel | Shift+cursors |
Lasso controls on a container (e.g. a TPanel) | Ctrl+mouse drag |
Object Inspector. Note that it’s quite possible to set a given property on a bunch of neighbouring components with very little mouse use. Select the first of the components (let’s say a bunch of buttons), click the target property (say the Caption property) and then click the first component on the form designer. If you simply type you will enter a value for the selected button’s Caption. Pressing Enter after having entered the value should take you back to the button on the form designer. You can use the cursor keys to then select the next button whose caption you want to set, then you can rinse and repeat as required. Additionally you can select the initial property by selecting the Object Inspector (F11), selecting the property name column (Tab) and then start typing the property name – it uses an incremental search. Tab then switches back to the property value column.
Select Object Inspector or go back to form designer or code editor | F11 |
Switch columns | Tab |
Drop down component list | Ctrl+Down |
Switch between Properties and Events tabs | Ctrl+Tab or Ctrl+Shift+Tab |