For the Settings Reference, go here.


1. Calling Commands
2. Go To
3. Standard Editing Tools
4. Selecting Cells
5. Editing Cells
6. Moving Data
7. Deleting Data
8. Duplicating Data
9. Inserting Rows and Columns
10. Finding and Replacing Data
11. Headers
12. Sorting Data
13. Filtering Data
14. Hiding and Showing Data
15. Miscellaneous Data Manipulation
16. Read-Only Mode
17. Preferences
18. Delimiters and Character Encodings
19. Showing or Hiding UI Features
20. Changing the Theme
21. Contacting Us
22. Frequently Asked Questsions (FAQ)

Calling Commands

There are four ways to call commands:

1. Command Launcher
2. Menu Bar
3. Keyboard Shortcuts
4. Right-click

1. Command Launcher

Command Launcher

ctrl+l or ctrl+shift+p
The command launcher allows you to quickly call commands by just typing. It uses fuzzy search, so your typing doesn't even have to be that accurate.

Menu Bar

The menu bar at the top of the window contains almost all commands.

3. Keyboard Shortcuts

Most commands you'll use on a regular basis have keyboard shortcuts. You can find out what these are by perusing the command launcher or the menu bar. You can also change them with the Edit Keyboard Shortcuts command.

4. Right-click

right-click Menu

Right-clicking on the table will bring up some helpful commands.

Go To

There are two navigation commands:

1. Go To File
2. Go To Cell

1. Go To File

Go To File

ctrl+p or ctrl+t
Only files that are already open or that are in a folder that's open will show up in the list. To open a file not on the list, you can either open its folder or use ctrl+o.

2. Go To Cell

Go To Cells

More specific instructions pop up with the command itself.

Standard Editing Tools

Modern CSV does the standard copy, cut, and paste commands (ctrl+c, ctrl+x, and ctrl+v). It also has undo and redo for most commands (ctrl+z and ctrl+y).

Selecting Cells

Selecting a single cell

Click on a cell.
Use the arrow keys to move the selection to a cell.
alt+i, alt+j, alt+k, and alt+l- Use these to spare the 200 ms it takes to move your wrist to the arrow keys.
ctrl+g or Go To Cell. It'll tell you what to do from there.

Selecting multiple cells

left-click and drag.
ctrl+left-click on a cell that's not already selected.
shift+arrow to add one cell to the selection.
ctrl+shift+arrow to select over to the next block edge.
ctrl+shift+r to select the whole row.
ctrl+shift+c to select the whole column.
ctrl+shift+t or ctrl+a to select the whole table.
left-click on the row or column label.
left-click on the top left corner button between the row and column labels.

Once you select multiple cells, you can move them around just like single cells (i.e. arrows or alt+[i|j|k|l]). Most commands work on multiple cells.



The orange cell is the main selected cell or main cell. The yellow cells are the secondary selected cells.

Editing Cells

Multi-cell Editing

There are numerous ways to edit cells:

1. Overwrite currently selected cells.
2. Edit selected cell without overwriting.
3. Fill selected cells with series.
4. Prepend or Append to multiple cells.

Additionally, you can either edit directly in the cell or use the Editor Pane.

1. Overwrite currently selected cells

Overwrite Currently Selected Cells

Just start typing. This works with multiple cells selected.

2. Edit selected cell without overwriting

Append to Selected Cell

ctrl+e or Edit Selected Cell
This only works when one cell is selected.

3. Fill selected cells with series

Fill Selected Cells with Series

ctrl+alt+n or Fill Selected Cells with Series
This is useful for, say, incrementing numbers. Further instructions will show up with the command.

4. Prepend or append to multiple cells

Append to Multiple Cells

Prepend Cell Contents
Append Cell Contents
If you have multiple cells selected, it will ask you whether you want to add the same text to each cell or add a series of differing values.

The Editor Pane

Editor Pane


With the Editor Pane, you can see more clearly the cell contents. Unlike the direct cell editor, you can also insert new lines with enter and tab characters with tab. enter and tab are normally used to navigate across cells. If you want them to still behave that way even while editing in the Editor Pane, just disable the Let Editor Pane Consume Navigation Keystrokes command in the Settings.

Moving Data

