Skip to content
Productivity Passport
Practice mode · free · unlimited · not certifiable

Vim and Neovim

Unscored tasks with hints and instant feedback. Practice results never become credentials.

Short lesson

Vim/Emacs power moves · 10 min

Vim: ciw, dt), :%s/old/new/g, qa…q then 100@a, :g/pat/d. Emacs: M-% query-replace, C-x ( … C-x ) macros, C-x r k rectangles.

L1Edit a config fileeditor

Set debug to false and delete the log_level line, then save. The editor starts in a clean default setup (vanilla mode).

Sign up to practise
L2Clean a log into a listeditor

Turn every log line into just “job NNN finished” (drop the timestamp and worker prefix). Aim for under 40 keystrokes. The editor starts in a clean default setup (vanilla mode).

Sign up to practise
L2Change text inside quoteseditor

Change the table name "users" to "customers" (only that one). The editor starts in a clean default setup (vanilla mode).

Sign up to practise
L3Apply one change to every recordeditor

Convert every line “name,email” to “Name <email>” (capitalise the name). Record a macro once and replay it. The editor starts in a clean default setup (vanilla mode).

Sign up to practise
L3Filter and sorteditor

Delete every line that contains DEBUG, then sort the remaining lines alphabetically. The editor starts in a clean default setup (vanilla mode).

Sign up to practise
L4Rename a function safelyeditor

Rename the function fetch_user to load_user everywhere it is used — but do NOT change fetch_user_orders. The editor starts in a clean default setup (vanilla mode).

Sign up to practise
L4Knowledge checkmcq

Which command runs `:s/foo/bar/g` in every file of the quickfix list and saves them?

Sign up to practise
L5Reorder CSV columnseditor

Swap the two columns on every line (email first, then name) using a single substitution with capture groups. The editor starts in a clean default setup (vanilla mode).

Sign up to practise