Merge multiple lists into one

Concatenate two or more `#`-separated lists into a single flat list. Preserves block order - List 1 items first, then List 2, etc. Toggle Dedupe to collapse duplicate values across the merged output (first-occurrence wins). For item-by-item pairing across two lists instead of concatenation, use Zip two lists.

Input
Ready
Output
Live

Block concatenation with optional dedupe

The parser splits input on `# List` header lines and collects items per block. With Dedupe off, the op is a simple flatten: every item from every block, in block order, duplicates and all. With Dedupe on (default), a first-occurrence Set is used to drop repeats across the merged stream.

Order is deterministic: list 1 first, then list 2, and so on. Within each block, the original input order is preserved. When Dedupe drops a repeat, the first occurrence (from whichever block it appeared in first) is the one kept.

Case sensitive (off by default) controls the dedupe compare key and only matters when Dedupe is on. Off: `Apple`, `APPLE`, `apple` collapse to one entry. On: each case variant is kept separately.

How to use merge multiple lists into one

  1. 1Paste two or more lists into the input panel
  2. 2Separate lists with `# List 1`, `# List 2`, ... headers
  3. 3Leave Dedupe on (default) to collapse duplicates across blocks
  4. 4Toggle Case sensitive to treat case variants as distinct during dedupe
  5. 5Output: every list concatenated in block order

Keyboard shortcuts

Drive ListShift without touching the mouse.

Shortcut Action
Ctrl ZUndo last input change
Ctrl Shift ZRedo
Ctrl Shift EnterToggle fullscreen focus on the editor
EscExit fullscreen
Ctrl KOpen the command palette to jump to any tool
Ctrl SSave current pipeline draft Plus
Ctrl PRun a saved pipeline Plus

What this tool actually does

Flatten N `# List N` blocks into one, optionally deduped.

Two-or-more-list input

A single block returns empty with a status-bar note. Two or more blocks merge in the order they appear.

Block-order output

List 1 items first, then list 2, and so on. Within each block, original input order is preserved - merge is a concatenate, not a sort.

Dedupe on by default (first-occurrence wins)

With Dedupe on, repeated values are dropped on second encounter; the first occurrence (wherever it was) stays. Turn off to keep every line including duplicates.

Case-insensitive dedupe by default

Only matters when Dedupe is on. Off (default): `Apple` and `apple` collapse. On: kept as two distinct entries.

Whitespace is significant

Trim is not an option. ` apple` and `apple` are distinct under the dedupe compare. Chain trim first if that matters.

Worked example

Three lists merged with Dedupe on: `Apple` in list 2 and `Banana` in list 3 drop as repeats; first occurrence in list 1 wins.

Input
# List 1
Apple
Banana
# List 2
Orange
Apple
# List 3
Grape
Banana
Output
Apple
Banana
Orange
Grape

Settings reference

How each option shapes the output using the sample above.

Setting What it does Effect on the sample
Dedupe: on (default) Drops repeats across the merged stream; first-occurrence wins 4 items: `Apple`, `Banana`, `Orange`, `Grape`
Dedupe: off Keeps every item from every block, including duplicates 6 items: `Apple`, `Banana`, `Orange`, `Apple`, `Grape`, `Banana`
Case sensitive: off (default) `Apple` = `apple` during dedupe No effect on this sample (casing already matches)
Case sensitive: on Case variants count as distinct during dedupe Would keep `Apple` and `apple` as separate items if present
Single list (no `# List` header) Returns empty output Status bar: "Paste two or more lists separated by `# List X` headers"

FAQ

How do I separate the input lists?
Use header lines starting with `# List` followed by any label. The parser splits on those and treats each block as one list.
What happens to duplicates when Dedupe is on?
First-occurrence wins. If `Apple` appears in list 1, then again in list 2, the list-1 `Apple` stays and the list-2 one drops. That keeps the output order predictable.
When do I want Dedupe off?
When you need every item preserved - e.g. combining event logs where duplicate events matter, or tallying submissions where one person voting twice matters. Otherwise Dedupe on is usually what you want.
How is this different from Find common / Find distinct?
Merge concatenates. Find common items intersects (kept iff in every list). Find distinct items keeps items unique to exactly one list. Merge is the additive version.
How is this different from Zip?
Zip pairs items positionally (list1[i] + list2[i]) into combined rows. Merge just stacks blocks end-to-end. Pick zip for parallel datasets, merge for sequential concatenation.