vd(1)

โœจ vd(1) โ€” Quick Reference Guide โœจ

okay bestie, welcome to the vd(1) man page โ€” VisiData, the terminal utility that absolutely ate ๐Ÿ’… this is part 1, and itโ€™s giving โ€œmultipurpose data iconโ€ energy fr fr.

๐ŸŒธ NAME ๐ŸŒธ

VisiData โ€” a terminal utility for exploring and arranging tabular data ๐Ÿซถ

๐Ÿฆ‹ SYNOPSIS ๐Ÿฆ‹

vd [options] [input ...]
visidata [options] [input ...]
vd [options] --play cmdlog [-w waitsecs] [--batch] [-i] [-of filetype]
   [-o output] [field=value]
vd [options] [input ...] +toplevel:subsheet:col:row

๐Ÿ’– DESCRIPTION ๐Ÿ’–

VisiData is an easy-to-use multipurpose tool to explore, clean, edit, and restructure data ๐Ÿ”ฅ Rows can be selected, filtered, and grouped; columns can be rearranged, transformed, and derived via regex or Python expressions; and workflows can be saved, documented, and replayed. No cap, itโ€™s iconic.

๐ŸŽฌ REPLAY MODE ๐ŸŽฌ

  • -p, --play=cmdlog โ€” replay a saved cmdlog within the interface ๐Ÿ“
  • -w, --replay-wait=seconds โ€” wait seconds between commands
  • -b, --batch โ€” replay in batch mode (with no interface) ๐Ÿ’€
  • -i, --interactive โ€” launch VisiData in interactive mode after batch
  • -o, --output=file โ€” save final visible sheet to file as .tsv ๐ŸŽ€
  • field=value โ€” replace "{field}" in cmdlog contents with value

๐Ÿ’ฌ Commands During Replay ๐Ÿ’ฌ

  • ^K โ€” cancel current replay

๐Ÿ‘‘ GLOBAL COMMANDS ๐Ÿ‘‘

All keystrokes are case sensitive. The ^ prefix is shorthand for Ctrl. periodt.

๐ŸŒˆ Keystrokes to start off with ๐ŸŒˆ

  • ^Q โ€” abort program immediately
  • ^C โ€” cancel user input or abort all async threads on current sheet
  • g^C โ€” abort all secondary threads
  • q โ€” quit current sheet or menu
  • Q โ€” quit current sheet and free associated memory
  • gq โ€” quit all sheets (clean exit)
  • Alt+H โ€” activate help menu (Enter/left-mouse to expand submenu or execute command)
  • g^H โ€” view this man page ๐Ÿซถ
  • z^H โ€” view sheet of command longnames and keybindings for current sheet
  • gb โ€” open sidebar in a new sheet
  • b โ€” toggle sidebar
  • U โ€” undo the most recent modification (requires enabled options.undo)
  • R โ€” redo the most recent undo (requires enabled options.undo)
  • zU โ€” undo the most recent modification and rerun it, editing its previous input (requires enabled options.undo)
  • Space longname โ€” open command palette; execute top command by its longname

๐ŸŽ›๏ธ Command Palette ๐ŸŽ›๏ธ

  • Tab โ€” Move to command palette, and cycle through commands
  • 0-9 โ€” Execute numbered command
  • Enter โ€” Execute highlighted command

๐Ÿงญ Cursor Movement ๐Ÿงญ

  • Arrow PgUp โ€” go as expected
  • h, j, k, l โ€” go left/down/up/right
  • gh, gj, gk, gl โ€” go all the way to the left/bottom/top/right of sheet
  • G, gg โ€” go all the way to the bottom/top of sheet
  • Ic. End Home โ€” go all the way to the bottom/top of sheet
  • ^B, ^F โ€” scroll one page back/forward
  • ^Left, ^Right โ€” scroll one page left/right
  • zz โ€” scroll current row to center of screen
  • ^^ (Ctrl+^) โ€” jump to previous sheet (swaps with current sheet)
  • /, ? regex โ€” search for regex forward/backward in current columnโ€™s displayed values
  • g/, g? regex โ€” search for regex forward/backward over all visible columnsโ€™ displayed values
  • z/, z? expr โ€” search by Python expr forward/backward in current column (with column names as variables)
  • n, N โ€” go to next/previous match from last search

Search matches are highlighted when options.highlight_search is set (default: on). โœจ

  • (highlight-col) โ€” highlight a regex in current column (without moving)
  • (highlight-sheet) โ€” highlight a regex in all columns (without moving)
  • (highlight-clear) โ€” clear all highlight patterns
Undoing a search does not clear the highlighting; use highlight-clear instead. ๐Ÿซถ
  • <, > โ€” go up/down current column to next value
  • z<, z> โ€” go up/down current column to next null value
  • {, } โ€” go up/down current column to next selected row
  • c regex โ€” go to next column with name matching regex
  • r regex โ€” go to next row with key matching regex
  • zc, zr number โ€” go to column/row number (0-based, negative from end); warn if clamped
  • H, J, K, L โ€” slide current row/column left/down/up/right
  • gH, gJ, gK, gL โ€” slide current row/column all the way to the left/bottom/top/right of sheet
  • zH, zJ, zK, zK number โ€” slide current row/column number positions to the left/down/up/right
  • zh, zj, zk, zl โ€” scroll one left/down/up/right

๐Ÿ’… Column Manipulation ๐Ÿ’…

  • _ (underbar) โ€” toggle width of current column between full and default width
  • g_ โ€” toggle widths of all visible columns between full and default width
  • z_ number โ€” adjust width of current column to number
  • gz_ number โ€” adjust widths of all visible columns to Ar number
  • resize-col-max-all โ€” toggle width of current column between default width and the widest value in all rows, not only those on screen
  • resize-cols-max-all โ€” toggle widths of all visible columns between default width and the widest value in all rows
  • - (hyphen) โ€” hide current column
  • g- (hyphen) โ€” hide any column that has multiple rows but only one distinct value
  • z- โ€” reduce width of current column by half
  • gv โ€” unhide all columns
  • !, z! โ€” toggle/unset current column as a key column
  • ~, #, %, $, @, z# โ€” set type of current column to str/int/float/currency/date/len
  • Alt++, Alt+- โ€” show more/less precision in current numerical column
  • ^ โ€” rename current column
  • g^ โ€” rename all unnamed visible columns to contents of selected rows (or current row)
  • z^ โ€” rename current column to combined contents of current cell in selected rows (or current row)
  • gz^ โ€” rename all visible columns to combined contents of current column for selected rows (or current row)
  • = [name=]expr โ€” create new column from Python expr, with column names, and attributes, as variables. Optionally specify column name.
  • g= expr โ€” set current column for selected rows to result of Python expr
  • gz= expr โ€” set current column for selected rows to the items in result of Python sequence expr
  • z= expr โ€” evaluate Python expression on current row and set current cell with result of Python expr
  • i โ€” add column with incremental values
  • addcol-incr-key โ€” add column with incremental values, restarting at each change in key columns
  • gi โ€” set current column for selected rows to incremental values
  • zi step โ€” add column with values at increment step
  • gzi step โ€” set current column for selected rows at increment step
  • ' (tick) โ€” add a frozen copy of current column with all cells evaluated
  • g' โ€” open a frozen copy of current sheet with all visible columns evaluated
  • z', gz' โ€” add/reset cache for current/all visible column(s)