The alt key is used for data moving operations. You can move individual cells, entire rows and columns, and even the entire table.

Individual cells

Moving Individual Cells

alt+arrow or Move Cell Contents [Up|Down|Left|Right]
To drag and drop cells with the mouse, shift+click on the selected cells and drag them wherever you want.

Rows or columns

Moving Rows or Columns

alt+shift+arrow or Move [Row(s)|Column(s)] [Up|Down|Left|Right]

Moving Rows or Columns

To drag and drop rows or columns with the mouse, shift+click on the row/column lables and drag them wherever you want.

Deleting Data

You can do the following:

1. Clear cell contents
2. Remove rows and columns
3. Remove duplicate rows and columns
4. Remove empty rows and columns

1. Clear cell contents

Clearing Cell Contents

delete or backspace or Clear Cell Contents

2. Remove rows and columns

Removing Rows and Columns

Rows: ctrl+shift+k or Remove Row(s).
Columns: ctrl+shift+l or Remove Column(s).
To clear a row or cell of its contents without removing it, select it and use delete or backspace.

3. Remove duplicate rows and columns

Removing Duplicate Rows and Columns

Rows: Remove Duplicate Rows
Columns: Remove Duplicate Columns

4. Remove empty rows and columns

Removing Empty Rows and Columns

Rows: Remove Empty Rows
Columns: Remove Empty Columns

Duplicating Data

ctrl+alt duplicates data, whether it be individual cells or entire rows and columns.

Duplicate individual cells

Duplicating Cells

ctrl+alt+arrows or Duplicate Selected Cell Contents [Up|Down|Left|Right]

Duplicating Cells with the Middle Mouse Button

You can also duplicate cells with the mouse. Press the middle mouse button down over a cell and move the mouse in the direction you want.

Duplicate rows and columns

Duplicating Rows and Columns

Rows: ctrl+alt+r or Duplicate Row(s)
Columns: ctrl+alt+c or Duplicate Column(s)

Inserting Rows and Columns

Inserting Rows and Columns

Rows: alt+r or Insert Row(s)
Columns: alt+c or Insert Column(s)

Finding and Replacing Data

Finding and Replacing Data

Find window: ctrl+f or Find
Replace window: ctrl+h or Replace
esc closes both of them.

The option buttons are at the top. Here they are from left to right:

Button Option Keyboard Shortcut
Case Sensitive Case Sensitive alt+a
Regular Expressions Regular Expressions alt+/
Match Whole Word Match Whole Word alt+w
Match Whole Cell Match Whole alt+e
Match Only Match Only in Selected Cells alt+s
Highlight Matches Highlight Matches alt+h
Preview Replace Preview Replace alt+p

If you open Find/Replace while multiple cells are selected, the Match Only in Selected Cells option is automatically selected.


Modern CSV allows you to define header rows and/or columns for your data. It's typical to have the first row of a CSV be the data labels and the rest be the actual data. For that reason, there is one header row by default. However, you can set as many header rows and columns as you want.

Headers are used for the following purposes:

1. Highlight them so they stand out (or not).
2. Freeze them so they're always visible (or not).
3. Separate them from the data so they're not effected by sort and filter operations.

Setting number of header rows or columns

Set Number of Header [Rows|Columns] (Menu, Command Launcher)
Set Headers to Selected Cell (Menu, Command Launcher or right-click menu)
Set Header [Rows|Columns] to Selected [Row|Column] (Menu, Command Launcher or right-click menu)

In the menu, they're found under View->Headers.

These commands will change it only for the table you're currently working on. To change it for all tables, currently opened or new, change it in the Settings file under Number of Header [Rows|Columns].

Highlighting or Unhighlighting header rows and columns

Highlighting or Unhighlighting Header Rows and Columns

Toggle Highlight Header [Rows|Columns]

Freezing or unfreezing header rows and columns

Freezing or Unfreezing Header Rows and Columns

Toggle Freeze Header Rows and Columns
Toggle Freeze Header [Rows|Columns]

Sorting Data

Data can be sorted either by columns or rows, either ascending or descending. It sorts based on the data in the main selected row or column. The headers won't be sorted.

Sorting does work in read-only mode.

Sorting Columns

