Commands and keys

This is the authoritative reference. Every command runs from command mode, so you type :command-name and press Enter. The keybindings, shorthands, and autofill expansions below are registered only for .jl and .ipynb files, so they stay out of your way in ordinary buffers.

Notebook lifecycle

Command Description
:new-notebook [path] Create a new .jl notebook from a starter template and open it
:convert-notebook Convert a raw .ipynb into the editable cell format
:sync-to-ipynb Sync edits in the .jl file back to the source .ipynb
:renumber-cells Renumber the cell markers to a contiguous 0, 1, 2, …
:export-markdown Export the notebook to Markdown (.md)
:export-typst Export the notebook to Typst (.typ)
:export-pdf Export the notebook to a typeset PDF (.pdf)

Cell execution

Command Description
:execute-cell Run the code cell under the cursor
:execute-all-cells Run every code cell, top to bottom
:execute-cells-above Run every code cell from the top down to the current one
:cancel-cell Interrupt the currently running cell
:copy-cell-output Copy the cell’s rendered output to the system clipboard
:cell-output-view Blow up the cell’s output in a popup, live while it runs or stored otherwise
:cell-state Print the provenance table of inputs and freshness for the cell under the cursor
:play-cell-audio Play the cell’s wavplay audio through the system output (non-blocking)
:stop-audio Stop the audio clip that is currently playing
:scrub-audio Open scrub mode to seek the cell’s audio by ear before resuming
Command Description
:next-cell Jump to the next cell
:previous-cell Jump to the previous cell
:widget-walk-next Jump to the next widget and name its keys in the status line
:widget-walk-prev Jump to the previous widget and name its keys in the status line
:cell-picker Open the interactive cell navigator
:new-cell Insert a new cell at the cursor and open the code or markdown picker
:select-cell Select the whole cell, meaning the header, the code, and the output
:select-cell-code Select only the code
:select-output Select the output block

Plots and images

Command Description
:view-chart Open the last-executed plot in the interactive chart viewer
:insert-image Insert a # @image <path> marker and a blank canvas at the cursor
:plot-grow Grow the plot block under the cursor and re-render
:plot-shrink Shrink the plot block under the cursor and re-render
:param-up Increase the numeric literal on a # @param line and re-run the cell
:param-down Decrease the numeric literal on a # @param line and re-run the cell
:select-next Cycle the # @select value forward to the next option and re-run the cell
:select-prev Cycle the # @select value back to the previous option and re-run the cell
:select-choice Open the # @select chooser modal at or above the cursor
:toggle-flag Flip the boolean on a # @toggle line and re-run the cell

A # @param annotation marks a numeric literal as a live knob, as in freq = 440 # @param 220:880 step 10. The grammar has two parts. The clamp range <lo>:<hi> is required, and the optional step <s> sets the increment. A missing step defaults to 1 for integers and to (hi - lo) / 100 for floats. Nudging with ]p or [p rewrites the literal instantly in the buffer, then debounces a re-run of the same cell with no downstream side effects, and it flags cells below as stale when they reference the changed variable. That staleness check is a name-based heuristic that matches tokenized words and never traces dataflow. Reassignment or shadowing can over-flag or under-flag, so read the staleness marker as an alert rather than a guarantee. While the cursor sits in a @param cell, or the widget walk lands on one, a one-row slider track is drawn above the line showing the value’s position in its range; it clears when you leave the cell.

A # @select annotation marks an assignment as a closed set, as in wave = "sin" # @select sin|cos|tan. Its grammar mirrors @param: the name is the assignment’s left side and the trailing comment carries the pipe-delimited options. ]s and [s cycle the value with wrap-around, and <space>nc opens a chooser where h/l move through the options and Enter applies. A quoted current value is rewritten with quotes, a bare identifier without — the shape is read from the literal, never guessed. A # @toggle annotation marks a boolean, as in loop = true # @toggle; <space>nt flips it in place. Both stage downstream staleness and debounce a re-run exactly like @param.

