{"id":46059382,"url":"https://github.com/ar0nica/ez-replace","last_synced_at":"2026-03-01T11:01:10.272Z","repository":{"id":323792557,"uuid":"1094720190","full_name":"AR0NICA/ez-replace","owner":"AR0NICA","description":"A powerful Obsidian plugin for fast text replacement with customizable word pairs","archived":false,"fork":false,"pushed_at":"2025-11-12T04:45:51.000Z","size":32,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-11-12T06:21:08.654Z","etag":null,"topics":["note-taking","obsidian-plugin","productivity","text-editor","text-replacement"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AR0NICA.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-12T04:43:08.000Z","updated_at":"2025-11-12T04:44:51.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/AR0NICA/ez-replace","commit_stats":null,"previous_names":["ar0nica/ez-replace"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/AR0NICA/ez-replace","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AR0NICA%2Fez-replace","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AR0NICA%2Fez-replace/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AR0NICA%2Fez-replace/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AR0NICA%2Fez-replace/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AR0NICA","download_url":"https://codeload.github.com/AR0NICA/ez-replace/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AR0NICA%2Fez-replace/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29967930,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-01T10:55:55.490Z","status":"ssl_error","status_checked_at":"2026-03-01T10:55:55.175Z","response_time":124,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["note-taking","obsidian-plugin","productivity","text-editor","text-replacement"],"created_at":"2026-03-01T11:01:09.452Z","updated_at":"2026-03-01T11:01:10.251Z","avatar_url":"https://github.com/AR0NICA.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# EZ Replace\n\n### Supercharge Your Text Editing in Obsidian\n\n[![Version](https://img.shields.io/badge/version-1.3.0-blue.svg)](https://github.com/AR0NICA/ez-replace)\n[![Obsidian](https://img.shields.io/badge/Obsidian-0.15.0+-purple.svg)](https://obsidian.md/)\n[![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)\n\nA powerful Obsidian plugin for lightning-fast text replacement with customizable word pairs, regex support, and auto-complete suggestions.\n\n\u003c/div\u003e\n\n---\n\n## Table of Contents\n\n- [Overview](#overview)\n- [Features](#features)\n- [Getting Started](#getting-started)\n- [Usage](#usage)\n- [Regex Support](#regex-support)\n- [Default Replacement Pairs](#default-replacement-pairs)\n- [JSON File Format](#json-file-format)\n- [Commands](#commands)\n- [Development](#development)\n- [Troubleshooting](#troubleshooting)\n- [Version History](#version-history)\n- [Contributing](#contributing)\n- [License](#license)\n\n---\n\n## Overview\n\nEZ Replace transforms the way you work with text in Obsidian. Define your own text replacement pairs and replace them instantly with a single hotkey. Perfect for inserting special characters, mathematical symbols, or any frequently used text snippets.\n\n### Why EZ Replace?\n\n- **Save Time**: Replace `-\u003e` with `→` in a single keystroke\n- **Regex Power**: Use regular expressions with capture groups for advanced transformations\n- **Auto-Complete**: Get suggestions as you type with smart matching\n- **Stay Organized**: Categorize and search through your replacement pairs\n- **Track Usage**: Monitor which pairs you use most frequently\n- **Context-Aware**: Control where replacements apply (code blocks, headings, etc.)\n- **Portable**: Export and import your settings across different vaults\n\n---\n\n## Features\n\n### Core Features\n\n| Feature | Description |\n|---------|-------------|\n| **One-key Replacement** | Press your hotkey to instantly replace selected text |\n| **Auto-Complete Suggester** | Get real-time suggestions as you type |\n| **Regex Support** | Use regular expressions with capture groups ($0-$9) |\n| **Context-Aware Matching** | Control replacements based on document context |\n| **Custom Pairs** | Define unlimited source to target text pairs |\n| **Quick Toggle** | Enable/disable pairs without deleting them |\n\n### Organization and Search (v1.2)\n\n| Feature | Description |\n|---------|-------------|\n| **Search and Filter** | Find pairs quickly by source, target, or description |\n| **Category Tags** | Organize pairs with custom tags (math, arrows, greek, etc.) |\n| **Sorting Options** | Sort by name, date created, or usage frequency |\n| **Usage Statistics** | Track how often each pair is used |\n| **Statistics Dashboard** | View total replacements, top pairs, and export stats |\n\n### Advanced Matching (v1.3)\n\n| Feature | Description |\n|---------|-------------|\n| **Regex Mode** | Enable regex matching per pair with validation |\n| **Capture Groups** | Use $0 (full match), $1-$9 in replacement target |\n| **Regex Flags** | Support for case-insensitive (i), multiline (m), dotall (s), unicode (u) |\n| **Regex Templates** | 18 pre-built patterns for common use cases |\n| **Context Filtering** | Include/exclude specific contexts (code, headings, links, etc.) |\n\n### Data Management\n\n| Feature | Description |\n|---------|-------------|\n| **JSON Export** | Backup all your replacement pairs |\n| **Flexible Import** | Replace or merge with existing pairs |\n| **Example Library** | Pre-made pairs to get started |\n| **Cross-Vault Sync** | Share settings between vaults |\n\n---\n\n## Getting Started\n\n### Installation\n\n#### Manual Installation\n\n1. Download the latest release files:\n   - `main.js`\n   - `manifest.json`\n   - `styles.css`\n\n2. Create the plugin folder:\n   ```\n   \u003cyour-vault\u003e/.obsidian/plugins/ez-replace/\n   ```\n\n3. Copy the downloaded files into this folder\n\n4. Restart Obsidian or reload with `Ctrl+R` (Windows/Linux) or `Cmd+R` (Mac)\n\n5. Go to **Settings \u003e Community Plugins** and enable **EZ Replace**\n\n#### For Developers\n\n```bash\n# Clone the repository\ngit clone https://github.com/AR0NICA/ez-replace.git\ncd ez-replace\n\n# Install dependencies\nnpm install\n\n# Build the plugin\nnpm run build\n\n# Copy files to your vault\ncp main.js manifest.json styles.css \u003cyour-vault\u003e/.obsidian/plugins/ez-replace/\n```\n\n### Quick Start Guide\n\n1. **Open Settings**\n   - Navigate to `Settings \u003e EZ Replace`\n   - Or use Command Palette: `EZ Replace: Open settings`\n\n2. **Configure Your Hotkey**\n   - In the settings, find **Hotkey Configuration** section\n   - Click **Configure Hotkey** button\n   - Set your preferred keyboard shortcut\n\n3. **Try the Default Pairs**\n   - Select `-\u003e` in your note\n   - Press your configured hotkey\n   - Watch it transform to `→`\n\n4. **Create Your First Custom Pair**\n   - Click **Add pair** button\n   - Enter source text (e.g., `alpha`)\n   - Enter target text (e.g., `α`)\n   - Start using it immediately\n\n---\n\n## Usage\n\n### Managing Replacement Pairs\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eAdding a New Pair\u003c/strong\u003e\u003c/summary\u003e\n\n1. Go to `Settings \u003e EZ Replace`\n2. Click the **Add pair** button\n3. Fill in the fields:\n   - **Source**: The text you want to replace (e.g., `-\u003e`)\n   - **Target**: The text to replace it with (e.g., `→`)\n4. The pair is saved automatically\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eSearching and Filtering Pairs\u003c/strong\u003e\u003c/summary\u003e\n\n- Use the **search bar** at the top to filter pairs by source, target, or description\n- Click **category tags** to filter by category\n- Use **sorting options** to organize by name, date, or usage frequency\n- View **usage count badges** to see how often each pair is used\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eAdvanced Options\u003c/strong\u003e\u003c/summary\u003e\n\nClick the gear icon on any pair to access:\n\n- **Description**: Add a note about what this pair does\n- **Category Tags**: Assign tags for organization\n- **Case Sensitive**: Match text with exact case or ignore it\n- **Whole Word Match**: Replace only complete words, not parts\n- **Regex Mode**: Enable regular expression matching (v1.3)\n- **Context Matching**: Control where the pair applies (v1.3)\n\n\u003c/details\u003e\n\n### Using Auto-Complete Suggester\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eGetting Started with Auto-Complete\u003c/strong\u003e\u003c/summary\u003e\n\n1. The suggester is **enabled by default**\n2. Start typing any source text (e.g., type `al` for `alpha`)\n3. Suggestions appear automatically after minimum characters (default: 2)\n4. Press **Tab** or **Enter** to accept a suggestion\n5. Continue typing normally to ignore suggestions\n\n**How it works:**\n- Suggester scans your enabled replacement pairs\n- Shows matches based on your matching mode (prefix or fuzzy)\n- Regex pairs show a `[Rx]` badge in suggestions\n- Updates in real-time as you type\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eConfiguring Suggester Settings\u003c/strong\u003e\u003c/summary\u003e\n\nGo to `Settings \u003e EZ Replace \u003e Auto-complete suggester` section:\n\n| Setting | Description |\n|---------|-------------|\n| **Enable auto-complete** | Toggle the suggester on/off |\n| **Minimum characters** | Characters needed before suggestions appear (1-5) |\n| **Maximum suggestions** | Limit how many suggestions to display (3-10) |\n| **Matching mode** | Prefix matching or fuzzy matching |\n| **Show descriptions** | Display description text in suggestions |\n| **Case sensitive** | Match source text with exact case |\n| **Confirmation keys** | Tab only, Enter only, or both |\n\n\u003c/details\u003e\n\n### Backup and Restore\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eExporting Your Settings\u003c/strong\u003e\u003c/summary\u003e\n\n1. Go to `Settings \u003e EZ Replace`\n2. Find **Backup and Restore** section\n3. Click **Export to JSON**\n4. A file named `ez-replace-backup-YYYYMMDD-HHMM.json` will be downloaded\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eImporting Settings\u003c/strong\u003e\u003c/summary\u003e\n\n1. Click **Import from JSON**\n2. Select your backup file\n3. Choose import mode:\n   - **Replace**: Remove all current pairs and use imported ones\n   - **Merge**: Keep current pairs and add imported ones\n4. Confirm your choice\n\n\u003c/details\u003e\n\n---\n\n## Regex Support\n\nVersion 1.3 introduces powerful regular expression support for advanced text transformations.\n\n### Enabling Regex Mode\n\n1. Open the settings for any replacement pair\n2. Enable the **Regex Mode** toggle\n3. Enter your regex pattern in the source field\n4. Use capture group references in the target field\n\n### Capture Groups\n\nUse `$0` through `$9` in your target text to reference captured groups:\n\n| Reference | Description |\n|-----------|-------------|\n| `$0` | The entire matched text |\n| `$1` - `$9` | Captured groups in order |\n| `\\$` | Literal dollar sign |\n\n### Example: Date Format Conversion\n\n| Field | Value |\n|-------|-------|\n| Source | `(\\d{4})-(\\d{2})-(\\d{2})` |\n| Target | `$3/$2/$1` |\n| Input | `2024-12-30` |\n| Output | `30/12/2024` |\n\n### Regex Flags\n\n| Flag | Name | Description |\n|------|------|-------------|\n| `i` | Case-insensitive | Match regardless of case |\n| `m` | Multiline | `^` and `$` match line boundaries |\n| `s` | Dotall | `.` matches newlines |\n| `u` | Unicode | Enable Unicode matching |\n\n### Regex Template Library\n\nAccess 18 pre-built regex templates through the **Browse Templates** button:\n\n| Category | Templates |\n|----------|-----------|\n| **Date** | ISO to various formats, date reordering |\n| **Phone** | US, international, formatting patterns |\n| **URL** | Protocol removal, domain extraction |\n| **Number** | Thousand separators, decimal conversion |\n| **Text** | Whitespace cleanup, quote conversion |\n\n### Context-Aware Matching\n\nControl where your regex pairs apply:\n\n| Context | Description |\n|---------|-------------|\n| `normal` | Regular paragraph text |\n| `codeBlock` | Fenced code blocks |\n| `inlineCode` | Inline code spans |\n| `heading` | Headings (# to ######) |\n| `link` | Markdown links |\n| `quote` | Block quotes |\n| `list` | List items |\n\nSet **Include** contexts to limit matching, or **Exclude** contexts to prevent matching in specific areas.\n\n---\n\n## Default Replacement Pairs\n\nThe plugin includes these ready-to-use pairs:\n\n| Source | Target | Description |\n|--------|--------|-------------|\n| `-\u003e` | `→` | Right arrow |\n| `\u003c-` | `←` | Left arrow |\n| `=\u003e` | `⇒` | Double right arrow |\n| `!=` | `≠` | Not equal |\n\n### Example Pairs Library\n\nImport `example-pairs.json` for additional useful pairs:\n\n| Source | Target | Description |\n|--------|--------|-------------|\n| `\u003e=` | `≥` | Greater than or equal |\n| `\u003c=` | `≤` | Less than or equal |\n| `alpha` | `α` | Greek letter alpha |\n| `beta` | `β` | Greek letter beta |\n| `infinity` | `∞` | Infinity symbol |\n| `(c)` | `©` | Copyright symbol |\n\n---\n\n## JSON File Format\n\nWhen you export settings, the file structure includes all pair properties:\n\n```json\n[\n  {\n    \"id\": \"unique-identifier\",\n    \"source\": \"-\u003e\",\n    \"target\": \"→\",\n    \"enabled\": true,\n    \"description\": \"Right arrow\",\n    \"caseSensitive\": true,\n    \"wholeWord\": false,\n    \"tags\": [\"arrows\", \"symbols\"],\n    \"usageCount\": 42,\n    \"lastUsed\": 1735500000000,\n    \"isRegex\": false,\n    \"regexFlags\": \"\",\n    \"matchContext\": {\n      \"include\": [],\n      \"exclude\": [\"codeBlock\", \"inlineCode\"]\n    }\n  }\n]\n```\n\n### Field Reference\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `id` | string | Unique identifier |\n| `source` | string | Text or regex pattern to match |\n| `target` | string | Replacement text (supports $1-$9 for regex) |\n| `enabled` | boolean | Whether the pair is active |\n| `description` | string | Optional description |\n| `caseSensitive` | boolean | Case-sensitive matching |\n| `wholeWord` | boolean | Match whole words only |\n| `tags` | string[] | Category tags (v1.2) |\n| `usageCount` | number | Times used (v1.2) |\n| `lastUsed` | number | Last use timestamp (v1.2) |\n| `isRegex` | boolean | Enable regex mode (v1.3) |\n| `regexFlags` | string | Regex flags: i, m, s, u (v1.3) |\n| `matchContext` | object | Context filtering (v1.3) |\n\n---\n\n## Commands\n\nThe plugin registers these commands in the Command Palette (`Ctrl+P`):\n\n| Command | Description |\n|---------|-------------|\n| `Replace selected text` | Replace the selected text with matching pair |\n| `Open settings` | Quickly open plugin settings |\n\n**Note**: EZ Replace does not set a default hotkey. Configure your preferred shortcut in Settings \u003e Hotkeys.\n\n---\n\n## Development\n\n### Building from Source\n\n```bash\n# Install dependencies\nnpm install\n\n# Development mode (watch for changes)\nnpm run dev\n\n# Production build\nnpm run build\n```\n\n### Project Structure\n\n```\nez-replace/\n├── src/\n│   ├── main.ts            # Plugin entry point and core logic\n│   ├── settingsTab.ts     # Settings UI and modals\n│   ├── settings.ts        # Default settings\n│   ├── suggester.ts       # Auto-complete suggester\n│   ├── regexTemplates.ts  # Pre-built regex templates\n│   └── types.ts           # TypeScript type definitions\n├── styles.css             # Plugin styles\n├── manifest.json          # Plugin metadata\n├── example-pairs.json     # Example configurations\n└── README.md              # Documentation\n```\n\n---\n\n## Troubleshooting\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eReplacement not working\u003c/strong\u003e\u003c/summary\u003e\n\n- Check if the pair is enabled (toggle should be ON)\n- Verify exact text match (check case sensitivity setting)\n- Ensure text is selected before pressing hotkey\n- Check if another plugin is using the same hotkey\n- For regex pairs, verify the pattern is valid (check validation indicator)\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eRegex not matching\u003c/strong\u003e\u003c/summary\u003e\n\n- Ensure **Regex Mode** is enabled for the pair\n- Check the validation indicator for syntax errors\n- Verify your pattern matches the entire selected text\n- Test your regex pattern with the preview feature in settings\n- Check if context filtering is excluding your current location\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eCapture groups not working\u003c/strong\u003e\u003c/summary\u003e\n\n- Use `$1`, `$2`, etc. (not `\\1`, `\\2`)\n- Ensure your pattern has capturing groups: `(\\d+)` not `\\d+`\n- Check that group numbers match your pattern's group count\n- Use `$0` for the full match\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eImport failed\u003c/strong\u003e\u003c/summary\u003e\n\n- Verify JSON file format is correct\n- Check that each pair has `source` and `target` fields\n- Try a fresh export to ensure valid format\n- Validate JSON syntax with an online validator\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eHotkey not working\u003c/strong\u003e\u003c/summary\u003e\n\n- Check for conflicts in `Settings \u003e Hotkeys`\n- Try setting a different key combination\n- Restart Obsidian after changing hotkeys\n\n\u003c/details\u003e\n\n---\n\n## Version History\n\n### v1.3.0 (2025-12-30)\n\n**Regex and Context-Aware Matching Release**\n\n- Regular expression support with per-pair toggle\n- Capture groups ($0-$9) for advanced replacements\n- Regex flags: case-insensitive, multiline, dotall, unicode\n- Real-time regex validation with error display\n- Regex test preview in settings\n- 18 pre-built regex templates across 5 categories\n- Template browser modal with category filtering\n- Context-aware matching (code blocks, headings, links, etc.)\n- Include/exclude context filters per pair\n\n### v1.2.0 (2025-12-15)\n\n**Search, Categories, and Statistics Release**\n\n- Search bar for filtering replacement pairs\n- Category/tag system with multi-tag support\n- Sorting options (name, date, usage frequency)\n- Usage statistics tracking per pair\n- Statistics dashboard with top pairs view\n- Export statistics to JSON\n- Usage count badges in pair list\n\n### v1.1.0 (2025-11-13)\n\n**Auto-Complete Suggester Release**\n\n- Auto-complete suggester with real-time suggestions\n- Prefix and fuzzy matching algorithms\n- Customizable suggester settings (7 options)\n- Tab and Enter key support for accepting suggestions\n- Smart suggestion rendering with descriptions\n\n### v1.0.0 (2025-11-12)\n\n**Initial Release**\n\n- Text replacement with customizable hotkey\n- Replacement pairs management (Add, Edit, Delete, Reorder)\n- Enable/disable individual pairs\n- Advanced options (Case-sensitive, Whole word, Description)\n- JSON Export/Import (Replace and Merge modes)\n- Hotkey configuration UI\n\n---\n\n## Contributing\n\nContributions are welcome. Please feel free to:\n\n- Report bugs or suggest features via GitHub Issues\n- Submit pull requests for improvements\n- Share your replacement pair collections\n- Translate documentation to other languages\n\n---\n\n## License\n\nMIT License - see [LICENSE](LICENSE) for details.\n\n---\n\n## Support\n\nIf you find this plugin helpful, consider:\n\n- Starring the repository on GitHub\n- Sharing it with other Obsidian users\n- Contributing to the project\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\nMade for the Obsidian community\n\n[Report Bug](https://github.com/AR0NICA/ez-replace/issues) | [Request Feature](https://github.com/AR0NICA/ez-replace/issues)\n\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Far0nica%2Fez-replace","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Far0nica%2Fez-replace","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Far0nica%2Fez-replace/lists"}