Double-click on the row or column labels.
Sort Selected [Row|Column]- Ascending
Sort Selected [Row|Column]- Descending

ctrl+z undoes a sorting operation.

Filtering Data

Data can be filtered, either by rows or columns. That means it only keeps columns or rows that pass the filter criteria. The headers won't be filtered.

Filtering is subject to the undo and redo commands (ctrl+z and ctrl+y). However, it will not change the underlying data when you save the file.

To delete the filtered out data, use the Remove All Filtered Out and Hidden Data command. To save the filtered in data (i.e. what's shown on the table) into a separate file, use the Save Visible Data As command.

Filtering does work in read-only mode.

Adding filters

Adding Filters

Add Filter
Filter Selected [Row|Column]
Filter Selected [Row|Column] with Selected Cell Contents

Viewing and editing filters

View and Edit Filters

View/Edit Filter(s)

Removing filters

Remove Filters

Remove Individual Filter(s)
The Remove All Filters command removes all filters.

Filter Syntax

When you add or edit a filter, the program gives you filter syntax instructions. They are repeated here:
Operator Meaning Examples
* Wildcard abc* matches abcdef.
| and & OR and AND *abc*&*def*|*ghi matches def123abc or ghi but not abc or def.
! NOT (exclude from search) !*abc* matches def but not abcdef.
< and > LESS THAN and GREATER THAN <50 matches 30, but not 70.
<= and >= LESS THAN OR EQUAL and GREATER THAN OR EQUAL 50+ matches 50 and 70, but not 30
+ or - (after a number) LESS THAN OR EQUAL or GREATER THAN OR EQUAL (alternative) 50+ matches 50 and 70, but not 30.
- (between two numbers) BETWEEN (inclusive) 0-10 matches 0, 4.2, and 10, but not 12 or -3.
\ Escape character \\, \*, \|, \&, \<, \>, \+, or \-.

Matching is case insensitive. Spaces before and after filter strings are ignored.

Hiding and Showing Data

You can hide rows or columns without deleting the data. Use one of the following commands:

Hide Selected Row(s)
Hide Selected Column(s)
Hide Empty Row(s)
Hide Empty Column(s)

Hide Empty Row(s) and Hide Empty Column(s) do not require the headers to be empty.

To show the hidden rows/columns again, use the following commands:

Show Hidden Row(s) in Selection
Show Hidden Column(s) in Selection
Show Empty Row(s)
Show Empty Column(s)
Show All Hidden Row(s)
Show All Hidden Column(s)

For the Show Hidden Row(s)/Column(s) in Selection commands, you have to select the surrounding rows/columns first. For instance, if you hide column 3 and want to show it again, select columns 2 and 4, then call the Show Hidden Column(s) command.

To delete the hidden data, use the Remove All Filtered Out and Hidden Data command. To save the shown data (i.e. what's not hidden) into a separate file, use the Save Visible Data As command.

Hiding and Showing Columns

Miscellaneous Data Manipulation

This section covers the following commands:

1. Transposition
2. Case Conversion
3. Joining Cells
4. Splitting Cells
5. Trimming Cells
6. Converting Date/Time Format

1. Transposition

You can transpose entire tables or individual ranges.

Entire Tables

Transpose Table

ctrl+t or Tranpose Table

Individual Ranges

Transpose Selection

Transpose Selected Cells

2. Case Conversion


UPPER CASE: ctrl+k,ctrl+u or Upper Case
lower case: ctrl+k,ctrl+l or Lower Case
Title Case: Title Case
UpperCamelCase: Upper Camel Case
lowerCamelCase: Lower Camel Case
UPPER_UNDERSCORE_CASE: Upper Underscore Case
lower_underscore_case: Lower Underscore Case

3. Joining (Concatenating) Cells

Joining (Concatenating) Cells

Join Selected Cells Horizontally
Join Selected Cells Vertically

4. Splitting Cells

Splitting Cells

Split Selected Cells Horizontally
Split Selected Cells Vertically

5. Trimming Cells

You can remove the spaces before and after the non-space characters with Trim Selected Cell(s).

6. Converting Date/Time Format

You must specify the current date/time format ("From") and the new date/time format ("To").

Converting Date/Time Format

Convert Date/Time Format

Date/Time Format Options

For both the "From" and the "To" part, there are several options:
Option Example Notes
Enter Custom Format MMM. d, yyyy h:m ap -> Apr. 10, 2020 8:57 AM Syntax is described in the program and below.
ISO 8601 Format 2020-04-10T08:57:02Z For "From", T and Z are optional and milliseconds are allowed. For "To", the format will be the same as the example.
ISO 8601 Format (date only) 2020-04-10
Unix Epoch Time (seconds) 1586509063 Number of seconds since January 1, 1970, 00:00:00 UTC (excluding leap seconds).
Unix Epoch Time (milliseconds) 1586509063578 Number of milliseconds since January 1, 1970, 00:00:00 UTC (excluding leap seconds).
Excel Format 43931.3729166667 Number of days since January 1, 1900.

Date/Time Custom Format Syntax

The following instructions are shown in the program. Example date/time is April 4, 2020, 5:03:09.372 AM.

Year yy (20), yyyy (2020)
Month M (4), MM (04), MMM (Apr), MMMM (April)
Day d (8), dd (08), ddd (Wed), dddd (Wednesday)
Hour h (5), hh (05), H (5, 24 hour clock only), HH (05, 24 hour clock only)
Minute m (3), mm (03)
Second s (9), ss (09)
Millisecond z or zzz (372)
AM/PM AP or A (AM), ap or a (am)

Use double quotes for text you don't want parsed. Escape character is \.
Example: yyyy-MM-dd h:mm:ss.zzz AP -> 2020-04-08 5:03:09.372 AM

Read-Only Mode

Read-Only Mode

Some files are very large and you may want to simply view them without having to wait minutes or use up all of your computer's memory. In such cases, you can open the files in read-only mode. It loads more quickly than edit mode (which already is pretty quick) and uses very little memory.

Though you can't edit the data, you can sort and filter it. You can't save the file, but you can save the result of the sorting and filtering to a new file by using the Save Visible Data As command. This command also works in edit mode.

Read-only mode doesn't load the file into memory. Rather, it indexes the file so it can quickly find each cell. Any time it needs to read a cell, it references the indexing data and reads it directly from the file on disk.

Note that Modern CSV can handle up to two billion rows or columns (Well, technically it's 2,147,483,647. It's a 32-bit thing).

There's probably no benefit to opening small files in read-only mode unless you want to protect them from accidental editing. At the same time, you probably want to have the option of opening exceptionally large files in read-only mode. For that reason, the Minimum File Size for Read-Only Mode Query (MB) setting exists. By default, it's set to 100 MB. That means it will automatically open any file less than 100 MB in edit mode. For larger files, it will ask whether you want to open in edit or read-only mode.

At any time, you can change an already open file back and forth between edit and read-only modes with the Toggle Read-only command. Note that it will close the file and reload it from scratch in its new mode.


Here are the three preference files and the commands to open them:

1. Settings- Edit Settings
2. Keyboard Shortcuts- Edit Keyboard Shortcuts
3. File Extension Options- Edit File Extension Options

1. Settings (Edit Settings)

Make your changes in the User Value. If the User Value entry is blank, it'll use the default value. Once you save the file, the changes will immediately apply to all files opened currently or in the future.

Do not change the setting names in the Setting column. You can, however, move rows and columns as you wish.

The Scope column is informative and editing it will make no difference. It tells you whether the command has Global scope or Table scope. With Global scope, changes apply to the whole program immediately. With Table scope, changes only apply to new tables that are created or opened. Changes won't apply to already opened tables. If you want to change a setting with Table scope on an already open file, open the file and use that setting's command (see Settings reference here.

Like the Scope column, the Type and Default Value columns are informative.

Settings File

2. Keyboard Shorcuts (Edit Keyboard Shortcuts)

Make your changes in the User Shortcut. If the User Shortcut entry is blank, it'll use the default value. Once you save the file, the changes will immediately apply. The Default Shortcut column is informative and changing it will make no difference. Do not change the command names in the Command column. You can, however, move rows and columns as you wish.

Keyboard Shortcuts File

3. File Extension Options (Edit File Extension Options)

In this file, you can define which delimiters, character encodings, and parsing standards are associated with which file extensions. If an extension's character encoding isn't defined in this file, it either uses auto-detect if the Auto-Detect Delimiter setting is true (which it is by default) or it defaults to comma. The delimiter preference set here overrides the Auto-Detect Delimiter setting. If an encoding isn't defined, it defaults to UTF-8. If a parsing standard isn't defined, it defaults to RFC 4180.

In setting the character encoding, you may wish to use the List Character Encodings command. It'll list all of the available encodings and if you choose one, it'll copy it to the clipboard which you can then paste in the Encoding column.

File Extension Options File

Delimiters and Character Encodings

You can define delimiters and character encodings for a given file extension in the File Extension Options file as described here. The default character encoding for file extensions not defined in the File Extension Options file is UTF-8. If the Auto-Detect Delimiter feature is turned on (which it is by default), then it automatically detects the delimiter unless the file extension's delimiter is defined in the File Extension Options file.

You can also change handle delimiters and encodings for individual files. If you need to reload a file and parse it with a different delimiter or character encoding, you can use the Reload File with Delimiter and Reload File with Encoding commands. If you want to save the current file with a different delimiter or in a different encoding, you can use the Set Delimiter for File Save and Set Encoding for File Save commands. You can access these commands from status bar. Just click on the Delimiter and Encoding labels.

Status Bar- Delimiter and Encoding Labels

Showing or Hiding UI Features

Showing/Hiding UI Features

Side bar: ctrl+k,ctrl+b
Tab bar: ctrl+k,ctrl+t
Menu bar: ctrl+k,ctrl+m
Editor box: ctrl+k,ctrl+e

Changing the Theme

Changing the Theme

Set Theme
Modern CSV currently has a light theme and a dark theme.

Contacting Us

Please contact us if you find a bug, have a question, want to request a new feature, feel like doing us a solid and taking a survey, or for any other reason. All of these options are under the Contact Us menu or can be invoked with the following commands:

Report a Bug
Request a Feature
Take a Survey
General Feedback/Questions

Frequently Asked Questions (FAQ)

How do I filter out all rows with empty cells in a column?

Filter the column using filter phrase !. The ! means "NOT" and there's emptiness after it, so it means "NOT empty". You can also filter out non-empty rows by simply leaving the filter phrase blank.

If it appears to leave some rows with empty cells, those cells may have spaces. You can select them and check the cell lengths in the status bar. The Trim Selected Cell(s) command can remove them.

I filtered a file. How do I save the result to a new file?

Use the Save Visible Data As command. This is new in version 1.3.26, so you'll need to upgrade if you're using an older version.

How do I get Convert Date/Time Filter to work?

You'll need to enter a format for both the current date/file format and the new one (it does not guess the current format because of the possiblity of mixing up months, days, and years). If you have a custom format, be sure to select the Enter Custom Format option first.

Also, be sure the "From" format matches the current date/time format. If not, it won't make any changes.

I made a change to the Settings or Keyboard Shortcuts file but it didn't stick.

In the Settings file, make sure you set your preference under the User Value column and not the Default Value column.

In the Keyboard Shortcuts file, edit the User Shortcut column rather than the Default Shortcut column.

Also, be sure to save the file. The settings will apply immediately.

I used the Set Theme command to change the theme, but it reverted back next session.

That will be fixed shortly. For now, open the Settings file (Edit Settings command), go down to the row for Theme, and type light or dark under the User Value shortcut. Save the file and the cange will apply immediately (if it doesn't, reference the previous question).

How do I sort dates and times?

It depends on how your date/time strings are formatted. If they're in ISO 8601, Unix Epoch, or Excel formats, you can sort them like you would anything else. Likewise if they're in a format with the following order from left to right: year, month (numbers only, not names), day, hour, minute, AM/PM, second, millisecond.

If they're in some other format, you can do the following:

  1. Duplicate the column (ctrl+alt+c for Windows and Linux, cmd+alt+c for Mac).
  2. Convert the new column to ISO 8601, Unix Epoch, or Excel format using the Convert Date/Time Format command.
  3. Sort the new column.
  4. Delete the column (ctrl+shift+L on Windows and Linux, cmd+shift+L on Mac).