multi-cursor editing

The single biggest speed-up VS Code offers over a plain text editor: edit several places in a file at once, in real time, instead of a find-and-replace round trip.
alt+click | https://code.visualstudio.com/docs/editor/multicursor-selection | adds a cursor wherever you click |'vpr_mc1'
ctrl+alt+up / ctrl+alt+down | | adds a cursor directly above/below the current one |'vpr_mc2'
ctrl+d | | selects the current word, then extends the selection to each next match on repeat |'vpr_mc3'
ctrl+shift+l | | selects every occurrence of the current selection in the file, all at once |'vpr_mc4'

snippets

Every language extension ships built-in snippets (type for then Tab in a Python file). Custom ones are just as easy to add for whatever you type often.
ctrl+shift+p → Configure User Snippets | https://code.visualstudio.com/docs/editor/userdefinedsnippets | opens (or creates) a snippets file for a chosen language |'vpr_snip1'
A snippet is JSON with a prefix (what you type), a body (what gets inserted), and numbered tabstops ($1, $2, ...) that Tab cycles through after insertion — so a snippet can prompt you for the parts that actually change each time.

split editors and layout

ctrl+\ | | splits the current editor into a second group, side by side |'vpr_split1'
ctrl+1 / ctrl+2 / ctrl+3 | | moves focus directly to editor group 1/2/3 |'vpr_split2'
Dragging a tab to an edge (not just the center) of an existing group splits in that direction — drag to the bottom for a horizontal split instead of the default vertical one.

tasks.json: build tasks

A task is a shell command VS Code knows how to run, without you having to reopen the terminal and retype it — the compile step, a linter, a test runner.
ctrl+shift+p → Tasks: Configure Task | https://code.visualstudio.com/docs/editor/tasks | scaffolds a .vscode/tasks.json for the current project |'vpr_task1'
ctrl+shift+b | | runs the task marked as the default BUILD task (group.kind: "build"). For a default task of kind "test" like the example below, use the command palette's "Tasks: Run Test Task" instead |'vpr_task2'

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "run tests",
      "type": "shell",
      "command": "pytest -q",
      "group": { "kind": "test", "isDefault": true }
    }
  ]
}
            

the integrated terminal

ctrl+shift+` | | opens a brand-new terminal (as opposed to ctrl+`, which toggles the panel) |'vpr_term1'
Split the terminal panel itself (the small split icon in its top-right corner) to run a build watcher and a test watcher side by side — the same idea as tmux panes, just inside the editor instead of a separate terminal multiplexer.

zen mode and focus

ctrl+k z | https://code.visualstudio.com/docs/getstarted/userinterface | Zen Mode — hides everything except the current editor; Esc twice to exit |'vpr_zen1'
Smaller version of the same idea: toggle the minimap (Ctrl+Shift+P → Toggle Minimap) and breadcrumbs off if you find them more distracting than useful — both are on by default.

related topics

VS Code Cheat Sheet — the interface and shortcuts these habits build on.
tmux Cheat Sheet — the terminal-multiplexer equivalent of splitting VS Code's integrated terminal.
VS Code Extensions — snippet and task-runner extensions that go further than the built-ins here.

reference

code.visualstudio.com — multi-cursor
code.visualstudio.com — user-defined snippets
code.visualstudio.com — tasks