Note that regex operations apply to the displayed value in a cell. ๐Ÿงš

  • : regex โ€” add new columns from regex split; number of columns determined by example row at cursor
  • ; regex โ€” add new columns from capture groups of regex (also requires example row)
  • z; expr โ€” create new column from bash expr, with $columnNames as variables
  • * search Tab replace โ€” add column derived from current column, replacing search regex with replace (may include \1 backrefs)
  • g*, gz* search Tab replace โ€” modify selected rows in current/all visible column(s), replacing search with replace (may include \1 backrefs)
  • (, g( โ€” expand current/all visible column(s) of lists (e.g. [3]) or dicts (e.g. {3}) one level
  • z(, gz( depth โ€” expand current/all visible column(s) of lists (e.g. [3]) or dicts (e.g. {3}) to given depth (0= fully)
  • ), g( โ€” unexpand current/all visible column(s); restore original column and remove other columns at this level
  • z), gz) depth โ€” contract current/all visible column(s) of former lists (e.g. [3]) or dicts (e.g. {3}) to given depth (0= fully)
  • zM โ€” row-wise expand current column of lists (e.g. [3]) or dicts (e.g. {3}) within that column

๐Ÿ“ Row Selection ๐Ÿ“

  • s, t, u โ€” select/toggle/unselect current row
  • gs, gt, gu โ€” select/toggle/unselect all rows
  • zs, zt, zu โ€” select/toggle/unselect all rows from top to cursor
  • gzs, gzt, gzu โ€” select/toggle/unselect all rows from cursor to bottom
  • |, \ regex โ€” select/unselect rows matching regex in current column
  • g|, g\ regex โ€” select/unselect rows matching regex in any visible column
  • z|, z\ expr โ€” select/unselect rows matching Python expr in any visible column
  • , (comma) โ€” select rows matching display value of current cell in current column
  • g, โ€” select rows matching display value of current row in all visible columns
  • z,, gz, โ€” select rows matching typed value of current cell/row in current column/all visible columns

๐ŸŒธ Row Sorting/Filtering ๐ŸŒธ

  • [, ] โ€” sort ascending/descending by current column; replace any existing sort criteria
  • g[, g] โ€” sort ascending/descending by all key columns; replace any existing sort criteria
  • z[, z] โ€” sort ascending/descending by current column; keep higher priority sort criteria
  • gz[, gz] โ€” sort ascending/descending by all key columns; add to existing sort criteria
  • " โ€” open duplicate sheet with only selected rows
  • g" โ€” open duplicate sheet with all rows
  • gz" โ€” open duplicate sheet with deepcopy of selected rows

The rows in these duplicated sheets (except deepcopy) are references to rows on the original source sheets, and so edits to the filtered rows will naturally be reflected in the original rows. Use g' to freeze sheet contents in a deliberate copy. z' replace current column with a frozen copy, with all cells evaluated ๐Ÿฆ‹

โœจ Editing Rows and Cells โœจ

okay bestie, this is where you actually touch the data โ€” rows, cells, clipboards, the whole little ecosystem. stay with me, itโ€™s giving spreadsheet but make it fashion ๐Ÿ’…

  • a, za โ€” append blank row/column; appended columns cannot be copied to clipboard.
  • ga, gza number โ€” append number blank rows/columns.
  • d, gd โ€” delete current/selected row(s).
  • y, gy โ€” yank (copy) current/all selected row(s) to clipboard in Memory Sheet.
  • x, gx โ€” cut (copy and delete) current/all selected row(s) to clipboard in Memory Sheet.
  • zy, gzy โ€” yank (copy) contents of current column for current/selected row(s) to clipboard in Memory Sheet.
  • zd, gzd โ€” set contents of current column for current/selected row(s) to options.null_value.
  • zx, gzx โ€” cut (copy and delete) contents of current column for current/selected row(s) to clipboard in Memory Sheet.
  • p, P โ€” paste clipboard rows after/before current row.
  • zp, gzp โ€” set cells of current column for current/selected row(s) to last clipboard value.
  • zP, gzP โ€” paste to cells of current column for current/selected row(s) using the system clipboard.
  • Y, gY โ€” yank (copy) current/all selected row(s) to system clipboard (using options.clipboard_copy_cmd).
  • zY, gzY โ€” yank (copy) contents of current column for current/selected row(s) to system clipboard (using options.clipboard_copy_cmd).
  • f โ€” fill null cells in current column with contents of non-null cells up the current column.
  • e text โ€” edit contents of current cell.
  • ^O โ€” edit contents of current cell in external EDITOR.
  • ge text โ€” set contents of current column for selected rows to text.

โŒจ๏ธ Commands While Editing Input โŒจ๏ธ

when youโ€™re in an input box, these are the little keyboard goblins that keep you moving ๐Ÿงš

  • Enter, ^C โ€” accept/abort input.
  • ^O, g^O โ€” open external $EDITOR to edit contents of current/selected rows in current column.
  • ^R โ€” reload initial value.
  • ^A, ^E โ€” go to beginning/end of line.
  • ^B, ^F โ€” go back/forward one character.
  • ^โ†, ^โ†’ (arrow) โ€” go back/forward one word.
  • ^H, ^D โ€” delete previous/current character.
  • ^T โ€” transpose previous and current characters.
  • ^U, ^K โ€” clear from cursor to beginning/end of line.
  • ^Y โ€” paste from cell clipboard.
  • Backspace, Del โ€” delete previous/current character.
  • Insert โ€” toggle insert mode.
  • Up, Down โ€” set contents to previous/next in history.
  • Tab, Shift+Tab โ€” move cursor left/right and re-enter edit mode.
  • Shift+Arrow โ€” move cursor in direction of Arrow and re-enter edit mode.

๐Ÿงฐ Data Toolkit ๐Ÿงฐ

this is the power tools section. very โ€œI came preparedโ€ energy ๐Ÿ”ฅ

  • o input โ€” open input in VisiData.
  • zo โ€” open file or url from path in current cell.
  • ^S, g^S filename โ€” save current/all sheet(s) to filename with given filetype. Note: if the format does not support multisave, or the filename ends in a /, a directory will be created.
  • z^S filename โ€” save current column only to filename with given filetype.
  • ^D filename.vdj โ€” save CommandLog to filename.vdj file.
  • A โ€” open new blank sheet with one column.
  • T โ€” open new sheet that has rows and columns of current sheet transposed.
  • + aggregator โ€” add aggregator to current column (see Frequency Table).
  • z+ aggregator โ€” display result of aggregator over values in selected rows for current column; store result in Memory Sheet.
  • & โ€” append top two sheets in Sheets Stack.
  • g& โ€” append all sheets in Sheets Stack.
  • w nBefore nAfter โ€” add column where each row contains a list of that row, nBefore rows, and nAfter rows.

๐Ÿ“Š Data Visualization ๐Ÿ“Š

plotting time, bestie. bring your numeric columns and your key columns, weโ€™re making little pictures out of data ๐ŸŒˆ

  • . (dot) โ€” plot current numeric column vs key columns. The numeric key column is used for the x-axis; categorical key column values determine color.
  • g. โ€” plot a graph of all visible numeric columns vs key columns.

If rows on the current sheet represent plottable coordinates (as in .shp or vector .mbtiles sources), . plots the current row, and g. plots all selected rows (or all rows if none selected).

๐Ÿ–ผ๏ธ Canvas-specific Commands ๐Ÿ–ผ๏ธ

  • +, - โ€” increase/decrease zoom level, centered on cursor.
  • _ (underbar) โ€” zoom to fit full extent.
  • z_ (underbar) โ€” set aspect ratio.
  • g_ (underbar) โ€” Zoom y-axis to fit all visible data points.
  • x xmin xmax โ€” set xmin/xmax on graph.
  • y ymin ymax โ€” set ymin/ymax on graph.
  • s, t, u โ€” select/toggle/unselect rows on source sheet contained within canvas cursor.
  • gs, gt, gu โ€” select/toggle/unselect rows on source sheet visible on screen.
  • d โ€” delete rows on source sheet contained within canvas cursor.
  • gd โ€” delete rows on source sheet visible on screen.
  • Enter โ€” open sheet of source rows contained within canvas cursor.
  • gEnter โ€” open sheet of source rows visible on screen.
  • 1 - 9 โ€” toggle display of layers.
  • ^L โ€” redraw all pixels on canvas.
  • v โ€” toggle show_graph_labels option.
  • mouse scrollwheel โ€” zoom in/out of canvas.
  • left click-drag โ€” set canvas cursor.
  • right click-drag โ€” scroll canvas.

๐ŸชŸ Split Screen ๐ŸชŸ

two panes, one vibe. split it, stack it, swap it โ€” very main character multitasking energy โœจ

  • Z โ€” split screen in half, so that second sheet on the stack is visible in a second pane.
  • zZ โ€” split screen, and queries for height of second pane.

๐Ÿชž Split Window specific Commands ๐Ÿชž

  • gZ โ€” close an already split screen, current pane full screens.
  • Z โ€” push second sheet on current paneโ€™s stack to the top of the other paneโ€™s stack.
  • Tab โ€” jump to other pane.
  • gTab โ€” swap panes.
  • g Ctrl+^ โ€” cycle through sheets.

๐ŸŒ€ Other Commands ๐ŸŒ€

the miscellaneous little icons of the keyboard world. no cap, some of these are lowkey essential ๐Ÿ’€

  • Q โ€” quit current sheet and remove it from the CommandLog.
  • v โ€” toggle sheet-specific visibility (multi-line rows on Sheet, legends/axes on Graph).
  • ^E, g^E โ€” view traceback for most recent error(s).
  • z^E โ€” view traceback for error in current cell.
  • ^L โ€” refresh screen.
  • ^R โ€” reload current sheet.
  • ^Z โ€” suspend VisiData process.
  • ^G โ€” show cursor position and bounds of current sheet on status line.
  • ^V โ€” show version and copyright information on status line.
  • ^P โ€” open Status History.
  • m keystroke โ€” first, begin recording macro; second, prompt for keystroke, and complete recording. Macro can then be executed everytime provided keystroke is used. Will override existing keybinding. Macros will run on current row, column, sheet.
  • gm โ€” open an index of all existing macros. Can be directly viewed with Enter, and then modified with ^S.
  • ^Y, z^Y, g^Y โ€” open current row/cell/sheet as Python object.
  • ^X expr โ€” evaluate Python expr and opens result as Python object.
  • z^X expr โ€” evaluate Python expr, in context of current row, and open result as Python object.
  • g^X module โ€” import Python module in the global scope.

๐Ÿ—‚๏ธ Internal Sheets List ๐Ÿ—‚๏ธ

these are the built-in little rooms you can walk into. very โ€œwelcome to my data houseโ€ ๐Ÿ 

  • . Directory Sheet โ€” browse properties of files in a directory.
  • . Guide Index โ€” read documentation from within VisiData.
  • . Memory Sheet (Alt+Shift+M) โ€” browse saved values, including clipboard.

๐Ÿงš Metasheets ๐Ÿงš

  • . Columns Sheet (Shift+C) โ€” edit column properties.
  • . Sheets Sheet (Shift+S) โ€” jump between sheets or join them together.
  • . Options Sheet (Shift+O) โ€” edit configuration options.
  • . Commandlog (Shift+D) โ€” modify and save commands for replay.
  • . Error Sheet (Ctrl+E) โ€” view last error.
  • . Status History (Ctrl+P) โ€” view history of status messages.
  • . Threads Sheet (Ctrl+T) โ€” view, cancel, and profile asynchronous threads.

๐Ÿฆ‹ Derived Sheets ๐Ÿฆ‹

  • . Frequency Table (Shift+F) โ€” group rows by column value, with aggregations of other columns.
  • . Describe Sheet (Shift+I) โ€” view summary statistics for each column.
  • . Pivot Table (Shift+W) โ€” group rows by key and summarize current column.
  • . Melted Sheet (Shift+M) โ€” unpivot non-key columns into variable/value columns.
  • . Transposed Sheet (Shift+T) โ€” open new sheet with rows and columns transposed.

๐Ÿ’… INTERNAL SHEETS ๐Ÿ’…

๐ŸŒธ Directory Sheet ๐ŸŒธ

๐ŸŒ global commands ๐ŸŒ

  • Space open-dir-current โ€” open the Directory Sheet for the current directory.

๐ŸŽ€ sheet-specific commands ๐ŸŽ€

  • Enter, gEnter โ€” open current/selected file(s) as new sheet(s).
  • ^O, g^O โ€” open current/selected file(s) in external $EDITOR.
  • ^R, z^R, gz^R โ€” reload information for all/current/selected file(s).
  • d, gd โ€” delete current/selected file(s) from filesystem, upon commit.
  • y, gy directory โ€” copy current/selected file(s) to given directory, upon commit.
  • e, ge name โ€” rename current/selected file(s) to name.
  • ` (backtick) โ€” open parent directory.
  • z^S โ€” commit changes to file system.

๐Ÿงญ Guide Index ๐Ÿงญ

Browse through a list of available guides. Each guide shows you how to use a particular feature. Gray guides have not been written yet.

๐ŸŒ global commands ๐ŸŒ

  • Space open-guide-index โ€” open the Guide Index.

๐ŸŽ€ sheet-specific commands ๐ŸŽ€

  • Enter โ€” open a guide.

๐Ÿง  Memory Sheet ๐Ÿง 

Browse through a list of stored values, referanceable in expressions through their name.

๐ŸŒ global commands ๐ŸŒ

  • Alt+Shift+M โ€” open the Memory Sheet.
  • Alt+M name โ€” store value in current cell in Memory Sheet under name.

๐ŸŽ€ sheet-specific commands ๐ŸŽ€

  • e โ€” edit either value or name, to edit reference.

๐Ÿฆ‹ METASHEETS ๐Ÿฆ‹

๐Ÿ’… Columns Sheet (Shift+C) ๐Ÿ’…

Okay so the properties of columns on the source sheet can be changed with standard editing commands (e, ge, g=, Del) right there on the Columns Sheet. Multiple aggregators can be set by listing them (separated by spaces) in the aggregators column. And bestie, the g commands affect the selected rows, which are the literal columns on the source sheet. Periodt.

๐ŸŒ global commands

  • gC โ€” open Columns Sheet with all columns from all sheets

๐ŸŽฏ sheet-specific commands

  • & โ€” add column from appending selected source columns
  • g!, gz! โ€” toggle/unset selected columns as key columns on source sheet
  • g+ aggregator โ€” add an aggregator to selected source columns
  • g- (hyphen) โ€” hide selected columns on source sheet
  • g~, g#, g%, g$, g@, gz#, z% โ€” set type of selected columns on source sheet to str / int / float / currency / date / len / floatsi
  • Enter โ€” open a Frequency Table sheet grouped by column referenced in current row

๐ŸŽ€ Sheets Sheet (Shift+S) ๐ŸŽ€

This opens the Sheets Stack, which contains only the active sheets on the current stack. Very main character energy, honestly.

๐ŸŒ global commands

  • gS โ€” open Sheets Sheet, which contains all sheets from current session, active and inactive
  • Alt number โ€” jump to sheet number

๐ŸŽฏ sheet-specific commands

  • Enter โ€” jump to sheet referenced in current row
  • gEnter โ€” push selected sheets to top of sheet stack
  • a โ€” add row to reference a new blank sheet
  • gC โ€” open Columns Sheet with all columns from selected sheets
  • gI โ€” open Describe Sheet with all visible columns from selected sheets
  • g^R โ€” reload all selected sheets
  • z^C, gz^C โ€” abort async threads for current/selected sheet(s)
  • g^S โ€” save selected or all sheets
  • & jointype โ€” merge selected sheets with visible columns from all, keeping rows according to jointype:
    • inner โ€” keep only rows which match keys on all sheets
    • outer โ€” keep all rows from first selected sheet
    • full โ€” keep all rows from all sheets (union)
    • diff โ€” keep only rows NOT in all sheets
    • append โ€” combine all rows from all sheets into a generic sheet, matching columns by name
    • concat โ€” combine all rows from same-type sheets, matching columns by position, keeping first sheet type, column names and types
    • extend โ€” copy first selected sheet, keeping all rows and sheet type, and extend with columns from other sheets
    • merge โ€” keep all rows from first sheet, updating any False-y cells with non-False-y values from second sheet; add unique rows from second sheet

๐ŸŒธ Options Sheet (Shift+O) ๐ŸŒธ

๐ŸŒ global commands

  • Shift+O โ€” edit global options (apply to all sheets)
  • zO โ€” edit sheet options (apply to current sheet only)
  • gO โ€” open options.config as TextSheet

๐ŸŽฏ sheet-specific commands

  • Enter, e โ€” edit option at current row
  • d โ€” remove option override for this context
  • ^S โ€” save option configuration to foo.visidatarc
  • z^S โ€” save option overrides to config file

๐Ÿฆ‹ CommandLog (Shift+D) ๐Ÿฆ‹

๐ŸŒ global commands

  • D โ€” open current sheet's CommandLog with all other loose ends removed; includes commands from parent sheets
  • gD โ€” open global CommandLog for all commands executed in the current session
  • zD โ€” open current sheet's CommandLog with the parent sheets commands' removed
  • set-envvar name value โ€” set an environment variable and record it for replay; refresh locale for LANG and LC_* variables

๐ŸŽฏ sheet-specific commands

  • x โ€” replay command in current row
  • gx โ€” replay contents of entire CommandLog
  • ^C โ€” abort replay

๐Ÿงš Threads Sheet (Ctrl+T) ๐Ÿงš

๐ŸŒ global commands

  • ^T โ€” open global Threads Sheet for all asynchronous threads running
  • z^T โ€” open current sheet's Threads Sheet

๐ŸŽฏ sheet-specific commands

  • ^C โ€” abort thread at current row
  • g^C โ€” abort all threads on current Threads Sheet

๐Ÿงš DERIVED SHEETS ๐Ÿงš

๐Ÿ“ Frequency Table (Shift+F) ๐Ÿ“

A Frequency Table groups rows by one or more columns, and includes summary columns for those with aggregators. It's giving organized chaos, in the best way.

๐ŸŒ global commands

  • gF โ€” open Frequency Table, grouped by all key columns on source sheet
  • zF โ€” open one-line summary for all rows and selected rows

๐ŸŽฏ sheet-specific commands

  • s, t, u โ€” select/toggle/unselect these entries in source sheet
  • Enter, gEnter โ€” open copy of source sheet with rows that are grouped in current cell / selected rows

๐ŸŽ€ Describe Sheet (Shift+I) ๐ŸŽ€

A Describe Sheet contains descriptive statistics for all visible columns.

๐ŸŒ global commands

  • gI โ€” open Describe Sheet for all visible columns on all sheets

๐ŸŽฏ sheet-specific commands

  • zs, zu โ€” select/unselect rows on source sheet that are being described in current cell
  • ! โ€” toggle/unset current column as a key column on source sheet
  • Enter โ€” open a Frequency Table sheet grouped on column referenced in current row
  • zEnter โ€” open copy of source sheet with rows described in current cell

๐Ÿฆ‹ Pivot Table (Shift+W) ๐Ÿฆ‹

Set key column(s) and aggregators on column(s) before pressing Shift+W on the column to pivot. Trust the process, bestie.

๐ŸŽฏ sheet-specific commands

  • Enter โ€” open sheet of source rows aggregated in current pivot row
  • zEnter โ€” open sheet of source rows aggregated in current pivot cell

๐ŸŒˆ Melted Sheet (Shift+M) ๐ŸŒˆ

Open Melted Sheet (unpivot), with key columns retained and all non-key columns reduced to Variable-Value rows.

๐ŸŒ global commands

  • gM regex โ€” open Melted Sheet (unpivot), with key columns retained and regex capture groups determining how the non-key columns will be reduced to Variable-Value rows

๐Ÿ Python Object Sheet (^X ^Y g^Y z^Y) ๐Ÿ

๐ŸŽฏ sheet-specific commands

  • Enter โ€” dive further into Python object
  • v โ€” toggle show/hide for methods and hidden properties
  • gv, zv โ€” show/hide methods and hidden properties

๐ŸŒˆ COMMANDLINE OPTIONS ๐ŸŒˆ

Add -n/--nonglobal to make subsequent CLI options sheet-specific (applying only to paths specified directly on the CLI). By default, CLI options apply to all sheets. Iykyk.

Options can also be set via the Options Sheet or a .visidatarc (see โ€œFILESโ€).

  • -P=longname โ€” preplay longname before replay or regular launch; limited to Base Sheet bound commands
  • +toplevel:subsheet:col:row โ€” launch vd with subsheet of toplevel at top-of-stack, and cursor at col and row; all arguments are optional
  • --overwrite=c โ€” Overwrite with confirmation
  • --guides โ€” open Guide Index
  • -f, --filetype=filetype โ€” tells VisiData which loader to use for a given filetype instead of trusting the file extension (default: tsv). Aliases: -if, --input-filetype. Heads up bestie: this only affects input paths that come after it on the CLI โ€” it does not touch the -o output, and it doesn't touch files you open later in the session either. Timing matters ๐Ÿ’…
  • -of, --output-filetype=filetype โ€” sets the saver that the -o output will use to filetype, instead of going off its extension.
  • -d, --delimiter=delimiter โ€” the field delimiter to use for the tsv/usv filetype (default: \t).
  • -y, --confirm=y โ€” auto-accept all the confirmation prompts, file overwrite included (default: y). Zero interruptions, maximum chaos, we love her โœจ
  • -ro, --overwrite=n โ€” do not overwrite existing files (default: n). Your files stay safe, no cap ๐Ÿซถ
  • -N, --nothing=T โ€” disables loading .visidatarc and plugin addons (default: False). It's giving "fresh start, no baggage."
  • --visidata-dir=str โ€” the VisiData directory for plugins and other files (default: /build/.visidata โ€” actually /build/.config/visidata). You can set it with $VD_DIR or with --visidata-dir. Your call, main character ๐ŸŽ€
  • --debug โ€” exit on error and display the stacktrace (default: False). For when you really wanna see what went wrong ๐Ÿ˜ญ
  • --undo=bool โ€” enable undo/redo (default: True). Literally never turn this off, iykyk.
  • --col-cache-size=int โ€” max number of cache entries in each cached column (default: 0).
  • --scroll-incr=int โ€” how much to scroll with the scrollwheel (default: -3).
  • --force-256-colors โ€” use 256 colors even when curses reports fewer (default: False). Fancy colors on a crusty terminal? Slay ๐ŸŒˆ
  • --quitguard โ€” confirm before quitting a modified sheet (default: False). The "did you save??" bestie we all need ๐Ÿ’–
  • --default-width=int โ€” default column width (default: 20).
  • --default-height=int โ€” default column height (default: 4).
  • --name-joiner=str โ€” the string used to join sheet or column names (default: _).
  • --value-joiner=str โ€” the string used to join display values (no default given).
  • --max-rows=int โ€” number of rows to load from the source (default: 1000000000). That's a billion, she's ambitious ๐Ÿ”ฅ
  • --wrap โ€” wrap text to fit the window width on TextSheet (default: False).
  • --save-filetype=str โ€” specify the default file type to save as (default: tsv).
  • --profile โ€” enable profiling on threads (default: False).
  • --min-memory-mb=int โ€” minimum memory to continue loading and async processing (default: 0).
  • --max-threads=int โ€” maximum number of concurrent processes for addcol-shell (default: 10).
  • --encoding=str โ€” encoding passed to codecs.open when reading a file (default: utf-8-sig).
  • --encoding-errors=str โ€” encoding_errors passed to codecs.open (default: surrogateescape).
  • --tmp-prefix=str โ€” prefix for temporary files and directories (default: visidata-).
  • --confirm=str โ€” confirm interactive prompts, {a=ask|y=yes} (default: a).
  • --mouse-interval=int โ€” max time between press/release for a click, in ms (default: 1).
  • --bulk-select-clear โ€” clear selected rows before new bulk selections (default: False).
  • --some-selected-rows โ€” if no rows are selected: when True, someSelectedRows returns all rows; when False, it fails (default: False).
  • --regex-skip=str โ€” regex of lines to skip in text sources.
  • --regex-flags=str โ€” flags to pass to re.compile(), [AILMSUX] (default: I).
  • --load-lazy โ€” load subsheets always (False) or lazily (True) (default: False).
  • --skip=int โ€” skip N rows before the header (default: 0).
  • --header=int โ€” parse the first N rows as column names (default: 1).
  • --delimiter=str โ€” field delimiter to use for the tsv/csv filetype.
  • --row-delimiter=str โ€” row delimiter to use for the tsv/csv filetype.
  • --tsv-safe-newline=str โ€” replacement for the newline character when saving to tsv.
  • --tsv-safe-tab=str โ€” replacement for the tab character when saving to tsv.
  • --visibility=int โ€” visibility level (default: 0).
  • --default-sample-size=int โ€” number of rows to sample for regex.split, 0 means all (default: 100).
  • --fmt-expand-dict=str โ€” format str to use for names of columns expanded from a dict, (colname, key) (default: %s.%s).
  • --fmt-expand-list=str โ€” format str to use for names of columns expanded from a list, (colname, index) (default: %s[%s]).
  • --json-indent=NoneType โ€” indent to use when saving json (default: None).
  • --json-sort-keys โ€” sort object keys when saving to json (default: False).
  • --json-ensure-ascii=bool โ€” ensure ascii encode when saving json (default: True).
  • --default-colname=str โ€” column name to use for non-dict rows.
  • --filetype=str โ€” input filetype; overrides the file extension.
  • --safe-error=str โ€” error string to use while saving (default: #ERR).
  • --save-encoding=str โ€” encoding passed to codecs.open when saving a file (default: utf-8).
  • --clean-names โ€” clean column/sheet names so they're valid Python identifiers (default: False).
  • --replay-wait=float โ€” time to wait between replayed commands, in seconds (default: 0.0).
  • --replay-ignore-errors โ€” continue replay on error instead of aborting (default: False).
  • --rowkey-prefix=str โ€” string prefix for rowkey in the cmdlog (default: ใ‚ญ). Iconic choice, honestly ๐ŸŽ€
  • --clipboard-copy-cmd=str โ€” command to copy stdin to the system clipboard (default: xclip -selection clipboard -filter).
  • --clipboard-paste-cmd=str โ€” command to send the contents of the system clipboard to stdout (default: xclip -selection clipboard -o).
  • --fancy-chooser โ€” use the nicer selection interface for aggregators and jointype (default: False).
  • --null-value=NoneType โ€” a value to be counted as null (default: None).
  • --histogram-bins=int โ€” number of bins for the histogram of numeric columns (default: 0).
  • --numeric-binning โ€” bin numeric columns into ranges (default: False).
  • --plot-colors=str โ€” list of distinct colors to use for plotting distinct objects.
  • --motd-url=str โ€” source of randomized startup messages. A little treat every time you launch โœจ
  • --dir-depth=int โ€” folder recursion depth on DirSheet (default: 0).
  • --dir-hidden โ€” load hidden files on DirSheet (default: False). The secret files ๐Ÿ‘€
  • --active-procs=int โ€” number of concurrent processes on DirSheet (default: 10).
  • --config=Path โ€” config file to exec in Python (default: /build/.visidatarc).
  • --play=str โ€” a file.vdj to replay.
  • --batch โ€” replay in batch mode (with no interface and all status sent to

โ€ฆstdout)

  • --output=NoneType โ€” default None; saves the final visible sheet to output when replay ends. The grand finale exit moment ๐Ÿ’…
  • --output-filetype=str โ€” filetype for the output path; overrides the file extension. No default shown, bestie.
  • --output-cell=NoneType โ€” default None; outputs the cursor cellโ€™s display value at exit.
  • --preplay=str โ€” longnames to preplay before replay</em>.
  • --imports=str โ€” default plugins; imports to preload before .visidatarc (command-line only).
  • --nothing โ€” default False; no config, no plugins, nothing extra. Full ghost mode ๐Ÿ‘ป
  • --interactive โ€” default False; run interactive mode after batch replay.
  • --s3-anon โ€” default False; run S3 in anonymous mode.
  • --overwrite=str โ€” default c; allow overwriting existing files, with {c=check|n=no/readonly}.
  • --plugins-autoload=bool โ€” default True; do not autoload plugins if False.
  • --theme=str โ€” display/color theme to use. Serve the vibe check ๐ŸŽจ
  • --pandas-allow-pickle โ€” default False; pandas allow unpickling objects (unsafe).
  • --airtable-auth-token=str โ€” Airtable API key from https://airtable.com/account.
  • --matrix-token=str โ€” matrix API token.
  • --matrix-user-id=str โ€” matrix user ID associated with token.
  • --matrix-device-id=str โ€” default VisiData; device ID associated with matrix login.
  • --reddit-client-id=str โ€” client_id for reddit API.
  • --reddit-client-secret=str โ€” client_secret for reddit API.
  • --reddit-user-agent=str โ€” default VisiData v3.5; user_agent for reddit API.
  • --zulip-batch-size=int โ€” default -100; number of messages to fetch per call (<0 to fetch before anchor).
  • --zulip-anchor=int โ€” default 1000000000; message id to start fetching from.
  • --zulip-delay-s=float โ€” default 1e-05; seconds to wait between calls (0 to stop after first).
  • --zulip-api-key=str โ€” API key for Zulip.
  • --zulip-email=str โ€” email address for use with Zulip API key.
  • --csv-dialect=str โ€” default excel; dialect passed to csv.reader.
  • --csv-delimiter=str โ€” default ,; delimiter passed to csv.reader.
  • --csv-doublequote=bool โ€” default True; quote-doubling setting passed to csv.reader.
  • --csv-quotechar=str โ€” default "; quotechar passed to csv.reader.
  • --csv-quoting=int โ€” default 0; quoting style passed to csv.reader and csv.writer.
  • --csv-skipinitialspace=bool โ€” default True; skipinitialspace passed to csv.reader.
  • --csv-escapechar=NoneType โ€” default None; escapechar passed to csv.reader.
  • --csv-lineterminator=str โ€” default "; lineterminator passed to csv.writer.
  • --safety-first โ€” default False; sanitize input/output to handle edge cases, with a performance cost. Safety slay, but bestie, it costs you ๐Ÿ’€
  • --duckdb-onconnect=str โ€” duckdb statement to execute after opening a connection.
  • --f5log-object-regex=NoneType โ€” default None; regex to apply to the object name. Useful where object names have a structure to extract. Use the (?P<foo>...) named groups form to get column names.
  • --f5log-log-year=NoneType โ€” default None; override the default year used for log parsing. Use all four digits of the year (e.g., 2022). By default (None) use the year from the ctime of the file, or failing that the current year.
  • --f5log-log-timezone=str โ€” default UTC; timezone of the source file.
  • --fixed-rows=int โ€” default 1000; number of rows to check for fixed width columns.
  • --fixed-maxcols=int โ€” default 0; max number of fixed-width columns to create (0 is no max).
  • --graphviz-edge-labels=bool โ€” default True; whether to include edge labels on graphviz diagrams.
  • --grep-base-dir=NoneType โ€” default None; base directory for relative paths opened with sysopen-row.
  • --hdf5-matrix-enumerate โ€” default False; enumerate matrix rows and columns.
  • --html-title=str โ€” default <h2>{sheet.name}</h2>; table header when saving to html.
  • --http-max-next=int โ€” default 0; max next.url pages to follow in http response.
  • --http-req-headers=dict โ€” default {'User-Agent': 'VisiData v3.5'}; http headers to send to requests.
  • --http-ssl-verify=bool โ€” default True; verify host and certificates for https.
  • --npy-allow-pickle โ€” default False; numpy allow unpickling objects (unsafe).
  • --npy-matrix-enumerate โ€” default False; enumerate matrix rows and columns.
  • --pcap-internet=str โ€” default n; (y/s/n) if save_dot includes all internet hosts separately (y), combined (s), or does not include the internet (n).
  • --pdf-tables โ€” default False; parse PDF for tables instead of pages of text.
  • --postgres-schema=str โ€” default public; desired schema for the Postgres database.
  • --s3-endpoint=str โ€” alternate S3 endpoint, used for local testing or alternative S3-compatible services.
  • --s3-glob=bool โ€” default True; enable glob-matching for S3 paths.
  • --s3-version-aware โ€” default False; show all object versions in a versioned bucket.
  • --sqlite-onconnect=str โ€” sqlite statement to execute after opening a connection.
  • --xlsx-meta-columns โ€” default False; include columns for cell objects, font colors, and fill colors.
  • --xlsx-color-cells=bool โ€” default True; color cells based on xlsx source.
  • --xml-parser-huge-tree=bool โ€” default True; allow very deep trees and very long text content.
  • --xml-parser-recover=bool โ€” default True; try hard to parse through broken XML.
  • --plt-marker=str โ€” default .; matplotlib.markers.
  • --plt-linestyle=str โ€” matplotlib linestyle for save-svg; - to connect points as a line chart.
  • --plot-palette=str โ€” default Set3; colorbrewer palette to use.
  • --server-addr=str โ€” default 127.0.0.1; IP address to listen for commands.
  • --server-port=int โ€” default 0; port to listen for commands.
  • --server-socket=str โ€” path to Unix domain socket to listen for
  • โ€ฆokay so this one's carrying on from the last part โ€” the name got cut off, but the tail end says: commands (takes precedence over server_port)
  • --server-cursor-width=int โ€” max display width per cell in cursor row echo. default: 200
  • --fixer-api-key=str โ€” your API key for api.apilayer.com/fixer ๐Ÿ”‘ no key, no currency conversions bestie
  • --fixer-cache-days=int โ€” how long to cache currency conversions, in days. default: 1
  • --describe-aggrs=str โ€” the numeric aggregators to calculate on the Describe sheet. default: mean stdev ๐Ÿ“Š
  • --highlight-search=bool โ€” whether to highlight strings in searches. default: True
  • --incr-base=float โ€” the start value for column increments. default: 1.0
  • --ping-count=int โ€” send this many pings to each host. default: 3 ๐Ÿ“
  • --ping-interval=float โ€” wait between ping rounds, in seconds. default: 0.1
  • --regex-maxsplit=int โ€” the maxsplit to pass to regex.split. default: 0
  • --rename-cascade โ€” cascade column renames into expressions. default: False
  • --faker-locale=str โ€” default locale to use for Faker. default: en_US ๐ŸŒ
  • --faker-extra-providers=NoneType โ€” list of additional Provider classes to load via add_provider(). default: None
  • --faker-salt=str โ€” makes your fakes deterministic, when the seed string is non-empty ๐Ÿง‚
  • --mailcap-mimetype=str โ€” force the mimetype for sysopen-mailcap
  • --unfurl-empty โ€” if unfurl includes rows for empty containers. default: False

๐ŸŽ€ DISPLAY OPTIONS ๐ŸŽ€

Okay so these ones are special โ€” display options can only be set via the Options Sheet or a .visidatarc (peep FILES for the deets ๐Ÿ‘€). No sneaking them in on the command line, bestie, that's just not how it works.

  • disp_menu โ€” default True โ€” shows the menu up on the top line whenever it's not the active thing. very "i'm here but not here here" of it โœจ
  • disp_menu_keys โ€” default True โ€” shows keystrokes inline inside submenus, so you can actually see what to press like a good little cheat sheet ๐Ÿ’…
  • color_menu โ€” default black on 75 blue โ€” the general color of menu items
  • color_menu_active โ€” default 223 yellow on black โ€” color of the menu items that are currently active, aka the main character ones ๐Ÿ‘‘
  • color_menu_spec โ€” default black on 34 green โ€” color of the sheet-specific menu items
  • color_menu_help โ€” default black italic on 75 blue โ€” color of the helpbox. italic, because it's fancy ๐ŸŽ€
  • disp_menu_boxchars โ€” default โ”‚โ”‚โ”€โ”€โ”Œโ”โ””โ”˜โ”œโ”ค โ€” the box characters used to draw menus
  • disp_menu_more โ€” default ยป โ€” the indicator for a command submenu
  • disp_menu_push โ€” default โŽ˜ โ€” indicator that a command pushes a sheet onto the sheet stack
  • disp_menu_input โ€” default โ€ฆ โ€” indicator that the command needs input
  • disp_menu_fmt โ€” default | VisiData {vd.version} | {vd.motd} โ€” the right-side menu format string
  • disp_float_fmt โ€” default {:.2f} โ€” the default fmtstr used to format float values
  • disp_int_fmt โ€” default {:d} โ€” the default fmtstr used to format int values
  • disp_formatter โ€” default generic โ€” the formatter that creates the text in each cell (also used by text savers, fyi)
  • disp_displayer โ€” default generic โ€” the displayer that renders the text in each cell
  • disp_note_none โ€” default โŒ€ โ€” what you see in a cell whose value is None ๐Ÿซฅ
  • disp_truncator โ€” default โ€ฆ โ€” indicator that the contents are only partially visible
  • disp_oddspace โ€” default ยท โ€” the displayable character standing in for odd whitespace
  • disp_more_left โ€” default < โ€” header note indicating there are more columns to the left
  • disp_more_right โ€” default > โ€” header note indicating there are more columns to the right
  • disp_error_val โ€” default (empty) โ€” the displayed contents for a computation exception
  • disp_ambig_width โ€” default 1 โ€” the width to use for unicode chars that are marked ambiguous
  • disp_pending โ€” default (empty) โ€” the string to display in pending cells
  • disp_note_pending โ€” default : โ€” the note to display for pending cells
  • disp_note_fmtexc โ€” default ? โ€” cell note for an exception during formatting
  • disp_note_getexc โ€” default ! โ€” cell note for an exception during computation
  • disp_note_typeexc โ€” default ! โ€” cell note for an exception during type conversion
  • color_note_pending โ€” default bold green โ€” color of the note in pending cells
  • color_note_type โ€” default 226 yellow โ€” color of the cell note for non-str types in anytype columns
  • color_note_row โ€” default 220 yellow โ€” color of the row note on the left edge
  • disp_column_sep โ€” default โ”‚ โ€” separator between columns
  • disp_keycol_sep โ€” default โ•‘ โ€” separator between key columns and the rest of the columns
  • disp_rowtop_sep โ€” default โ”‚
  • disp_rowmid_sep โ€” default โ
  • disp_rowbot_sep โ€” default โ
  • disp_rowend_sep โ€” default โ•‘
  • disp_keytop_sep โ€” default โ•‘
  • disp_keymid_sep โ€” default โ•‘
  • disp_keybot_sep โ€” default โ•‘
  • disp_endtop_sep โ€” default โ•‘
  • disp_endmid_sep โ€” default โ•‘
  • disp_endbot_sep โ€” default โ•‘
  • disp_selected_note โ€” default โ€ข
  • disp_sort_asc โ€” default โ†‘โ†Ÿโ‡žโ‡กโ‡งโ‡‘ โ€” the characters for ascending sort, going up up up ๐Ÿฆ‹
  • disp_sort_desc โ€” default โ†“โ†กโ‡Ÿโ‡ฃโ‡ฉโ‡“ โ€” the characters for descending sort, gravity said hello
  • color_default โ€” default white on black โ€” the default fg and bg colors
  • color_default_hdr โ€” default bold white on black โ€” color of the column headers
  • color_bottom_hdr โ€” default underline white on black โ€” color of the bottom header row
  • color_current_row โ€” default reverse โ€” color of the cursor row
  • color_current_col โ€” default bold on 232 โ€” color of the cursor column
  • color_current_cell โ€” default (empty) โ€” color of the current cell, if it's different from color_current_row+color_current_col
  • color_current_hdr โ€” default bold reverse โ€” color of the header for the cursor column
  • color_column_sep โ€” default white on black โ€” color of column separators
  • color_key_col โ€” default 81 cyan โ€” color of key columns ๐Ÿ”‘
  • color_hidden_col โ€” default 8 โ€” color of hidden columns on metasheets
  • color_selected_row โ€” default 215 yellow โ€” color of selected rows
  • color_clickable โ€” default bold โ€” color of an internally clickable item
  • color_code โ€” default bold white on 237 โ€” color of a code sample
  • color_heading โ€” default bold black on yellow โ€” color of a header
  • color_guide_unwritten โ€” default 243 on black โ€” color of unwritten guides in GuideGuide
  • disp_wrap_max_lines โ€” default 3 โ€” max lines for the multiline view
  • disp_wrap_break_long_words โ€” default True โ€” break words longer than the column width in multiline
  • disp_wrap_replace_whitespace โ€” default False โ€” replace whitespace with spaces in multiline
  • disp_wrap_placeholder โ€” default โ€ฆ โ€” the multiline string that indicates truncation
  • disp_multiline_focus โ€” default True โ€” only the multiline cursor row gets focus, everybody else sit down
  • color_multiline_bottom โ€” default (empty) โ€” color of the bottom line of multiline rows
  • color_aggregator โ€” default bold 255 white on 240 black โ€” color of the aggregator summary on the bottom row
  • disp_splitwin_pct โ€” default 0 โ€” height of the second sheet on screen
  • disp_rstatus_fmt โ€” default: this whole format string, on the right side of your status line. it's a lot. she's an icon:
{sheet.threadStatus} {sheet.keystrokeStatus}[:longname_status]{sheet.longname}[/] {sheet.nRows:9d} {sheet.rowtype} {sheet.modifiedStatus}{sheet.selectedStatus}{vd.replayStatus}{vd.sidebarStatus}
  • disp_status_fmt โ€” default {sheet.sheetlist}| โ€” the left-side status format string
  • disp_lstatus_max โ€” default 0 โ€” maximum length of the left status line
  • disp_status_sep โ€” default โ”‚ โ€” separator between statuses
  • color_keystrokes โ€” default bold white on 237 โ€” color of the input keystrokes
  • color_longname_guide โ€” default 237 โ€” color of command longnames
  • color_longname_status โ€” default white โ€” color of command longnames in the status area
  • color_keys โ€” default bold reverse โ€” color of keystrokes in help
  • color_status โ€” default bold on 238 โ€” status line color
  • color_error โ€” default 202 1 โ€” error message color ๐Ÿ˜ญ
  • color_warning โ€” default 166 15 โ€” warning message color
  • color_top_status โ€” default underline โ€” top window status bar color
  • color_active_status โ€” default black on 68 blue โ€” active window status bar color
  • color_inactive_status โ€” default 8 on black โ€” inactive window status bar color
  • color_highlight_status โ€” default black on green โ€” color of highlighted elements in the statusbar
  • color_working โ€” default 118 5 โ€” color for when the system is running smoothly ๐ŸŒธ
  • color_edit_unfocused โ€” default 238 on 110 โ€” display color for unfocused input in a form
  • color_edit_cell โ€” default 233 on 110 โ€” the cell color to use when editing a cell
  • disp_edit_fill โ€” default _ โ€” the edit field fill character
  • disp_unprintable โ€” default ยท โ€” substitute character for unprintables
  • disp_date_fmt โ€” default %Y-%m-%d โ€” the default fmtstr passed to strftime for date values
  • disp_currency_fmt โ€” default %.02f โ€” the default fmtstr to format currency values
  • color_currency_neg โ€” default red โ€” color for negative values in the currency displayer
  • disp_replay_play โ€” default โ–ถ โ€” status indicator for an active replay
  • disp_replay_record โ€” default โบ โ€” status indicator for macro record
  • color_status_replay โ€” default green โ€” color of the replay status indicator
  • disp_histogram โ€” default โ–  โ€” the histogram element character
  • disp_graph_labels โ€” default True โ€” show axes and legend on graph
  • disp_canvas_charset โ€” default: the braille charset below (yeah, all of it, it's giving art ๐ŸŽจ) โ€” charset to render 2x4 blocks on canvas:
โ €โ โ ‚โ ƒโ „โ …โ †โ ‡โ ˆโ ‰โ Šโ ‹โ Œโ โ Žโ โ โ ‘โ ’โ “โ ”โ •โ –โ —โ ˜โ ™โ šโ ›โ œโ โ žโ Ÿโ  โ กโ ขโ ฃโ คโ ฅโ ฆโ งโ จโ ฉโ ชโ ซโ ฌโ ญโ ฎโ ฏโ ฐโ ฑโ ฒโ ณโ ดโ ตโ ถโ ทโ ธโ นโ บโ ปโ ผโ ฝโ พโ ฟโก€โกโก‚โกƒโก„โก…โก†โก‡โกˆโก‰โกŠโก‹โกŒโกโกŽโกโกโก‘โก’โก“โก”โก•โก–โก—โก˜โก™โกšโก›โกœโกโกžโกŸโก โกกโกขโกฃโกคโกฅโกฆโกงโกจโกฉโกชโกซโกฌโกญโกฎโกฏโกฐโกฑโกฒโกณโกดโกตโกถโกทโกธโกนโกบโกปโกผโกฝโกพโกฟโข€โขโข‚โขƒโข„โข…โข†โข‡โขˆโข‰โขŠโข‹โขŒโขโขŽโขโขโข‘โข’โข“โข”โข•โข–โข—โข˜โข™โขšโข›โขœโขโขžโขŸโข โขกโขขโขฃโขคโขฅโขฆโขงโขจโขฉโขชโขซโขฌโขญโขฎโขฏโขฐโขฑโขฒโขณโขดโขตโขถโขทโขธโขนโขบโขปโขผโขฝโขพโขฟโฃ€โฃโฃ‚โฃƒโฃ„โฃ…โฃ†โฃ‡โฃˆโฃ‰โฃŠโฃ‹โฃŒโฃโฃŽโฃโฃโฃ‘โฃ’โฃ“โฃ”โฃ•โฃ–โฃ—โฃ˜โฃ™โฃšโฃ›โฃœโฃโฃžโฃŸโฃ โฃกโฃขโฃฃโฃคโฃฅโฃฆโฃงโฃจโฃฉโฃชโฃซโฃฌโฃญโฃฎโฃฏโฃฐโฃฑโฃฒโฃณโฃดโฃตโฃถโฃทโฃธโฃนโฃบโฃปโฃผโฃฝโฃพโฃฟ
  • disp_graph_pixel_random โ€” default False โ€” randomly choose an attr from the set of pixels instead of the most common one
  • disp_zoom_incr โ€” default 2.0 โ€” the amount to multiply the current zoomlevel by when zooming ๐Ÿ”
  • color_graph_hidden โ€” default 238 blue โ€” color of the legend for a hidden attribute
  • color_graph_selected โ€” default bold โ€” color of selected graph points
  • color_graph_axis โ€” default bold โ€” color for graph axis labels
  • disp_graph_tick_x โ€” default โ•ต โ€” character for graph x-axis ticks
  • color_graph_refline โ€” the color used for the graph reference value lines โœจ
  • disp_graph_reflines_x_charset (default: โ–โ”‚โ”‚โ–•) โ€” charset for rendering the vertical reference lines on a graph
  • disp_graph_reflines_y_charset (default: โ–”โ”€โ”€โ–) โ€” charset for rendering the horizontal reference lines on a graph
  • disp_graph_multiple_reflines_char (default: โ–’) โ€” the char used to render multiple parallel reflines
  • disp_help_flags (default: cmdpalette guides help hints inputfield inputkeys nometacols sidebar) โ€” space-separated list of the helper features you wanna enable, bestie:
    • cmdpalette: exec-longname suggestions
    • guides: guides in the sidebar
    • help: help sidebar collapsed by default
    • hints: context-sensitive hints on the menu line
    • inputfield: context-sensitive help for each input field
    • inputkeys: input quick reference in the sidebar
    • nometacols: hide expert columns on metasheets
    • sidebar: context-sensitive sheet help in the sidebar
    • all: enable every helper feature at once (iconic behaviour tbh)
  • color_readonly (default: on 52) โ€” color for readonly columns ๐Ÿ’…
  • color_add_pending (default: green) โ€” color for rows that are pending add
  • color_change_pending (default: reverse yellow) โ€” color for cells pending modification
  • color_delete_pending (default: red) โ€” color for rows pending delete
  • disp_sidebar (default: True) โ€” whether to display the sidebar at all
  • disp_sidebar_fmt โ€” format string for the default sidebar
  • disp_sidebar_width (default: 0) โ€” max width for the sidebar
  • disp_sidebar_height (default: 0) โ€” max height for the sidebar
  • color_sidebar (default: black on 114 blue) โ€” base color of the sidebar
  • color_sidebar_title (default: black on yellow) โ€” color of the sidebar title
  • disp_boxchars (default: โ–โ–Œโ–„โ–ˆโ–—โ––โ–โ–Œ) โ€” box characters, in the order (ls rs ts bs tl tr bl br) ๐ŸŽ€
  • color_match (default: red) โ€” color for matching chars in the palette chooser
  • color_f5log_mon_up (default: green) โ€” color of f5log monitor status up
  • color_f5log_mon_down (default: red) โ€” color of f5log monitor status down
  • color_f5log_mon_unknown (default: blue) โ€” color of f5log monitor status unknown
  • color_f5log_mon_checking (default: magenta) โ€” color of monitor status while it's checking
  • color_f5log_mon_disabled (default: black) โ€” color of monitor status disabled
  • color_f5log_logid_alarm (default: red) โ€” color of alarms
  • color_f5log_logid_warn (default: yellow) โ€” color of warnings
  • color_f5log_logid_notice (default: cyan) โ€” color of notice
  • color_f5log_logid_info (default: green) โ€” color of info
  • color_xlsx_auto_dark (default: 16 black) โ€” color of Automatic xlsx text on light fills
  • color_xlsx_auto_light (default: 231 white) โ€” color of Automatic xlsx text on dark fills
  • color_xword_active (default: green) โ€” color of the active clue ๐ŸŒธ
  • disp_decimal_fmt (default: {}) โ€” default fmtstr for formatting decimal values
  • color_cmdpalette (default: black on 72) โ€” base color of the command palette
  • disp_cmdpal_max (default: 10) โ€” max number of suggestions in the command palette
  • color_highlight_search (default: 21 blue on 15 white) โ€” color used for highlighting search results
  • disp_scroll_context (default: 0) โ€” minimum number of lines to keep visible above/below the cursor when scrolling
  • disp_sparkline (default: โ–โ–‚โ–ƒโ–„โ–…โ–†โ–‡) โ€” the characters used to display a sparkline ๐Ÿ”ฅ

๐Ÿฆ‹ EXAMPLES ๐Ÿฆ‹

okay so this is the part where it all clicks, fr fr. just vibe with these:

vd

launch DirSheet for the current directory

vd foo.tsv

open the file foo.tsv in the current directory

vd -f ddw

open a blank sheet of type ddw

vd new.tsv

open a new blank tsv sheet named new

vd -f sqlite bar.db

open the file bar.db as a sqlite database

vd foo.tsv -n -f sqlite bar.db

open foo.tsv as tsv and bar.db as a sqlite database

vd -f sqlite foo.tsv bar.db

open both foo.tsv and bar.db as a sqlite database

vd -b countries.fixed -o countries.tsv

convert countries.fixed (in fixed width format) to countries.tsv (in tsv format) โ€” glow-up complete โœจ

vd postgres://username:password@hostname:port/database

open a connection to the given postgres database

vd --play tests/pivot.vdj --replay-wait 1 --output tests/pivot.tsv

replay tests/pivot.vdj, waiting 1 second between commands, and output the final sheet to test/pivot.tsv

ls -l | vd -f fixed --skip 1 --header 0

parse the output of ls -l into usable data

ls | vd | lpr

interactively select a list of filenames to send to the printer

vd newfile.tsv

open a blank sheet named newfile if the file does not exist

vd -P open-plugins

preplay longname open-plugins before starting the session

vd a.xlsx b.tsv c.tsv +0:3:1:2

launch with cursor for sheet 0 (a.xlsx) at subsheet 3 in sheet 0, col 1, row 2

vd a.xlsx b.tsv c.tsv +0:1:2

launch with cursor for sheet 0 (a.xlsx) at col 1, row 2

vd a.tsv b.tsv c.tsv +1:2

launch with cursor for the last sheet (c.tsv) at col 1, row 2

vd a.tsv b.tsv c.tsv +1:

launch with cursor for the last sheet (c.tsv) at col 1

vd a.tsv b.tsv c.tsv +:2

launch with cursor for the last sheet (c.tsv) at row 2

vd a.xlsx b.xlsx c.xlsx +0:annual:1:2 +1:sales:monthly:3:4

launch with cursor for sheet 0 (a.xlsx) in subsheet annual at col 1, row 2, and cursor for sheet 1 (b.xlsx), subsheet sales in subsheet monthly; col 3, row 4 โ€” yeah it's a whole journey, she contains multitudes ๐Ÿ’…

vd a.tsv b.tsv c.tsv +1::

launch in sheet 1 (b.tsv), with cursor at col 0, row 0

vd a.tsv b.tsv c.tsv +-2::

launch in 2nd from last sheet (b.tsv), with cursor at col 0, row 0

vd a.tsv b.tsv c.tsv +:1:

launch with cursors for all sheets at col 1

vd a.tsv b.tsv c.tsv +::2

launch with cursors for all sheets at row 2

vd a.tsv b.tsv c.tsv +:1:2

launch with cursors for all sheets at col 1, row 2

vd a.xlsx b.xslx c.xlsx +:a:1:2

launch with cursors for all sheets at subsheet a, col 1, row 2


๐Ÿงš FILES ๐Ÿงš

okay so here's the tea. at the start of every session, VisiData looks for $HOME/.visidatarc, and if it exists, it calls Python exec() on its contents. like, it will run your code. for example:

options.min_memory_mb=100  # stop processing without 100MB free

bindkey('0', 'go-leftmost')   # alias '0' to go to first column, like vim

def median(values):
    L = sorted(values)
    return L[len(L)//2]

vd.aggregator('median', median)

functions you define in .visidatarc are available in python expressions (e.g. in derived columns). so yes, you can absolutely build your own little toolbox in there ๐Ÿซถ

the VisiData directory holds local plugins (in its plugins/ subdirectory), saved macros, and other files. it defaults to ~/.config/visidata on Linux and ~/Library/Preferences/visidata on macOS, or $XDG_CONFIG_HOME/visidata when XDG_CONFIG_HOME is set. set VD_DIR before starting vd or use --visidata-dir=directory to choose another directory. the command-line option takes precedence over VD_DIR.

heads up bestie: input history and the list of saved macros are in the data directory (~/.local/share/visidata on Linux), and cached downloads are in the cache directory (~/.cache/visidata on Linux); neither moves with the VisiData directory. so don't be shocked when they stay put ๐Ÿ™ˆ

๐ŸŒˆ SUPPORTED SOURCES ๐ŸŒˆ

core VisiData includes these sources:

  • tsv (tab-separated value) โ€” plain and simple. VisiData writes tsv format by default. see the --tsv-delimiter option.
  • csv (comma-separated value) โ€” .csv files are a scourge upon the earth, and still regrettably common. see the --csv-dialect, --csv-delimiter, --csv-quotechar, and --csv-skipinitialspace options. accepted dialects are excel-tab, unix, and excel.
  • fixed (fixed width text) โ€” columns are autodetected from the first 1000 rows (adjustable with --fixed-rows).
  • json (single object) and jsonl/ndjson/ldjson (one object per line). cells containing lists (e.g. [3]) or dicts ({3}) can be expanded into new columns with ( and unexpanded with ).
  • sqlite โ€” may include multiple tables. the initial sheet is the table directory; Enter loads the entire table into memory. z+Ctrl+S saves modifications to source. (in the manpage that's written z^S, iykyk ๐Ÿ’…)

URL schemes are also supported too:

  • http (requires requests); can be used as transport for with another filetype

for a list of all remaining formats supported by VisiData, see https://visidata.org/formats. โœจ

in addition, .zip, .gz, .bz2, .xz, ,zstd, and .zst files are decompressed on the fly. no cap, she just does it ๐Ÿฆ‹


๐Ÿ‘‘ AUTHOR ๐Ÿ‘‘

VisiData was made by Saul Pwanson <vd@saul.pw>. absolute legend, honestly ๐Ÿซถ


and that's the whole page, bestie โ€” vd(1), from the Linux/MacOS build, dated October 27, 2026. go forth and spreadsheet your heart out ๐Ÿ’–โœจ๐ŸŽ€

๐Ÿ“ฆ where this page comes from