Edit page in Livemark
(2023-08-04 07:55)


With the explore command you can open your dataset in Visidata which is an amazing visual tool for working with tabular data in Console. For example try "Shift+F" for creating data histograms!


pip install frictionless[visidata]
pip install frictionless[visidata,zenodo] # for examples in this tutorial


For example, let's expore this interesing dataset:

frictionless explore https://zenodo.org/record/3977957


Before entering Visidata, it's highly recommended to read its documentation:

You can get it in Console as well:

vd --help
vd(1)                        Quick Reference Guide                       vd(1)

     VisiData — a terminal utility for exploring and arranging tabular data

     vd [options] [input ...]
     vd [options] --play cmdlog [-w waitsecs] [--batch] [-o output]
     vd [options] [input ...] +toplevel:subsheet:col:row

     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 expres‐
     sions; and workflows can be saved, documented, and replayed.

     -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)
     -o, --output=file       save final visible sheet to file as .tsv
     --replay-movement       toggle --play to move cursor cell-by-cell
     field=value             replace "{field}" in cmdlog contents with value

   Commands During Replay
        ^U                   pause/resume replay
        ^N                   execute next row in replaying sheet
        ^K                   cancel current replay

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

   Keystrokes to start off with
      ^Q              abort program immediately
      ^C              cancel user input or abort all async threads on current
     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)

      ^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 cur‐
                      rent sheet
     Space longname   execute command by its longname

       U              undo the most recent modification (requires enabled
       R              redo the most recent undo (requires enabled

   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
     g/  g? regex     search for regex forward/backward over all visible
     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 regex search

      <   >           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)

      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/bot‐
                      tom/top/right of sheet
     zH  zJ  zK  zK number
                      slide current row/column number positions to the

     zh  zj  zk  zl   scroll one left/down/up/right

   Column Manipulation
       _ (underbar)   toggle width of current column between full and default
      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

      - (hyphen)      hide current column
     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/cur‐
       ^              rename current column
      g^              rename all unnamed visible columns to contents of se‐
                      lected 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 cur‐
                      rent column for selected rows (or current row)

       = expr         create new column from Python expr, with column names,
                      and attributes, as variables
      g= expr         set current column for selected rows to result of Python
     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
      gi              set current column for selected rows to incremental
      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 eval‐
     g'               open a frozen copy of current sheet with all visible
                      columns evaluated
     z'  gz'          add/reset cache for current/all visible column(s)

      : 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
      * regex/subst   add column derived from current column, replacing regex
                      with subst (may include \1 backrefs)
     g*  gz* regex/subst
                      modify selected rows in current/all visible column(s),
                      replacing regex with subst (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)
      )               unexpand current column; restore original column and re‐
                      move other columns at this level
     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
     z|  z\ expr      select/unselect rows matching Python expr in any visible
      , (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; add to ex‐
                      isting sort criteria
     gz[  gz]         sort ascending/descending by all key columns; add to ex‐
                      isting 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.

   Editing Rows and Cells
       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
       f              fill null cells in current column with contents of non-
                      null cells up the current column
       e text         edit contents of current cell
      ge text         set contents of current column for selected rows to text

     Commands While Editing Input
        Enter  ^C        accept/abort input
        ^O  g^O          open external $EDITOR to edit contents of current/se‐
                         lected 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   autocomplete input (when available)
        Shift+Arrow      move cursor in direction of Arrow and re-enter edit

   Data Toolkit
      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 in format
                      determined by extension (default .tsv)
                      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 in format
                      determined by extension (default .tsv)
     ^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
      . (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

     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
         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 con‐
                            tained within canvas cursor
        gs  gt  gu          select/toggle/unselect rows on source sheet visi‐
                            ble on screen
         d                  delete rows on source sheet contained within can‐
                            vas cursor
        gd                  delete rows on source sheet visible on screen
         Enter              open sheet of source rows contained within canvas
        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
      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
         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
     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 sta‐
                      tus 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
      .  Directory Sheet             browse properties of files in a directory
      .  Plugins Sheet               browse, install, and (de)activate plugins
      .  Memory Sheet (Alt+Shift+M)        browse saved values, including

      .  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
      .  Melted Sheet (Shift+M)      unpivot non-key columns into
         variable/value columns
      .  Transposed Sheet (Shift+T)   open new sheet with rows and columns

   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
          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

   Plugins Sheet
     Browse through a list of available plugins. VisiData needs to be
     restarted before plugin activation takes effect. Installation may require
     internet access.
     (global commands)
        Space open-plugins
                         open the Plugins Sheet
     (sheet-specific commands)
        a                install and activate current plugin
        d                deactivate current plugin

   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
     (sheet-specific commands)
        e                edit either value or name, to edit reference

   Columns Sheet (Shift+C)
     Properties of columns on the source sheet can be changed with standard
     editing commands (e ge g= Del) on the Columns Sheet. Multiple aggregators
     can be set by listing them (separated by spaces) in the aggregators
     column. The 'g' commands affect the selected rows, which are the literal
     columns on the source sheet.
     (global commands)
        gC               open Columns Sheet with all visible columns from all
     (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 Ar aggregator No 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
         Enter           open a Frequency Table sheet grouped by column
                         referenced in current row

   Sheets Sheet (Shift+S)
     open Sheets Stack, which contains only the active sheets on the current
     (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  gI           open Columns Sheet/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 sheets(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
                         .  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
                         .  concat similar to 'append' but keep first sheet
                            type and columns
                         .  extend copy first selected sheet, keeping all rows
                            and sheet type, and extend with columns from other
                         .  merge  mostly keep all rows from first selected
                            sheet, except prioritise cells with non-null/non-
                            error values

   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

   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
     (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

   Frequency Table (Shift+F)
     A Frequency Table groups rows by one or more columns, and includes
     summary columns for those with aggregators.
     (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
     (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
         Enter           open a Frequency Table sheet grouped on column
                         referenced in current row
        zEnter           open copy of source sheet with rows described in cur‐
                         rent cell

   Pivot Table (Shift+W)
     Set key column(s) and aggregators on column(s) before pressing Shift+W on
     the column to pivot.
     (sheet-specific commands)
         Enter           open sheet of source rows aggregated in current pivot
        zEnter           open sheet of source rows aggregated in current pivot

   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

   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

     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.

     Options can also be set via the Options Sheet or a .visidatarc (see

     -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

     -f, --filetype=filetype      tsv                set loader to use for
                                  filetype instead of file extension
     -d, --delimiter=delimiter    \t                 field delimiter to use
                                  for tsv/usv filetype
     -y, --confirm-overwrite=F    True               overwrite existing files
                                  without confirmation
     -N, --nothing=T              False               disable loading
                                  .visidatarc and plugin addons
     --visidata-dir=str           ~/.visidata/       directory to load and
                                                     store additional files
     --mouse-interval=int         1                  max time between
                                                     press/release for click
     --null-value=NoneType        None               a value to be counted as
     --undo=bool                  True               enable undo/redo
     --col-cache-size=int         0                  max number of cache en‐
                                                     tries in each cached col‐
     --clean-names                False              clean column/sheet names
                                                     to be valid Python iden‐
     --default-width=int          20                 default column width
     --default-height=int         4                  default column height
     --textwrap-cells=bool        True               wordwrap text for multi‐
                                                     line rows
     --quitguard                  False              confirm before quitting
                                                     modified sheet
     --debug                      False              exit on error and display
     --skip=int                   0                  skip N rows before header
     --header=int                 1                  parse first N rows as
                                                     column names
     --load-lazy                  False              load subsheets always
                                                     (False) or lazily (True)
     --force-256-colors           False              use 256 colors even if
                                                     curses reports fewer
     --note-pending=str           ⌛                 note to display for pend‐
                                                     ing cells
     --note-format-exc=str        ?                  cell note for an excep‐
                                                     tion during formatting
     --note-getter-exc=str        !                  cell note for an excep‐
                                                     tion during computation
     --note-type-exc=str          !                  cell note for an excep‐
                                                     tion during type conver‐
     --scroll-incr=int            -3                 amount to scroll with
     --name-joiner=str            _                  string to join sheet or
                                                     column names
     --value-joiner=str                              string to join display
     --wrap                       False              wrap text to fit window
                                                     width on TextSheet
     --save-filetype=str          tsv                specify default file type
                                                     to save as
     --profile                    False              enable profiling on
     --min-memory-mb=int          0                  minimum memory to con‐
                                                     tinue loading and async
     --encoding=str               utf-8              encoding passed to
     --encoding-errors=str        surrogateescape    encoding_errors passed to
     --input-history=str                             basename of file to store
                                                     persistent input history
     --bulk-select-clear          False              clear selected rows be‐
                                                     fore new bulk selections
     --some-selected-rows         False              if no rows selected, if
                                                     True, someSelectedRows
                                                     returns all rows; if
                                                     False, fails
     --delimiter=str                                 field delimiter to use
                                                     for tsv/usv filetype
     --row-delimiter=str                             " row delimiter to use
                                                     for tsv/usv filetype
     --tsv-safe-newline=str                          replacement for newline
                                                     character when saving to
     --tsv-safe-tab=str                              replacement for tab char‐
                                                     acter when saving to tsv
     --visibility=int             0                  visibility level (0=low,
     --default-sample-size=int    100                number of rows to sample
                                                     for regex.split (0=all)
     --fmt-expand-dict=str        %s.%s              format str to use for
                                                     names of columns expanded
                                                     from dict (colname, key)
     --fmt-expand-list=str        %s[%s]             format str to use for
                                                     names of columns expanded
                                                     from list (colname, in‐
     --json-indent=NoneType       None               indent to use when saving
     --json-sort-keys             False              sort object keys when
                                                     saving to json
     --default-colname=str                           column name to use for
                                                     non-dict rows
     --filetype=str                                  specify file type
     --replay-wait=float          0.0                time to wait between re‐
                                                     played commands, in sec‐
     --replay-movement            False              insert movements during
     --rowkey-prefix=str          キ                 string prefix for rowkey
                                                     in the cmdlog
     --cmdlog-histfile=str                           file to autorecord each
                                                     cmdlog action to
     --confirm-overwrite=bool     True               whether to prompt for
                                                     overwrite confirmation on
     --safe-error=str             #ERR               error string to use while
     --clipboard-copy-cmd=str     xclip -selection clipboard -filter
                                                     command to copy stdin to
                                                     system clipboard
     --clipboard-paste-cmd=str    xclip -selection clipboard -o
                                                     command to send contents
                                                     of system clipboard to
     --fancy-chooser              False              a nicer selection inter‐
                                                     face for aggregators and
     --describe-aggrs=str         mean stdev         numeric aggregators to
                                                     calculate on Describe
     --histogram-bins=int         0                  number of bins for his‐
                                                     togram of numeric columns
     --numeric-binning            False              bin numeric columns into
     --regex-flags=str            I                  flags to pass to re.com‐
                                                     pile() [AILMSUX]
     --regex-maxsplit=int         0                  maxsplit to pass to
     --show-graph-labels=bool     True               show axes and legend on
     --plot-colors=str                               list of distinct colors
                                                     to use for plotting dis‐
                                                     tinct objects
     --zoom-incr=float            2.0                amount to multiply cur‐
                                                     rent zoomlevel when zoom‐
     --motd-url=str                                  source of randomized
                                                     startup messages
     --dir-recurse                False              walk source path recur‐
                                                     sively on DirSheet
     --dir-hidden                 False              load hidden files on
     --config=Path                /home/kefala/.visidatarc
                                                     config file to exec in
     --play=str                                      file.vd to replay
     --batch                      False              replay in batch mode
                                                     (with no interface and
                                                     all status sent to std‐
     --output=NoneType            None               save the final visible
                                                     sheet to output at the
                                                     end of replay
     --preplay=str                                   longnames to preplay be‐
                                                     fore replay
     --imports=str                plugins            imports to preload before
                                                     .visidatarc (command-line
     --nothing                    False              no config, no plugins,
                                                     nothing extra
     --unfurl-empty               False              if unfurl includes rows
                                                     for empty containers
     --incr-base=float            1.0                start value for column
     --csv-dialect=str            excel              dialect passed to
     --csv-delimiter=str          ,                  delimiter passed to
     --csv-quotechar=str          "                  quotechar passed to
     --csv-skipinitialspace=bool  True               skipinitialspace passed
                                                     to csv.reader
     --csv-escapechar=NoneType    None               escapechar passed to
     --csv-lineterminator=str                        " lineterminator passed
                                                     to csv.writer
     --safety-first               False              sanitize input/output to
                                                     handle edge cases, with a
                                                     performance cost
     --xlsx-meta-columns          False              include columns for cell
                                                     objects, font colors, and
                                                     fill colors
     --sqlite-onconnect=str                          sqlite statement to exe‐
                                                     cute after opening a con‐
     --fixed-rows=int             1000               number of rows to check
                                                     for fixed width columns
     --fixed-maxcols=int          0                  max number of fixed-width
                                                     columns to create (0 is
                                                     no max)
     --postgres-schema=str        public             The desired schema for
                                                     the Postgres database
     --http-max-next=int          0                  max next.url pages to
                                                     follow in http response
     --http-req-headers=dict      {}                 http headers to send to
     --html-title=str             <h2>{sheet.name}</h2>
                                                     table header when saving
                                                     to html
     --pcap-internet=str          n                  (y/s/n) if save_dot in‐
                                                     cludes all internet hosts
                                                     separately (y), combined
                                                     (s), or does not include
                                                     the internet (n)
     --xml-parser-huge-tree=bool  True               allow very deep trees and
                                                     very long text content
     --graphviz-edge-labels=bool  True               whether to include edge
                                                     labels on graphviz dia‐
     --npy-allow-pickle           False              numpy allow unpickling
                                                     objects (unsafe)
     --pdf-tables                 False              parse PDF for tables in‐
                                                     stead of pages of text
     --plugins-url=str            https://visidata.org/plugins/plugins.jsonl
                                                     source of plugins sheet
     --plugins-autoload=bool      True               do not autoload plugins
                                                     if False

     Display options can only be set via the Options Sheet or a .visidatarc
     (see FILES).

     disp_splitwin_pct   0                   height of second sheet on screen
     color_sidebar       black on 114 blue   color of sidebar
     disp_float_fmt      {:.02f}             default fmtstr to format for
                                             float values
     disp_int_fmt        {:d}                default fmtstr to format for int
     disp_note_none      ⌀                   visible contents of a cell whose
                                             value is None
     disp_truncator      …                   indicator that the contents are
                                             only partially visible
     disp_oddspace       ·                   displayable character for odd
     disp_more_left      <                   header note indicating more col‐
                                             umns to the left
     disp_more_right     >                   header note indicating more col‐
                                             umns to the right
     disp_error_val                          displayed contents for computa‐
                                             tion exception
     disp_ambig_width    1                   width to use for unicode chars
                                             marked ambiguous
     disp_pending                            string to display in pending
     color_note_pending  bold magenta        color of note in pending cells
     color_note_type     226 yellow          color of cell note for non-str
                                             types in anytype columns
     color_note_row      220 yellow          color of row note on left edge
     disp_column_sep     │                   separator between columns
     disp_keycol_sep     ║                   separator between key columns and
                                             rest of columns
     disp_rowtop_sep     │
     disp_rowmid_sep     ⁝
     disp_rowbot_sep     ⁝
     disp_rowend_sep     ║
     disp_keytop_sep     ║
     disp_keymid_sep     ║
     disp_keybot_sep     ║
     disp_endtop_sep     ║
     disp_endmid_sep     ║
     disp_endbot_sep     ║
     disp_selected_note  •
     disp_sort_asc       ↑↟⇞⇡⇧⇑              characters for ascending sort
     disp_sort_desc      ↓↡⇟⇣⇩⇓              characters for descending sort
     color_default       white on black      the default fg and bg colors
     color_default_hdr   bold                color of the column headers
     color_bottom_hdr    underline           color of the bottom header row
     color_current_row   reverse             color of the cursor row
     color_current_col   bold                color of the cursor column
     color_current_hdr   bold reverse        color of the header for the cur‐
                                             sor column
     color_column_sep    246 blue            color of column separators
     color_key_col       81 cyan             color of key columns
     color_hidden_col    8                   color of hidden columns on
     color_selected_row  215 yellow          color of selected rows
     disp_rstatus_fmt     {sheet.longname} {sheet.nRows:9d} {sheet.rowtype}
                                             right-side status format string
     disp_status_fmt     {sheet.shortcut}› {sheet.name}|
                                             status line prefix
     disp_lstatus_max    0                   maximum length of left status
     disp_status_sep      │                  separator between statuses
     color_keystrokes    bold 233 black on 110 cyan
                                             color of input keystrokes on sta‐
                                             tus line
     color_status        bold black on 110 cyan
                                             status line color
     color_error         red                 error message color
     color_warning       yellow              warning message color
     color_top_status    underline           top window status bar color
     color_active_status black on 110 cyan    active window status bar color
     color_inactive_status 8 on black        inactive window status bar color
     color_working       green               color of system running smoothly
     color_edit_cell     white               cell color to use when editing
     disp_edit_fill      _                   edit field fill character
     disp_unprintable    ·                   substitute character for unprint‐
     disp_currency_fmt   %.02f               default fmtstr to format for cur‐
                                             rency values
     disp_date_fmt       %Y-%m-%d            default fmtstr to strftime for
                                             date values
     disp_replay_play    ▶                   status indicator for active re‐
     disp_replay_pause   ‖                   status indicator for paused re‐
     color_status_replay green               color of replay status indicator
     disp_formatter      generic             formatter to use for display and
     disp_menu           True                show menu on top line when not
     disp_menu_keys      True                show keystrokes inline in sub‐
     color_menu          black on 110 cyan   color of menu items in general
     color_menu_active   223 yellow on black
                                             color of active menu items
     color_menu_spec     black on 34 green   color of sheet-specific menu
     color_menu_help     black italic on 110 cyan
                                             color of helpbox
     disp_menu_boxchars  ││──┌┐└┘├┤          box characters to use for menus
     disp_menu_more      »                   command submenu indicator
     disp_menu_push      ⎘                   indicator if command pushes sheet
                                             onto sheet stack
     disp_menu_input     …                   indicator if input required for
     disp_menu_fmt       Ctrl+H for help menu
                                             right-side menu format string
     disp_histogram      ■                   histogram element character
     disp_histolen       50                  width of histogram column
                                             charset to render 2x4 blocks on
     disp_pixel_random   False               randomly choose attr from set of
                                             pixels instead of most common
     color_graph_hidden  238 blue            color of legend for hidden attri‐
     color_graph_selected bold               color of selected graph points
     color_graph_axis    bold                color for graph axis labels
     color_add_pending   green               color for rows pending add
     color_change_pending reverse yellow     color for cells pending modifica‐
     color_delete_pending red                color for rows pending delete
     color_xword_active  green               color of active clue

     launch DirSheet for current directory

           vd foo.tsv
     open the file foo.tsv in the current directory

           vd -f ddw
     open blank sheet of type ddw

           vd new.tsv
     open 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

           vd postgres://username:password@hostname:port/database
     open a connection to the given postgres database

           vd --play tests/pivot.vd --replay-wait 1 --output tests/pivot.tsv
     replay tests/pivot.vd, 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 file does not exist

           vd sample.xlsx +:sheet1:2:3
     launch with sheet1 at top-of-stack, and cursor at column 2 and row 3

           vd -P open-plugins
     preplay longname open-plugins before starting the session

     At the start of every session, VisiData looks for $HOME/.visidatarc, and
     calls Python exec() on its contents if it exists. 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 defined in .visidatarc are available in python expressions
     (e.g. in derived columns).

     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
           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

        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 ).

           May include multiple tables. The initial sheet is the table
           directory; Enter loads the entire table into memory. z^S saves
           modifications to source.

     URL schemes are also supported:
        http (requires requests); can be used as transport for with another

     For a list of all remaining formats supported by VisiData, see

     In addition, .zip, .gz, .bz2, .xz, ,zstd, and .zst files are decompressed
     on the fly.

     VisiData was made by Saul Pwanson <[email protected]>.

Linux/MacOS                    January 11, 2023                    Linux/MacOS