Global Search
Global Search — also called Find in Project — searches every script, character, and Markdown file in your project at once, then lets you jump straight to the matching node or open the file. It is a dockable tab, so you can keep it open alongside your canvas.
Overview
As a project grows past a handful of scripts, finding "where did I write that line of dialogue" or "which scripts use this variable" by opening files one at a time becomes painful. Global Search indexes your whole project and answers those questions instantly. Type a query and matching files appear in a grouped list, with each individual match shown as its own row.
What Global Search can find:
- A line of dialogue, a dialogue option, or a node title anywhere in the project
- Every script that references a particular variable, enum value, or flow name
- A character by name, or a character variable
- Any line of text in your Markdown notes
- A file by its name — even images, audio, and other assets
One search, the whole project
Opening Global Search
There are three ways to open the Global Search tab. All of them open the same single shared tab — Global Search is a singleton, so triggering it again focuses the existing tab rather than creating a second one.
- Keyboard shortcut: Press Ctrl + Shift + F (Cmd + Shift + F on macOS). This shortcut is rebindable — change it under Settings → Keybindings (the command is named Open Global Search).
- Toolbar button: Click the Global Search button (a magnifying-glass-over-code icon) in the editor toolbar. Its tooltip shows the current shortcut.
- Menu bar: Open the Window menu and choose Global Search.
Open it once, leave it docked
Because Global Search is a dockable tab rather than a pop-up dialog, you can dock it beside your canvas and keep it open while you work. Your last query stays in the box, so reopening the tab brings your previous results right back.
What It Searches
Global Search indexes three kinds of file content — scripts, characters, and Markdown — plus the file names of everything in your project. Each match is labelled with the field it came from (for example Dialogue, Option, Variable, or Line) so you can tell at a glance what kind of match you're looking at.
Scripts (.sfe)
Script files are searched node by node, plus their project-level data. Global Search looks inside the following fields:
- Dialogue: the main text of a Dialogue node, its title, its options, and any text blocks or elements
- Node title & text: titles and text on other node types (including Start and End)
- Variables: variable names, descriptions, and enum values defined in the script
- Flows: flow names
- Run Script interface: parameter, output, and exit names exposed by Run Script nodes
Matches inside a node are linked to that node, which is what lets Global Search jump the canvas directly to it (see Opening Files & Jumping to Nodes).
Characters (.sfc)
Character files contribute their character name and the names of their character variables. This makes it easy to find which character a name belongs to, or to locate a character that defines a particular variable.
Markdown (.md)
Markdown notes are searched line by line. Every non-blank line is indexed, and matches are reported with their line number — handy for navigating long design documents kept inside your project.
Filenames & Other Files
Alongside content, Global Search matches file names for every file in the project. File-name matching uses fuzzy matching on the file's base name, so typing chap1 can surface chapter-1-intro.sfe even though the letters aren't adjacent.
File types that aren't scripts, characters, or Markdown — images, audio, and other assets — are matched by file name only (they have no searchable text content). Use the Other types filter to include or exclude them.
Content vs. file-name matching
The two kinds of matching behave differently. File-name matching is always fuzzy (the letters of your query just have to appear in order). Content matching defaults to a literal substring search, and becomes a regular-expression search when you enable the Regex toggle. The next section covers how to control content matching.
Filters, Regex & Matching
The funnel icon next to the search box opens the Filters dropdown. A small green dot appears on the icon whenever any filter is set to something other than its default, so you always know when results are being narrowed.
Match options control how your query is compared against content:
- Case sensitive: require matches to use the same letter casing as your query. Off by default.
- Whole word: match only complete words, so
catwon't match insidecategory. - Regex: treat your query as a regular expression instead of literal text. Combines with Case sensitive and Whole word (Whole word wraps your pattern in word boundaries). An invalid pattern simply yields no matches — it never throws an error.
- Match filenames only: skip content entirely and search file names alone. Useful when you just want to locate a file.
File types control which files are searched. Toggle any of these off to exclude that group:
- Scripts —
.sfefiles - Markdown —
.mdfiles - Characters —
.sfcfiles - Other types — images, audio, and any other assets (matched by file name only)
A Reset to defaults action at the bottom of the dropdown clears every match option and re-enables all four file types.
Regex examples
With Regex enabled, you can search content with patterns instead of exact text:
door|gate # lines mentioning a door OR a gate
hello\s+world # "hello" and "world" separated by whitespace
quest\d+ # "quest" followed by one or more digits Turn on Whole word alongside Regex to match only complete words.
Reading Results
Results are grouped by file. Each group shows the file's icon, its name (with the matched letters highlighted), its path, and a badge with the number of content matches in that file. The status strip above the list reports how many files matched.
Within a group:
- Each content match is its own row, labelled with the field it came from — for example Dialogue, Option, Title, Variable, Flow, Character, or Line. Markdown rows also show the line number (for example Line:42).
- The matched text is highlighted in amber inside a short snippet of surrounding context.
- Click a group's header (or its chevron) to collapse or expand its matches. Collapsed groups stay collapsed as you keep working.
Results are ranked so the most relevant files surface first. When a query matches both a file's name and its contents, file-name-only matches are listed ahead of content matches; among content matches, files with more hits rank higher.
Opening Files & Jumping to Nodes
Global Search is built to take you to the match, not just show you it. Clicking a result's text never moves your canvas on its own — navigation always happens through explicit buttons, so you can scan results freely without losing your place.
On a file group header, two buttons appear on the right:
- Show in Content Browser — reveals the file in the Content Browser without opening it.
- Open file — opens the file in the editor.
On an individual match row, a single button opens the match:
- When the match belongs to a specific node, the button reads Open file & go to node. Clicking it opens the script and moves the canvas straight to that node.
- When the match isn't tied to a node — a Markdown line, for example — the button simply opens the file.
Straight to the source
Because script matches remember which node they came from, finding a stray line of dialogue and landing on the exact node that contains it is a single click — even if that node lives in a script you don't currently have open.
Indexing & Live Updates
Global Search works against an index of your project that the editor builds in the background. The first time you open the tab, indexing starts automatically. While it runs you'll see a thin progress bar and an Indexing… N / M status; once it finishes, the status switches to Indexed with a relative timestamp (for example Indexed 2m ago).
Typing is debounced briefly so results update smoothly as you type rather than on every keystroke. The index also keeps itself current: when you save, rename, create, or delete files, displayed results refresh automatically so you don't see stale names or matches.
If you ever need to force a fresh scan — for example after large changes made outside the editor — click the Rebuild index button (the circular-arrows icon) in the search bar. It's disabled while an index build is already in progress.
If indexing fails
Docking & Detaching the Tab
Global Search is a dockable utility tab, the same as the Content Browser. You can drag it into any tab group to dock it wherever it's most useful — for example, in a panel beside your canvas so search and editing sit side by side.
You can also detach Global Search into its own window. Because it's a single shared tab, detaching it moves the tab into a new window; your current query and your collapsed/expanded groups carry over so the detached window picks up exactly where you left off.
One Global Search per project
There is only ever one Global Search tab. Opening it from the shortcut, the toolbar, or the menu always focuses that single tab, and it searches the project you currently have open.