Diacritics-Free Search
unlistedby Saleh Penhos
Search and replace ignoring diacritics — Hebrew nikud, Arabic tashkil, Latin accents, and more. Works in active note and vault-wide.
✨ Diacritics-Free Search
Search and replace text ignoring diacritical marks in Obsidian
Hebrew nikud · Arabic tashkil · Latin accents · Greek polytonic · Any Unicode combining mark
The Problem
If your notes contain vocalized Hebrew like בְּרֵאשִׁית, searching for בראשית (without vowels) won't find it. The same happens with café vs cafe, Arabic بِسْمِ vs بسم, and any other diacritical marks.
Diacritics-Free Search solves this by making all diacritics transparent during search — type without marks and find text that has them.
Search query: בראשית → Finds: בְּרֵאשִׁית ✓
Search query: cafe → Finds: café ✓
Search query: بسم → Finds: بِسْمِ ✓
Features
🔍 Local Search — Find & Replace in Current Note
| Shortcut | Option + F |
| Behavior | Opens a search bar at the top of the active note (Chrome-style) |
Capabilities:
- Real-time highlighting — All matches highlighted in yellow; current match in orange
- Match navigation — Use ▲▼ buttons or Enter / Shift+Enter to jump between matches
- Scrollbar markers — Yellow ticks on the scrollbar show where matches are (clickable!)
- Replace one / Replace all — Replace the current match or all matches at once
- Case sensitivity toggle — Click "Aa" to switch between case-sensitive and insensitive
- Remembers last search — Reopen the bar and your previous query is still there
- Escape to close — Press Esc from anywhere (even while editing) to dismiss
🌐 Global Search — Search Entire Vault
| Shortcut | Shift + Option + F |
| Behavior | Opens a modal to search across all markdown files in your vault |
Capabilities:
- Vault-wide search — Scans every
.mdfile in your vault - Highlighted context — Shows the matching line with the found text highlighted
- Click to navigate — Click any result to open the file and jump to the exact match
- Match count per file — See how many matches each file contains
- Global Replace All — Replace a term across all files in one click
- Debounced input — Waits 300ms after you stop typing to avoid lag on large vaults
🎯 How Matching Works
The plugin uses Unicode NFD normalization to decompose characters, then removes all combining marks (Unicode category Mn):
| Original | Normalized | Script |
|---|---|---|
| בְּרֵאשִׁית | בראשית | Hebrew (nikud + cantillation) |
| café | cafe | Latin (acute accent) |
| بِسْمِ ٱللَّهِ | بسم الله | Arabic (tashkil) |
| naïve | naive | Latin (diaeresis) |
| Ἀθῆναι | Αθηναι | Greek (polytonic) |
| résumé | resume | Latin (multiple accents) |
| über | uber | Latin (umlaut) |
💡 Both sides are normalized — if you search with diacritics, it still matches text without them (and vice versa).
⌨️ Keyboard Shortcuts
| Action | Shortcut |
|---|---|
| Open local search | Option + F |
| Open global search | Shift + Option + F |
| Next match | Enter or ▼ button |
| Previous match | Shift + Enter or ▲ button |
| Close search | Esc (works from anywhere) |
| Replace current | Enter in replace field |
Both commands are also available via the Command Palette (Cmd + P).
🗂️ Supported Scripts
| Script | Example | What's stripped |
|---|---|---|
| 🇮🇱 Hebrew | בְּרֵאשִׁית → בראשית | Nikud, cantillation marks |
| 🇸🇦 Arabic | بِسْمِ → بسم | Tashkil / harakat |
| 🇫🇷 Latin | café → cafe | Accents, umlauts, cedillas, tildes |
| 🇬🇷 Greek | Ἀθῆναι → Αθηναι | Polytonic accents, breathings |
| 🇷🇺 Cyrillic | й → и | Combining breve |
| 🇮🇳 Devanagari | — | Anusvara, virama, etc. |
| 🌍 Any | — | All Unicode Mn (Mark, Nonspacing) |
Installation
Manual Installation
- Download
main.jsandmanifest.jsonfrom the latest release - Create folder:
<your-vault>/.obsidian/plugins/diacritics-free-search/ - Place both files inside
- Restart Obsidian
- Go to Settings → Community Plugins → Enable "Diacritics-Free Search"
Building from Source
git clone https://github.com/spenhos/obsidian-diacritics-free-search.git
cd obsidian-diacritics-free-search
npm install
npm run build
Copy main.js + manifest.json to your vault's plugin folder.
Settings
| Setting | Description | Default |
|---|---|---|
| Case sensitive by default | Start searches with case sensitivity enabled | Off |
Contributing
Issues and PRs are welcome! If you find a script or language where diacritics aren't being properly stripped, please open an issue with an example.
Made with ❤️ for multilingual note-takers
For plugin developers
Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.