Holdens Search
Press Shift twice to search files, folders, text, symbols and commands in one
VS Code picker. Holdens Search works with any color theme.
This extension is 100% vibe coded.
Install
Requires VS Code 1.85 or newer on desktop.
Open Holdens Search on the Marketplace
and choose Install, or find BentHolden.holdens-search in VS Code's
Extensions view. The publisher is BentHolden.
You can also install it from a terminal with the VS Code CLI:
code --install-extension BentHolden.holdens-search
Search
- Open your project with File > Open Folder....
- Press Shift twice, or open the Command Palette (
Cmd+Shift+P on macOS,
Ctrl+Shift+P on Windows/Linux) and run
Search Everywhere: Open Search Everywhere.
- Type a query. Use Tab / Shift+Tab to choose a mode and the arrow keys to
select a result. Press Enter to open it, or Escape to close the picker.
| Mode |
Results |
| Everywhere |
Files, symbols and commands by default; sections are configurable |
| Files |
File names and paths |
| Folders |
Folder paths; selecting one reveals it in Explorer |
| Text |
Matches inside files |
| Symbols |
Workspace symbols supplied by your language extensions |
| Commands |
VS Code and extension commands |
Everywhere does not include file contents by default. Switch to Text or add
text to islands.search.everywhere.sections to include content matches.
You can also open a mode directly from the Command Palette, for example
Search Everywhere: Search Files or Search Everywhere: Search Text.
Shortcuts and search options
These shortcuts apply while the picker is open. Alt is Option on macOS.
The title bar buttons offer the same search options.
| Shortcut |
Action |
Tab / Shift+Tab |
Next / previous search mode |
Enter |
Open a file or symbol, reveal a folder, or run a command |
Escape |
Close the picker |
Ctrl+Enter |
Fill the query with the selected file's folder or the selected folder's path |
Alt+C |
Toggle case-sensitive matching |
Alt+R |
Toggle regular expressions |
Alt+W |
Toggle whole-word matching |
Alt+F |
Toggle fuzzy matching for file, folder and command names |
Alt+G |
Toggle Git ignore rules |
Alt+S |
Toggle the workspace root's .searchignore rules |
File and folder searches match names and paths. Text search uses literal or
regular-expression matching; fuzzy matching applies to names. Regex and whole-word
options override fuzzy matching. Symbol matching is controlled by the language
service. Ctrl+Enter uses Control on macOS too, and switches to Files mode.
Toolbar toggles apply to the current picker session. Save ignore preferences in
Settings to keep them for future sessions. Use the refresh button or
Search Everywhere: Reindex Workspace while the picker is open to rebuild
its file index.
Settings
Open VS Code Settings and search for Search Everywhere. Setting and command
IDs keep the islands.search prefix for compatibility with existing profiles.
To edit JSON directly, run Preferences: Open User Settings (JSON) from the
Command Palette. For example, merge these entries into the existing settings
object to include text in Everywhere and exclude generated folders:
{
"islands.search.everywhere.sections": ["files", "text", "symbols", "commands"],
"islands.search.excludePaths": ["**/node_modules/**", "**/build/**"]
}
All settings below use the islands.search. prefix:
| Setting |
Default |
Purpose |
everywhere.sections |
["files", "symbols", "commands"] |
Sections and their order in Everywhere; also accepts folders and text |
everywhere.resultLimit |
25 |
Results per section in Everywhere |
maxResults |
100 |
Results in an individual mode |
debounceMs |
250 |
Delay after typing, in milliseconds |
excludeGitIgnored |
true |
Apply Git ignore rules |
excludeSearchIgnored |
true |
Apply .searchignore at each workspace root |
excludePaths |
[] |
Additional glob patterns that always stay excluded |
File, folder and text searches also honor boolean true entries in
files.exclude and search.exclude. Conditional sibling exclusions are handled
by VS Code's built-in search. Turning off ignore toggles does not disable
excludePaths, files.exclude or search.exclude exclusions.
Troubleshooting and limits
- Double Shift does not open the picker: try the Command Palette command.
In Preferences: Open Keyboard Shortcuts, search for
islands.search.open
and check for conflicting user bindings. The extension already contributes
shift shift; update any older binding that sends it to another command.
- A file is missing: check the ignore toggles and exclusion settings, then
refresh the index. Folder results come from indexed file paths, so empty
folders do not appear.
- Symbols are missing: symbol results require a language extension with a
workspace symbol provider and a non-empty query. Allow the language service
to load your project.
- A command title looks unfamiliar: some built-in commands use a readable
form of their ID. Choose Open full Command Palette for VS Code's complete
action titles and availability checks.
File, folder and text search support local folders and multi-root workspaces.
For remote or virtual workspaces, use VS Code's built-in file and text search;
command and symbol search remain available when their providers support them.
File indexes stop at 200,000 files per root and show a notice if truncated.
Text search skips binary files, files larger than 2 MiB and lines longer than
20,000 bytes. Git metadata is always excluded and symlinks are not followed.
File and text search use VS Code's bundled ripgrep.
Build from source
From the repository root, use Python 3.9 or newer to build the VSIX:
python3 search-everywhere/scripts/package_extension.py
Run Extensions: Install from VSIX... and select the generated file in
search-everywhere/dist/.
Run node --test search-everywhere/tests/*.test.cjs with Node.js 22 or newer to
test ranking, ignore rules, text positions, cancellation and picker behavior.
Integration tests use VS Code's bundled ripgrep on macOS or RG_PATH/rg on
other systems. The manual Extension Development Host smoke test is
search-everywhere/tests/live-search.cjs.
License
Apache-2.0; see the packaged LICENSE file. The extension uses VS Code's bundled
ripgrep without redistributing the binary.