A plugin that makes it easy to open files anywhere:
- …outside the VS Code workspace
- …relative to the currently open file
- …in a given git branch/tag/commit

Features
Key bindings on Mac use ⌘ in place of Ctrl.
Open/create any local file
- Show the Quick Opener picker by pressing Ctrl-O
- Open any path across the file system using only the keyboard (no more pesky native file system popups!)
- Fuzzy path matching using the built-in VS Code fuzzy matcher
- Starts in directory of current file (if open) to make relative navigation quick and easy
- Begin entering any absolute path (or a pre-configured prefix) to quickly locate files outside the current workspace
- Navigate to parent directory by entering
.. or pressing Ctrl-U
- Additional functionality available via window and item buttons, as well as keybindings:
- Enter - File: Open file / Directory: Change relative root directory
- Ctrl-O - File: Open in split / Directory: Add/remove directory to/from workspace
- Ctrl-Shift-O - Directory: Open directory in new window
- Ctrl-U - Cut off last part of the input path / navigate to parent directory
- Ctrl-N - Create new file (or directory if input ends with a slash) at the given path,
with ancestor directories created in the process
- Tab - Replace input value with selected item
Open by git ref/revision
Browse and open files as they existed from any git branch, tag, or commit SHA via the
quickOpener.showRevisionPicker command ("Quick Opener: Open by Revision").
This command is not bound to a keyboard shortcut by default, see Key bindings to set one up.
- Lists all local/remote branches and tags, grouped by type
- Type any commit SHA to use it directly without selecting from the list
- Selecting a ref opens a file revision picker, enabling opening of any file that existed in that ref
- Additional functionality available via item buttons for each ref:
- Open changes — open a multi-diff view of all changes in the given ref (Ctrl-O)
- Diff against HEAD — open a multi-diff view comparing that ref to
HEAD (Ctrl-Shift-O)
- Toggle visibility of additional metadata via the title bar buttons
- Toggle description format — select between showing short SHA or custom metadata (Ctrl-D)
- Toggle commit message visibility — show/hide most recent commit title (Ctrl-M)
- Customize metadata format via
quickOpener.refDescriptionFormat setting
Installation
- Navigate to the Quick Opener extension page within VS Code by either:
- Press the corresponding Install button
- (optional) Configure keybindings - see below for examples
Extension contributions
Key bindings
The default behaviour of the plugin is to take over the standard key binding to open a file/folder:
Ctrl-O (Mac: ⌘-O).
You can configure key bindings from within vscode via "Open Keyboard Shortcuts", or by editing
keybindings.json
directly. If you wish to use another key binding you can append the following to it:
{
"key": "cmd+o", // Revert the binding back to the editor default
"command": "-quickOpener.show"
},
{
"key": "cmd+shift+o", // New binding to use
"command": "quickOpener.show"
},
Custom key bindings
Example of how to define custom key bindings:
{
"key": "ctrl+g o",
"command": "quickOpener.showRevisionPicker",
},
{
"when": "inQuickOpener", // when any quick picker is visible
"command": "quickOpener.triggerItemAction",
"args": 1, // trigger first visible action for item (depends on item type)
"key": "ctrl+t",
},
{
"when": "inQuickOpener == 'revision'", // when revision picker is visible
"command": "quickOpener.triggerAction",
"args": "toggleMessage", // toggle commit message visibility
"key": "ctrl+m",
}
Settings
quickOpener.fallbackDirectory: Directory to start in when there's no workspace/file open in the editor. Supports vscode variables.
Default value: "${userHome}"
quickOpener.prefixes: Mapping of path prefixes to their expanded paths. A path starting with any of these strings followed by a directory separator will be expanded to the corresponding path. Supports vscode variables.
Default value: { "~": "${userHome}", "@": "${workspaceFolder}" }
quickOpener.exclude: List of directory/file names to exclude from the results.
Compared against the name of each path component.
Default value: ["node_modules", ".git", ".DS_Store"]
quickOpener.icons: Show or hide icons in the quick picker.
Default value: true
quickOpener.timeout: Maximum time (in ms) for scanner to run between input and showing results.
Set to 0 to disable recursive search.
Default value: 200
quickOpener.maxCandidates: Maximum number of paths to include in the list VS Code fuzzy matches against.
Lower values improve UI responsiveness at the risk of fewer nested directories being included in the list.
Default value: 10000
quickOpener.refDescriptionFormat: Format string for revision descriptions in the "Open by Revision" picker
when the custom description style is active (toggled via the info button in the picker).
Default value: "{commitDate} - {authorName}"
Available placeholders:
{name}
{commit}
{message}
{authorName}
{authorEmail}
{authorDate}
{commitDate}
Date keys support optional formatting, e.g. {commitDate:YYYY-MM-DD}. Supported date tokens:
YYYY / YY
MMM / MM
DD / D
HH / H
mm
ss
Commands
quickOpener.show: Show the Quick Opener picker.
quickOpener.showRevisionPicker: Show the "Open by Revision" picker, listing all git branches and tags.
Selecting a ref opens the "Open File at Revision" picker for that ref.
Accepts an optional options object argument:
initialValue = '' — pre-fill the search input
branches = true — include branches in the list
tags = true — include tags in the list
quickOpener.showRevisionFilePicker: Show a picker listing all files at a given git ref.
Accepts two optional arguments:
ref = 'HEAD' — branch name, tag, or commit SHA to list files from
options:
initialValue?: string — pre-fill the search input
Commands available while the plugin window is visible:
quickOpener.triggerAction: Trigger a window action.
quickOpener.triggerItemAction: Trigger an action for the currently selected item.
quickOpener.triggerTabCompletion: Replace the input value with the selected item path.
quickOpener.popPath: Go upwards in the path by chopping off the last part of the input (if present), or by navigating to parent directory.
Disclaimer
The Create directory/file functionality will attempt to create directories when necessary. This should not cause any data to be lost or overwritten, but I can unfortunately not guarantee that it will never happen in every possible situation.
Credits
- Icon: Created with the assistance of DALL·E 2