quarto-dev / quarto-dev/quarto
Find & Replace: option to scope search to prose or code blocks in `.qmd` files
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 645
- Forks
- 62
- Avg merge
- 17h 42m
- Merged PRs (30d)
- 13
Description
Enhancement Request Summary
Add filter options to the editor Find & Replace panel that let users restrict matches to either prose regions or code-block regions in .qmd documents.
Context
I noticed this gap while using Find & Replace in Positron. However, since the feature would require awareness of Quarto document structure — distinguishing prose regions from fenced code blocks — I'm filing it here on the assumption that it belongs in the Quarto extension rather than in Positron itself. Happy to be redirected if that reasoning is wrong.
Motivation
In mixed-format documents like .qmd, many terms appear in both prose and code with intentionally different formatting. For example:
- The desired markdown formatting for a book title like Great Expectations might be italics in prose but unformatted in code (e.g., str_detect(title, "Great Expectations")
- A function name like filter may need to be renamed in code without touching narrative references to "filtering"
The current find/replace is document-wide, making these edits either manual or reliant on complex regular expressions that approximate zone detection.
Proposed behaviour
Add a new toggle or dropdown to the in-editor Find/Replace widget and/or the global search panel when the active file is a .qmd, with three modes:
| Mode | Behaviour |
|---|---|
| All (default) | Current behaviour — search entire document |
| Prose only | Match only outside fenced code blocks (```{r}, ```{python}, etc.) and inline code spans |
| Code only | Match only inside fenced code blocks and inline code spans |
Implementation notes
The Quarto extension already parses the document structure to support cell execution, folding, and diagnostics, so the zone boundaries are available. The find/replace scope could be implemented by:
- Restricting the set of ranges passed to the editor's find implementation, or
- Post-filtering results to exclude ranges that fall in the wrong zone. This could be delivered initially for the in-editor Cmd/Ctrl+F widget; workspace-wide search (sidebar) is a secondary concern.
Related
Source editor priorities for 2026: #897
VS Code does not support this natively; this would be a Quarto-extension-level feature
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by locating the Quarto extension's existing document-structure parsing used for cell execution, folding, and diagnostics, along with the in-editor find implementation. Determine how scoped ranges could support .qmd prose, code, and all modes; done means the in-editor Find/Replace behavior matches the three specified scopes, with workspace-wide search treated as secondary.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript, vscode
- Domain
- developer-experience, tooling
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100