Skip to main content

Common Errors

This page collects the errors beginners hit most frequently, regardless of which module they are working through. Use this as a quick lookup when something goes wrong.

How to Use This Page

Search (Ctrl+F) for the error or symptom you see. Each entry has: what caused it, what it looks like, and the exact fix.


#ERR Appears in a Column​

Symptom: A derived column (=) or a cast column shows #ERR for some rows.

Causes and fixes:

CauseFix
Column typed as str, used in mathCast to # or % first, then re-run expression
Division by zero in expressionUse = (a / b) if b != 0 else 0
Column name has spacesUse row['column name'] instead of column_name
Non-numeric value in numeric columnCast to float → non-numeric rows show #ERR → use z| to filter and remove
# Find all #ERR rows
z|
# Enter: column_name is None

# Delete them
gd

Empty Filtered Sheet After "​

Symptom: You press " to open a filtered sheet but it opens empty.

Cause: No rows were selected before pressing ".

Fix:

# Check how many rows are selected — look at status bar
# "0 selected" means nothing was selected

# Re-select with |, z|, or s
|
# Enter: your_pattern

# Then open filtered sheet
"

q Exits Too Many Sheets​

Symptom: Pressing q closes VisiData entirely instead of going back one level.

Cause: You were on the last remaining sheet (the source sheet). q on the last sheet exits VisiData.

Fix: Use Ctrl+^ to toggle between the current and previous sheet, or use Shift+S to see the full sheet list before pressing q.


Accidental gd Deleted Too Many Rows​

Symptom: Pressed gd and removed rows you didn't intend to delete.

Fix:

U # undo (requires options.undo = True in ~/.visidatarc)

If undo is not enabled:

Ctrl+R # reload the sheet from the source file
# Warning: all unsaved changes (including intentional ones) are lost

Prevention: Add options.undo = True to ~/.visidatarc. See VisiData Configuration.


Numeric Sort Is Wrong (1, 10, 2, 20 Instead of 1, 2, 10, 20)​

Symptom: Sorting a number column gives alphabetical order.

Cause: Column type is str (default). Strings sort lexicographically.

Fix:

# Move to the column
# # cast to int
# OR
% # cast to float

# Now sort
[ or ]

e Opens Edit Mode by Accident​

Symptom: You accidentally pressed e and the cell entered edit mode.

Fix:

Ctrl+C # cancel edit — original value is restored

Can't Find a Command / Key​

Symptom: You don't know the shortcut for something.

Fix:

Space
# Type any part of the command name
# Tab to cycle matches
# Enter to run

# Or:
Ctrl+H # open full man page
z Ctrl+H # commands for current sheet type only

g^O Says no rows selected​

Symptom: Pressing g Ctrl+O (edit rows in $EDITOR) shows a status message like no rows selected and nothing opens.

Cause: g Ctrl+O (sysedit-selected) only works on selected rows. If no rows are selected, it refuses to run.

Fix:

s # select the current row
# or
gs # select all rows
# then
g Ctrl+O

Remember gs selects all rows — to edit just a few, move down with j and press s on each.


External Editor Opens a File Instead (or Does Nothing)​

Symptom: You expect $EDITOR to open, but VisiData instead asks for a path, or nothing happens.

Cause: Plain o runs open-file (opens a file). Ctrl+O is a different key — and at the sheet level it is unbound.

Fix:

# Single cell:
e # enter edit mode on the cell first
Ctrl+O # now opens that cell value in $EDITOR

# Selected rows:
gs # select rows first
g Ctrl+O # g, then Ctrl+O

^O is caret notation for Ctrl+O (the ^ means Ctrl). If nothing opens, make sure $EDITOR is set in the shell that launched VisiData:

export EDITOR=nvim # add to ~/.bashrc to persist

Paste Inserts a Row Instead of Overwriting a Cell​

Symptom: You pressed y, moved to another cell, pressed p, and a new row appeared (or nothing looked like a cell overwrite).

Cause: y / p operate on rows. p inserts yanked rows after the cursor — it never writes into a single cell.

Fix — cell → cell:

zy # yank the source cell value
# move to destination cell
zp # overwrite that cell

Fix — fill a column for selected rows:

zy # yank source cell
# select target rows: s / gs / | / z|
# move to target column
gzp

See Copying and Pasting Rows.


gzp Says no rows selected​

Symptom: gzp (paste cell into column) does nothing / warns no rows selected.

Cause: gzp pastes into the current column for selected rows only.

Fix:

s # select current row
# or
gs # select all rows
# or
| # select by pattern

gzp # now pastes

For a single destination cell, use zp instead (no selection needed).


Frequency Table Shows One Group Per Row​

Symptom: Shift+F produces a table with every row as its own group.

Cause: The column has unique values (e.g., an ID or timestamp column).

Fix: Use Shift+F on a categorical column (role, status, region, department) — not a unique identifier.


Source File Was Accidentally Overwritten​

Symptom: Pressed Ctrl+S and saved back to the original file.

Fix:

Ctrl+R # reload from disk — recovers the original file
# (Only works if you reload before closing VisiData)

Prevention: Always save to a new filename first:

Ctrl+S
# Enter: /tmp/clean_version.csv ← new name, not the original

Hands-On Practice​

vd ~/github/practice-folder/visidata/01-loading/01-employees.csv

# 1. Press = → Enter: salary * 12 → see 'annual_salary' column
# (salary may show #ERR if not cast — fix by pressing % on salary first)

# 2. Create a bad expression: = → Enter: salary / 0
# → all rows show #ERR (division by zero)
# → press U to undo

# 3. Sort 'salary' while it's still a string → see wrong sort order
# → press # → re-sort → correct order

# 4. Practice cancel edit: press e → type something → press Ctrl+C

What's Next​