You changed your mind about a tag. Maybe #project should have been #work all along. Or a client corrected their name spelling and now it's wrong in 300 notes. You press Cmd+H, ready to fix it — and Obsidian's replace bar says "Search and replace in current file."
One file. That's it.
This gap has frustrated the Obsidian community since 2020. The original feature request has over 260 likes and keeps growing. As one user put it:
"I think this is a key feature that seems core to a text editor." — sam.baron, Obsidian Forum
The good news: there are real solutions now. Some are plugins you install in a minute. Others involve external editors. And newer AI-powered tools let you describe what you want changed in plain English. The right choice depends on what you're trying to do — so let's start there.
Key Takeaways
- Obsidian has no built-in vault-wide replace — Cmd+H / Ctrl+H only works in the note you're editing
- Two community plugins handle vault-wide replacement, each with different strengths — one prioritizes speed, the other safety
- VS Code works as an external workaround but doesn't understand Obsidian's [[wikilinks]], so you can break connections
- Tag-specific changes have a dedicated solution in the Tag Wrangler plugin (873 GitHub stars)
- AI tools like Desktop Commander handle conditional, context-aware replacements that no plugin can — like "only replace in files tagged #draft"
Quick Reference: Which Tool for Which Job
Before diving into each option, here's the short answer:
| What you need to do | Best tool | Why |
|---|---|---|
| Fix a typo in a single note | Obsidian's built-in Cmd+H | Already there, no setup |
| Replace a word or phrase across your vault | Global Search and Replace plugin | Fast, regex support, stays inside Obsidian |
| Replace with a preview of every change | Find-n-Replace plugin | Shows each match, lets you pick which to change |
| Rename or merge tags vault-wide | Tag Wrangler plugin | Built specifically for tag operations |
| Advanced regex across files with filtering | VS Code (Cmd+Shift+H) | Powerful search, file pattern filtering |
| Conditional replacements ("only in draft files") | Desktop Commander | Natural language, reads file context before acting |
Now let's look at each approach in detail.
The Built-in Replace: What It Does and Where It Stops
Obsidian's native find-and-replace is easy to miss because it looks like it might work vault-wide. Open it with Cmd+H on Mac (Ctrl+H on Windows) or through the Command Palette by typing "replace."
It handles single-file replacements well. Swap a word, fix a date, clean up formatting — within the note you're editing, it's fine.
But the vault-wide Search panel (the left sidebar) is read-only. You can find text across every note in your vault using operators like file:, path:, tag:, and even regex — but there's no replace button. You can look, but you can't touch.
"There is currently no core Obsidian ways to search and replace." — smiggles, Obsidian Forum
This is the wall that sends people searching for alternatives.
Vault-wide Plugins: Two Options, Different Tradeoffs
The Obsidian community has built plugins to fill the gap. Both are worth knowing about — they solve different versions of the same problem. (For more community plugins that extend Obsidian, our roundup of the best Obsidian plugins covers the essentials.)
Global Search and Replace
The Global Search and Replace plugin was born directly from that 2020 feature request thread. Its creator, Mahmoud Fawzy Khalil, announced it in the forum after years of community demand. It now has over 52,000 downloads.
Install it: Settings > Community Plugins > search "Global Search and Replace" > Install > Enable.
How it works: Open the Command Palette, type "Global Search and Replace." A search box appears that works across every markdown file in your vault. It supports regex, case-sensitive matching, and special replacement patterns like $1 for capture groups.
The tradeoff: Speed over caution. There's no preview of what will change — you type the replacement, confirm, and it applies everywhere immediately. For straightforward swaps ("Johanson" to "Johansson"), this is fast and effective. For anything involving patterns that might match more than you expect, you're operating without a safety net.
Find-n-Replace
The Find-n-Replace plugin takes the opposite approach: safety over speed.
It shows every match before you commit. You can click individual results to include or exclude them. It supports file filtering (include/exclude patterns like VS Code), multiline matching, and search history. It works on all text-based files in your vault, not just .md.
Where it shines: When you need to see exactly what's about to change. Replace #project with #work and you'll see every match listed — including the ones you didn't expect, like #project-alpha appearing in the results.
The catch: It's newer (released late 2025) and its warning is direct: "This plugin directly modifies your vault files! All replace operations permanently change file contents." There's no undo beyond what you've backed up.
| Feature | Global Search and Replace | Find-n-Replace |
|---|---|---|
| Preview before replacing | No | Yes |
| Select individual matches | No | Yes (Ctrl/Cmd+click) |
| File include/exclude filters | No | Yes |
| Regex support | Yes | Yes |
| Multiline matching | No | Yes |
| Search history | No | Yes (configurable) |
| Downloads | 52,000+ | New (2025) |
| Non-.md files | No | Yes |
When Tags Are the Problem: Tag Wrangler
A huge portion of "search and replace" requests in Obsidian are actually about tags. Someone synced highlights from Readwise and ended up with thousands of #orange and #pink tags scattered across their vault. Or they want to restructure #project into #work/project.
"Having synced my Obsidian with highlights from readwise, I now have tags from those highlights in Obsidian, many thousands of 'orange', 'pink' etc" — drjasonclark, Obsidian Forum
For tag-specific operations, Tag Wrangler is the tool. With 873 GitHub stars, it's the most popular plugin in this space. Right-click any tag in the sidebar and you can rename it — across every file in your vault. It handles subtags, merges, and hierarchical restructuring.
The key advantage: Tag Wrangler understands what a tag is. A generic find-and-replace would change #project inside a heading like ## Project Overview, which isn't a tag at all. Tag Wrangler uses Obsidian's own parser to identify real tag instances and only touches those.
The VS Code Workaround (and Why It's Risky)
In nearly every forum thread about vault-wide replace, someone recommends VS Code within the first three replies:
"If you install Code from Microsoft you can use Ctrl - Shift - H to search and replace I believe." — b83s, Obsidian Forum
The steps are simple: open VS Code, go to File > Open Folder, pick your vault, and press Cmd+Shift+H (Mac) or Ctrl+Shift+H (Windows). You get regex support, file filtering by pattern, and a full preview of every match.
It works well for plain text. Fixing a misspelled word, updating a URL, standardizing a date format — VS Code handles these cleanly.
It doesn't understand Obsidian. This is where people get burned. Change "Meeting Notes" to "Meetings" and VS Code dutifully updates every file — including inside [[Meeting Notes]] links that other notes use. Obsidian won't know those links changed, so they all break silently. You might not notice for weeks, until you click a link and land on an empty page. (Our guide to Obsidian's markdown syntax explains how these links work under the hood.)
If you use VS Code for replacement, always check your wikilinks afterward. The core plugin "Outgoing Links" will show broken references in whatever note you're viewing.
Try Desktop Commander App
Desktop Commander reads your files, runs commands, and automates workflows — all in natural language.
Desktop Commander AI Approach to Search and Replace in Obsidian
All the tools above share a limitation: they can only match patterns. They can find text that looks like what you typed and replace it with what you told them. But they can't reason about what they're doing.
Here's what that means in practice. Say you want to:
- Replace #todo with #review — but only in files that have status: draft in their frontmatter
- Change [[Meeting Notes]] to [[Meetings]] across your vault — and update both the filename and every link pointing to it
- Fix a name everywhere — but skip code blocks and quotes
None of those are "find and replace" operations. They require reading each file, understanding its structure, making a judgment call, and then applying the right change. That's where Desktop Commander fits in.
Desktop Commander connects AI directly to the files on your machine. Your Obsidian vault is just a folder of markdown files — Desktop Commander can read all of them, understand their structure, and apply exactly the changes you describe. It works through something called an MCP server, which gives the AI direct access to your filesystem.
What conditional replacement looks like
Instead of typing regex patterns, you describe what you want in plain English:
Replace a tag only in certain files:
"Find every file in my Obsidian vault with 'status: draft' in the frontmatter. In those files only, replace #todo with #review. Leave #todo-later and #todolist alone."
Convert link formats with context awareness:
"Change all wikilinks like [[Note Name]] to markdown links like [Note Name](Note Name.md). If a link has display text like [[Note Name|click here]], keep the display text as the link label."
Clean up imported content:
"I imported from Readwise and now have thousands of color tags. Remove every instance of #orange, #pink, #yellow, and #blue from all files. Don't remove any other tags."
Each of these would require a different regex pattern in a traditional tool — and some (like the frontmatter-conditional replacement) aren't possible with regex at all. With Desktop Commander, the AI reads each file, evaluates whether it matches your criteria, and makes precise edits.
Getting started
- Download Desktop Commander — available as a native app for macOS and Windows
- Point it at your vault folder
- Describe what you want to change
- Review the proposed changes before confirming
The prompt library has ready-made templates for common Obsidian vault tasks. For a deeper look at how AI handles vault organization beyond search and replace, see our guide to managing your Obsidian knowledge base with AI.
Protecting Your Vault Before Bulk Changes
Whatever tool you use, bulk changes deserve a safety net. A few minutes of preparation can save hours of recovery:
Turn on File Recovery. Settings > Core Plugins > File Recovery. Obsidian will keep snapshots of your notes, so you can roll back individual files if something goes wrong.
Make a backup. Copy your vault folder somewhere else. If you use git (even basics), initialize it in your vault:
git init
git add .
git commit -m "backup before bulk replace"
One command rolls everything back if you need it.
Preview first. Whether it's Find-n-Replace's match list, VS Code's diff view, or Desktop Commander's proposed changes — look before you confirm. This is the single best habit for vault maintenance, and it's one reason building a proper knowledge management system includes documenting your change process.
Try Desktop Commander App
Desktop Commander reads your files, runs commands, and automates workflows — all in natural language.
Community Discussions Worth Reading
Vault-wide find and replace has been one of Obsidian's most discussed missing features for years. These threads capture the full picture — workarounds, plugin announcements, and the creative solutions people have built:
- Global (Mass / Vault-wise) Search & Replace — The original 2020 feature request with 260+ votes. Five years of community discussion, including the announcement of the Global Search and Replace plugin.
- Vault-wide Find and Replace? — A concise thread showing the workarounds people stitch together, from VS Code to plugin combinations.
- How to Find and Replace a Tag in All Documents — Focused on the tag replacement problem, with a user dealing with thousands of unwanted Readwise color tags.
- Best Way to Replace Notes with Regex? — For users who need pattern matching and keep running into plugin limitations.
- Implement Regex Search and Replace Within Files — A feature request thread where users note that "existing plugins are broken or unmaintained."