I believe that typing proficiency is important for a software engineer. It is easier to stay in flow if you can type fast and navigate around your IDE and tools with shortcuts. In fact, I love that a part of our job has to do with manual skills. Improving these physical skills is a nice change from learning new technologies and tools.
A good start for getting better at something is to find out where you stand. At first, I wanted to get an overview of how many shortcuts I know and use. So, last year, I created a database of my shortcuts in Notion. I already described this in my post on personal knowledge management. In the process, I found some inconsistencies and tried to use the same key combination in as many applications as possible.
Since then, I have thought a lot more about this whole thing. I should probably not tell you that I had a few dreams where keyboard shortcuts played a prominent role. Anyway, I spent much of my social distancing free time on my first published solo project: KeyCombiner. It has made creating and maintaining my shortcut database much simpler.
This collection is also shared and available via KeyCombiner, which allows for more complex filtering and searching and enables you to import selected shortcuts into your personal collections.
The tables in this post are generated by using KeyCombiner’s CSV export and converting it to Markdown with this handy web tool. The collection is split by context. By context, I mean the application or type of applications in which the shortcut can be used.
The context of these shortcuts is not further defined because I expect them to work anywhere. As the name suggests, I think these shortcuts are so ubiquitous that everyone should know them.
|New File||Essential||File Management||ctrl + n|
|Open File…||Essential||File Management||ctrl + o|
|Save||Essential||File Management||ctrl + s|
|Save As…||Essential||File Management||ctrl + shift + s|
|Close||Essential||File Management||ctrl + w|
|Essential||General||ctrl + p|
|Go Back||Essential||Navigation||alt + left|
|Go Forward||Essential||Navigation||alt + right|
|Search||Essential||Navigation||ctrl + f|
|Cut selection||Essential||Basic Editing||ctrl + x|
|Copy selection||Essential||Basic Editing||ctrl + c|
|Paste||Essential||Basic Editing||ctrl + v|
|Paste without formatting||Essential||Basic Editing||ctrl + shift + v|
|Undo||Essential||Basic Editing||ctrl + z|
|Redo||Essential||Basic Editing||ctrl + y|
|Go to Beginning of Line||Essential||Basic Editing||home|
|Go to End of Line||Essential||Basic Editing||end|
|Open a new tab, and jump to it||Essential||Tab and window||ctrl + t|
|Jump to the next open tab||Essential||Tab and window||ctrl + tab|
|Open a new window||Essential||Tab and window||ctrl + n|
The next set of shortcuts is applicable in any kind of editing software. Except the first one (Replace), these work in pretty much all text fields independent of application.
|Replace||Editor||Basic Editing||ctrl + h|
|Left with Selection||Editor||Basic Editing||shift + left|
|Right with Selection||Editor||Basic Editing||shift + right|
|Move to Line End with Selection||Editor||Basic Editing||shift + end|
|Move to Line Start with Selection||Editor||Basic Editing||shift + home|
|Move to Next Word||Editor||Basic Editing||ctrl + right|
|Move to Next Word with Selection||Editor||Basic Editing||ctrl + shift + right|
|Move to Previous Word||Editor||Basic Editing||ctrl + left|
|Move to Previous Word with Selection||Editor||Basic Editing||ctrl + shift + left|
|Indent Selection||Editor||Basic Editing||tab|
|Unindent Selection||Editor||Basic Editing||shift + tab|
As a software engineer, this context is very important for me. In my experience, many complex IDE features, especially those related to refactoring, are not used at all if one does not know the shortcut. So in this case, knowing additional shortcuts does not only make you faster, it gives access to additional features.
Those features can sometimes even have an impact on code quality. For example, if you know a shortcut to extract a selected code block into a method, you might be less prone to writing large blocks of code that are hard to read. Knowing the common debugging shortcuts can make you more comfortable with the process and less inclined to use
Currently, I use VSCode, PyCharm, and Eclipse as IDEs for different languages and project sizes. I have configured the listed shortcuts to work in all of them, except for some that I only use in PyCharm.
|Go to File…, Quick Open||IDE||Navigation||ctrl + p|
|Show command prompt||IDE||Navigation||ctrl + shift + p|
|Open Resource||IDE||Navigation||ctrl + shift + r|
|Switch to recent file||IDE||Navigation||ctrl + e|
|Go to symbol in current file (outline)||IDE||Navigation||ctrl + o|
|Go to Symbol in Workspace||IDE||Navigation||ctrl + shift + t|
|Go to line number…||IDE||Navigation||ctrl + l|
|Format Document||IDE||Rich Languages Editing||ctrl + shift + f|
|Go to Definition||IDE||Rich Languages Editing||f3|
|Go to References||IDE||Rich Languages Editing||alt + ctrl + r|
|Rename Symbol||IDE||Rich Languages Editing||shift + alt + r|
|Search in all files/workspace||IDE||Search||alt + ctrl + f|
|Move Line Down||IDE||Basic Editing||alt + down|
|Move Line Up||IDE||Basic Editing||alt + up|
|Copy Line Down||IDE||Basic Editing||ctrl + alt + down|
|Copy Line Up||IDE||Basic Editing||ctrl + alt + up|
|Delete Line||IDE||Basic Editing||ctrl + d|
|Split editor horizontally||IDE||Tab and window||alt + t|
|Split editor vertically||IDE||Tab and window||alt + d|
|Extract Method||PyCharm||Refactoring||ctrl + alt + m|
|Introduce Variable||PyCharm||Refactoring||ctrl + alt + v|
|Introduce Field||PyCharm||Refactoring||ctrl + alt + f|
|Introduce Constant||PyCharm||Refactoring||ctrl + alt + c|
|Cut line (empty selection)||PyCharm||Basic Editing||ctrl + x|
|Copy line (empty selection)||PyCharm||Basic Editing||ctrl + c|
The shortcuts in this section are among my most used ones. For anyone of these, I can say with certainty that I use it many times a day.
You might notice the Media shortcuts with keys, such as num2. I repurposed my Numpad for this because I don’t use it for typing numbers. Reassigning keys works especially well with my blank keycaps. The labeling can never be wrong because there is none ;)
The first entry in this context’s table represents 9 separate shortcuts. Switching between applications via super + 1-9 has been a noticeable productivity boost for me. I rarely have to start an application by other means now.
|Open application 1-9||OS||Navigation||super + 1-9|
|Go to previous application||OS||Navigation||alt + Tab|
|Move window to screen on the left||OS||Navigation||super + shift + Left|
|Move window to screen on the right||OS||Navigation||super + shift + Right|
|Cycle through windows of current application||OS||Navigation||alt + ^|
|Play (Music etc.)||OS||Media||num2|
|Increase Volume (louder)||OS||Audio||num6|
|Put window to left half of monitor||OS||Window Management||super + left|
|Put window to right half of monitor||OS||Window Management||super + right|
|Show Albert launcher||OS||Navigation||super + shift + p|
Many of the shortcuts that I use most frequently while browsing the internet are already covered in the sections above. However, there are some keyboard combinations unique to web browsing.
|Open the History page in a new tab||Chrome||Google Chrome features||ctrl + h|
|Open the Downloads page in a new tab||Chrome||Google Chrome features||ctrl + j|
|Jump to the address bar||Chrome||Address bar||ctrl + l|
|Search with default search engine||Chrome||Address bar||ctrl + k|
|Return everything on the page to default size||Chrome||Webpages||ctrl + 0|
|Go to the top of the page||Chrome||Webpages||home|
|Go to the bottom of the page||Chrome||Webpages||end|
|Open a new window in Incognito mode||Chrome||Tab and window||ctrl + shift + n|
Until recently, I didn’t use a lot of web application keyboard shortcuts. I feel like the applications are partly to blame for this. Why is it not common to show keyboard shortcuts in button tooltips? Or even in a small notification when a user does an action via mouse? Anyway, working on KeyCombiner motivated me to expand my shortcut knowledge in this area.
I have some learning ahead of me, but I am not quite comfortable with my most used apps. Knowing web application shortcuts is quite rewarding because the respective action would often take multiple mouse clicks. Sometimes it is even hard to find the right button for it, if you don’t know an action’s shortcut.
|Jump to a conversation||Slack||Navigation||ctrl + k|
|Next unread channel or DM||Slack||Navigation||alt + shift + down|
|Go to the project home page (Project > Details).||GitLab||Project||g > p|
|Go to the project issue boards list (Issues > Boards).||GitLab||Project||g > b|
|Go to the project file search page.||GitLab||Project||t|
|Go to the project commits list (Repository > Commits).||GitLab||Project||g > c|
|Go to the project merge requests list (Merge Requests).||GitLab||Project||g > m|
|Go to the CI/CD jobs list (CI/CD > Jobs).||GitLab||Project||g > j|
|Go to the project wiki (Wiki), if enabled.||GitLab||Project||g > w|
|Edit description.||GitLab||Issues and Merge Requests||e|
|Change assignee.||GitLab||Issues and Merge Requests||a|
|Change label.||GitLab||Issues and Merge Requests||l|
|Edit wiki page.||GitLab||Wiki pages||e|
|Rename selected item||GDrive||Take action on selected items||n|
|Go to personal collections||KeyCombiner||Global Navigation||g > c|
|Go to public collections||KeyCombiner||Global Navigation||g > p|
|Go to personal collection 1||KeyCombiner||Global Navigation||c > 1|
|Learn personal collection 1||KeyCombiner||Global Navigation||l > 1|
|Test your skills with personal collection 1||KeyCombiner||Global Navigation||t > 1|
|Skip current combination||KeyCombiner||During Learn or Test||esc|
|Learn current collection||KeyCombiner||Collections||shift + l|
|Copy selected combinations to personal collection 1||KeyCombiner||Collections||shift + c > 1|
|Search or jump to a recently viewed page.||Notion||Most popular||ctrl + p|
|Create a line break within a block of text||Notion||Create & style your content||shift + enter|
|Bold selected text||Notion||Create & style your content||ctrl + b|
|Italicize selected text||Notion||Create & style your content||ctrl + i|
|Turn selected text into inline code||Notion||Create & style your content||ctrl + e|
|Duplicate selected blocks||Notion||Edit & move blocks||ctrl + d|
It is probably not a good idea to copy my collection, but seeing what kind of shortcuts are used by another software engineer might give you some ideas. Maybe I could even inspire you to create a similar list of your own shortcuts. If so, you might want to try out KeyCombiner, as I am sure it’s the most efficient way of accomplishing this.
After you created such a collection of all the shortcuts you use, you might realize that a mere spreadsheet cannot give a full picture of your shortcuts skills. Many questions remain:
- How well do you actually know them?
- How fast can you type them?
- How often do you make an error while typing a shortcut?
KeyCombiner is built to answer precisely these questions with its interactive training features.
Am I missing some important shortcuts? I would be very interested to hear your suggestions.