Skip to content

VSCode Links ​

With this extension you can create custom links in VSCode that can link to files, websites, or even run commands.

Quick Start ​

  1. Install the extension here.
  2. Run the command VSC Links: Create Config File to open the links file. (Ctrl + Shift + P)
  3. Run npm add -D vscl to install the types for the config.
  4. Learn from examples here

Config ​

A configuration file may be named any of the following:

  • vsc-links.config.js (or .cjs, .mjs)
  • vsc-links.config.ts (or .cts, .mts)

The file should export an object with the following properties:

This is an array of objects that define the links. These are properties of that object:

  • include (string?): A glob pattern to match files. Can be an array of strings. Default: "*"
  • exclude (string?): A glob pattern to exclude files. Can be an array of strings. Default: []
  • pattern (string | RegExp): A regular expression or literal string to match the link. Can be an array.
  • handle (function): A function that will be called when a link was found. Check handle for more.

extends ​

This is a string or an array of strings that point to other config files to extend. Example: "./other-config.js"

Details ​

Handle Function ​

The handle function will be called when a link was found. It should return the specific details for the found link. Here you can convert the found link to a target, tooltip, description, etc.

Arguments: Object with:

  • linkText: The text of the found link (based on the pattern).
  • workspace: A template tag function to create workspace-relative paths. Check targets for more.
  • file: A template tag function to create absolute paths. Check targets for more.
  • log: A function to log messages to the VSCode Links output.

Returns: Object with:

  • target: The target of the link.
  • tooltip (optional): A title for the link like "Follow Link."
  • description (optional): A markdown description of the link that will show on hover.
  • jumpPattern (optional): A regular expression (or string) to jump to if the link target is a file.
  • buttons (optional): An array of objects representing buttons which will be shown above the markdown description. See buttons for more.
js
handle(options) {
    const { linkText, workspace, file, log } = options
    return {
        target: "https://google.com",
        tooltip: "Follow Link",
        description: "*This is a link to google*",
        buttons: [
            {
                title: "Open in Browser",
                target: "https://google.com"
            },
            {
                title: "Copy to Clipboard",
                action: () => {
                    copyToClipboard("google")
                }
            }
        ]
    }
}

Targets ​

The target of a link can be any of the following:

  • A normal link: e.g. https://google.com
  • A file link: e.g. file://path/to/file.txt (Beware in Windows its file:/// instead of file://)

You can use the workspace and file utilities from the handle function to help create the target. Examples:

js
const { workspace, file } = options;
const relativeTarget = workspace`src/file.txt`;
const absoluteTarget = file`complete/absolute/path/to/file.txt`;

Buttons ​

Buttons will be shown above the markdown description and the link. They are represented through an array of objects with the following properties:

  • title: The text of the button.
  • target: The target of the button. If set the action will not run.
  • action: A function to run when the button is clicked. Will not run if button target is set. This function can be async.
js
{
    title: "Open in Browser",
    target: "https://google.com"
},
{
    title: "Copy to Clipboard",
    action: () => {
        copyToClipboard("google")
    }
}