A run can also declare a widget from the kernel with nothelix_slider or nothelix_choice. These render as a row under the cell and reuse the same keys, so ]p and [p nudge a kernel slider and ]s and [s cycle a kernel choice on the cell under the cursor, and <space>nc opens its modal. A nudge assigns the variable in the kernel and flags the cells that read it as stale, with no re-run of its own, and it does nothing but say so when the kernel is not running. See Notebooks for a worked example.

Mathematics and tables

Command Description
:render-math-at-cursor Render the $$ … $$ block under the cursor as a typeset image
:render-all-display-math Render every display-math block in the buffer
:render-all-tables Render every Markdown pipe table as a typeset image
:clear-math-images Remove inline math and table images, restoring the source
:format-math-buffer Expand single-line environments into multi-line $$ blocks
:math-render-buffer Stack big-operator limits above and below their glyph
:math-render-clear Remove the stacked-limit annotations
:conceal-math Apply LaTeX-to-Unicode concealment to the buffer
:clear-conceal Remove the concealment overlays
:julia-tab-complete Expand a \<name> Julia LaTeX shortcut at the cursor

Kernel, status, and project trust

Command Description
:kernel-shutdown Stop the kernel for the current document
:kernel-shutdown-all Stop every running kernel
:graphics-protocol Show which graphics protocol was detected
:graphics-check Run a quick graphics diagnostic
:nothelix-status Show full status, covering kernels, graphics, the language server, and more
:nothelix-trust-project Trust this project’s .nothelix.conf to launch a custom Julia binary or environment, then restart the kernel
:nothelix-untrust-project Revoke that trust and revert to PATH Julia, then restart the kernel
:nothelix-project-trust-status Report whether the current project is trusted and the runtime it would use

Trust gates only the executable settings in a project’s .nothelix.conf, which are julia-bin and julia-project. The display settings apply without trust.

Animation

Command Description
:animation-toggle-at-cursor Play or pause the animation at the cursor
:animation-pause-all Pause every animation
:animation-resume-all Resume every animation

Debugging and tests

Command Description
:nothelix-debug-on / :nothelix-debug-off / :nothelix-debug-toggle Control debug logging
:run-all-tests Run every Steel test suite
:run-cell-tests Run the cell-extraction tests
:run-kernel-tests Run the kernel-persistence tests
:run-execution-tests Run the execution-flow tests

See Troubleshooting for what to do with the debug log.

Keybindings

These are registered in normal mode for .jl and .ipynb files.

Key Command
]l :next-cell
[l :previous-cell
]p :param-up
[p :param-down
]s :select-next
[s :select-prev
]a :audio-seek-forward
[a :audio-seek-back
]w :widget-walk-next
[w :widget-walk-prev
<space>nr :execute-cell
<space>nn :new-cell
<space>nj :cell-picker
<space>na :select-cell
<space>ni :select-cell-code
<space>no :cell-output-view
<space>ny :copy-cell-output
<space>ns :play-cell-audio
<space>nx :stop-audio
<space>nc :select-choice
<space>nt :toggle-flag
<space>n= :plot-grow
<space>n- :plot-shrink
<space>p :animation-toggle-at-cursor
Tab (insert mode, .jl only) :julia-tab-complete

Scrub mode

:scrub-audio opens a small waveform popup over the cell. Press h and l to move the playhead back and forward by the current step, and j and k to make that step coarser or finer along the ladder. A dimmed bracket shows how far one step reaches, and the playhead sweeps to its new column on each move. Press v to flip the popup between the waveform and the spectrogram for that clip; the flip is local to the popup, so reopening it follows the audio-view default. Press Enter to resume playback from the playhead, or Esc (or q) to leave and keep playback as it was. Pressing <space>ns on the cell that is already playing opens the same popup. ]a and [a seek without the popup, and pressing them in quick succession accelerates the step through the ladder.

Widget walk

]w and [w walk the cursor between every widget in the notebook, wrapping at the ends. A widget is any interactive surface: a # @param knob, a # @select choice, a # @toggle flag, a nothelix_slider or nothelix_choice a run declared, a cell’s audio scrub, an @image plot’s size, or an animation. Each jump names the widget and the keys that act on it in the status line, so the surface teaches itself; landing on a @param also draws its slider track. The walk and the shared modal are gated by the widgets setting in .nothelix.conf; when it is false both no-op and the direct feature keys (]p/[p, ]s/[s, ]a/[a, <space>nt, the plot and animation commands) still work.

Shorthands

A few aliases stand in for the commands you reach for most.

Shorthand Expands to
:xc :execute-cell
:xca :execute-all-cells
:nc :next-cell

Autofill

At the start of an otherwise-blank line in a notebook file, these expand when you press space.

You type You get
@cell<space> @cell N :julia stamped with the next index
@md<space>, @mark<space>, @markdown<space> @markdown N, with the cursor parked after # on the next line
@typst<space> @typst N, with the cursor parked after # on the next line

Only these exact words expand. Any other @word is Julia code (@show, @time, …) and is left alone; :new-cell opens the cell-type picker when you want one.

For the source-level anatomy of these markers, including the persistent label you can pin to a marker line, see Notebooks. When a command misbehaves, Troubleshooting covers the debug log and the common breakages.


Nothelix is MIT licensed. It stands on Helix, Steel, Julia, and Typst, among others — see the credits.

This site uses Just the Docs, a documentation theme for Jekyll.