Skip to main content

Advanced URI handling for Vim with Rust performance

Project description

vimania-uri-rs

Advanced URI Handling for the Modern Vim User

Downloads PyPI Version Build Status Security Audit

Background: Rewriting a Vim Plugin in Rust

A high-performance Rust reimplementation of the vimania-uri Vim plugin, delivering 10x faster startup times with advanced URI handling capabilities.

Key Features

  • Lightning Fast: 10x faster startup than pure Python implementations
  • Universal URI Support: Handle web URLs, local files, internal links, and more
  • Smart Markdown Integration: Auto-fetch page titles for reference-style links
  • Precise Navigation: Jump to specific headings, line numbers, or anchors
  • Security First: Built-in SSRF protection and comprehensive security auditing
  • Extensive Format Support: Open HTML, DOCX, PPTX, images, audio, and more
  • Modern Architecture: Rust core with Python integration for optimal performance

Why vimania-uri-rs?

While Vim's native gx command and existing plugins provide basic URI handling, they often fall short in terms of:

  • Performance: Slow startup times and laggy URL processing
  • Features: Limited format support and navigation capabilities
  • Security: No protection against malicious URLs

vimania-uri-rs addresses all these limitations with a modern, high-performance solution.

Demo

Demo

📺 Watch the full demo on YouTube

Best paired with: vim-markdown, but works excellently with any file type.

Quick Start

It's simple: Position your cursor on any URI and press go.

go

That's it! The plugin intelligently determines how to handle the URI based on its type and context.

Handled Link Types

  • local text links: [foo](second.md) will be opened inside vim. If the target contains line number as in [foo](second.md:30), the line will be jumped to. Also anchors are supported, for example [foo](second.md#custom-id).
  • URL links: [google](https://google.com) will be opened with the OS browser.
  • non text files: if the option g:vimania-uri#Extensions is set, non text files will be opened via the operating system. This behavior is handy when linking to binary documents, for example PDFs.
  • internal links: [Link Text](#Target), will link to the heading # Target. Following the link will jump to the heading inside vim. Currently both github style anchors, all words lowercased and hyphenated, and jupyter style anchros, all words hyphenated, are supported.
  • reference style links: for links of the form [foo][label], vimania-uri will lookup the corresponding label and open the target referenced there.
  • implicit name links: for links of the form [foo][] will use foo as the label and then follow the logic of reference style links.
  • custom ids via attribute lists: the id a link target can be defined via [attribute lists][attr-lists] of the form {: #someid ...}. This way fixed name references can be defined to prevent links from going stale after headings have been changed.
  • local link format of pelican: vimania-uri handles |filename| ... and {filename} ... links as expected, for example [link](|filename|./second.md) and [link]({filename}../posts/second.md).

Usage

In VIM normal mode in a Markdown document, type go while curser is on markdown-link. If the link is a local file it will be opened in vim (C-o will get you back). Otherwise, it will be opened via OS open command (.e.g Web-Broser, Microsoft Office, ...).

The following links will be handled (the possible cursor positions are indicated by ^):

Local text links: [link](foo.md) will be opened inside vim. 
                  ^^^^^^^^^^^^^^
If target contains line number as in [link](foo.md:30), the line will be jumped to. 
Also anchors are supported, for example [link](foo.md#anchor)

This [link](https://example.com) will be opened inside the browser.
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^

This $HOME/dir will be opened inside OS file browser
     ^^^^^^^^^

This $HOME/dir/present.pptx will open in Powerpoint
     ^^^^^^^^^^^^^^^^^^^^^^

[link](example.pdf) will be opened in pdf reader
^^^^^^^^^^^^^^^^^^^

Document internal linking works, too: to link to the heading Usage, use
this [link](#usage).
     ^^^^^^^^^^^^^^

Reference style [links][ref-style-link] will open http://example.com in browser
                ^^^^^^^^^^^^^^^^^^^^^^^
[ref-style-link]: http://example.com

⚙️ Configuration

Core Settings

" File extensions to open in Vim (others use OS default)
let g:vimania_uri_extensions = ['.md', '.txt', '.rst', '.py', '.conf', '.sh', '.json', '.yaml', '.yml']


" Custom key mapping (default: 'go')
nmap <leader>u <Plug>vimania_uri_go

Advanced Configuration

" Log level for debugging (DEBUG, INFO, WARNING, ERROR)
let g:vimania_uri_log_level = 'INFO'

" Timeout for URL requests (milliseconds)
let g:vimania_uri_timeout = 3000

" Custom browser command (optional)
let g:vimania_uri_browser_cmd = 'firefox'

Environment Variables

  • LOG_LEVEL: Override log level (DEBUG, INFO, WARNING, ERROR)
  • VIMANIA_URI_TIMEOUT: Request timeout in seconds

📦 Installation

Prerequisites

  • Vim compiled with +python3 support
  • Python 3.10 or higher
  • pip in your PATH

Method 1: vim-plug (Recommended)

" Add to your .vimrc
Plug 'https://github.com/sysid/vimania-uri-rs.git', {
  \ 'do': 'pip install vimania-uri-rs --upgrade --target ~/.vim/plugged/vimania-uri-rs/pythonx',
  \ 'branch': 'main'
  \ }

" Configuration
let g:vimania_uri_extensions = ['.md', '.txt', '.rst', '.py', '.json', '.yaml']

Method 2: Build from Source

For developers or if you want the latest features:

" Requires: rust, maturin in PATH
Plug 'https://github.com/sysid/vimania-uri-rs.git', {
  \ 'do': 'python3 build.py',
  \ 'branch': 'main'
  \ }

Method 3: Manual Installation

cd ~/.vim/plugged
git clone https://github.com/sysid/vimania-uri-rs.git
cd vimania-uri-rs
python3 build.py

Post-Installation

  1. Restart Vim
  2. Run :helptags ALL to refresh help documentation
  3. Test with :echo has('python3') (should return 1)

Supported Platforms

  • ✅ Linux (x86_64, ARM64)
  • ✅ macOS (Intel, Apple Silicon)
  • ⚠️ Windows (experimental support)

Credits

  • inspired by UltiSnips.
  • URI handling is based on work of Christopher Prohm: mdnav

Similar work

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

vimania_uri_rs-2.0.3-cp313-cp313-manylinux_2_34_x86_64.whl (5.1 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.34+ x86-64

vimania_uri_rs-2.0.3-cp313-cp313-macosx_11_0_arm64.whl (2.5 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

vimania_uri_rs-2.0.3-cp313-cp313-macosx_10_12_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

vimania_uri_rs-2.0.3-cp312-cp312-manylinux_2_34_x86_64.whl (5.1 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.34+ x86-64

vimania_uri_rs-2.0.3-cp312-cp312-macosx_11_0_arm64.whl (2.5 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

vimania_uri_rs-2.0.3-cp312-cp312-macosx_10_12_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

vimania_uri_rs-2.0.3-cp311-cp311-manylinux_2_34_x86_64.whl (5.1 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.34+ x86-64

vimania_uri_rs-2.0.3-cp311-cp311-macosx_11_0_arm64.whl (2.5 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

vimania_uri_rs-2.0.3-cp311-cp311-macosx_10_12_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

vimania_uri_rs-2.0.3-cp310-cp310-manylinux_2_34_x86_64.whl (5.1 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.34+ x86-64

vimania_uri_rs-2.0.3-cp310-cp310-macosx_11_0_arm64.whl (2.5 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

vimania_uri_rs-2.0.3-cp310-cp310-macosx_10_12_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.10macOS 10.12+ x86-64

File details

Details for the file vimania_uri_rs-2.0.3-cp313-cp313-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for vimania_uri_rs-2.0.3-cp313-cp313-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 c0198ee0b5d93c6553f74ee62de6c86179ef92ee112719d5831e452b3a3d343e
MD5 99d23195738fb73f55df50ea4abf9c9f
BLAKE2b-256 d2692d89f1590184a201b3ef218f91e38af882e04dd1622e66d715d0bac5fc82

See more details on using hashes here.

Provenance

The following attestation bundles were made for vimania_uri_rs-2.0.3-cp313-cp313-manylinux_2_34_x86_64.whl:

Publisher: release.yml on sysid/vimania-uri-rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vimania_uri_rs-2.0.3-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for vimania_uri_rs-2.0.3-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c08b41ac804abe63555497e1e4fcb143b9cdd2416462b13328cb391dc31591d7
MD5 1badb615f31d3a104c225e98d1593771
BLAKE2b-256 5fc6448e40c7dc70bea33c2af32d5a21a9025febbfbeefb92906bacdf2a470c6

See more details on using hashes here.

Provenance

The following attestation bundles were made for vimania_uri_rs-2.0.3-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: release.yml on sysid/vimania-uri-rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vimania_uri_rs-2.0.3-cp313-cp313-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for vimania_uri_rs-2.0.3-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 6e1edf1225fea57764debe2559de23bb7208ddb23bded0ce3d6c592cb423279e
MD5 2e8ca4b9b95af31b29c76153e92f998c
BLAKE2b-256 25c643500a6de8eba665813baf6b90c7af3ae9161dde67fff2be8a7a1f4eb5de

See more details on using hashes here.

Provenance

The following attestation bundles were made for vimania_uri_rs-2.0.3-cp313-cp313-macosx_10_12_x86_64.whl:

Publisher: release.yml on sysid/vimania-uri-rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vimania_uri_rs-2.0.3-cp312-cp312-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for vimania_uri_rs-2.0.3-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 006dabf377015ded53a2c40a06e8968c78bb750bbf516230b3248db0b86d20f9
MD5 348cf06b5a14e45d185549ef7c925fbf
BLAKE2b-256 90c3298c8e1901897dea654a77b34a95f84734c4c36f6ebe9a51bc518ef3f9a9

See more details on using hashes here.

Provenance

The following attestation bundles were made for vimania_uri_rs-2.0.3-cp312-cp312-manylinux_2_34_x86_64.whl:

Publisher: release.yml on sysid/vimania-uri-rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vimania_uri_rs-2.0.3-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for vimania_uri_rs-2.0.3-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 36734fe1caae158649b8293a685b0f901105459544e7c91c1e3ded41a21e05f0
MD5 a18c5829e3cb49b5dcf0a4579ce9b6eb
BLAKE2b-256 b2525c508c1b7d4ac61f980d7f916aff53d00f0329684b945abb7ef283ff4df9

See more details on using hashes here.

Provenance

The following attestation bundles were made for vimania_uri_rs-2.0.3-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: release.yml on sysid/vimania-uri-rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vimania_uri_rs-2.0.3-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for vimania_uri_rs-2.0.3-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 3750ae460601b7856571a3140434d6bb6b27ba7f48b05f493b3e8022c3d3a658
MD5 90ddd84d5f99ed55d46420b322b1c49e
BLAKE2b-256 95dc35eeeb299b2187b8e6900330d77d75ed9b64ebbe32f5a59bf619d1177cf3

See more details on using hashes here.

Provenance

The following attestation bundles were made for vimania_uri_rs-2.0.3-cp312-cp312-macosx_10_12_x86_64.whl:

Publisher: release.yml on sysid/vimania-uri-rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vimania_uri_rs-2.0.3-cp311-cp311-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for vimania_uri_rs-2.0.3-cp311-cp311-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 3dee0063c7bb4942579111807b668a3d6ab88d95e234c495750670b0c604fc22
MD5 7272c6c3c77e808472b9482cbe29f8dd
BLAKE2b-256 60e1a09ebfc1c6f5a35d6bfa5429dea200b128359863691eeeb5c8bf18fdcee2

See more details on using hashes here.

Provenance

The following attestation bundles were made for vimania_uri_rs-2.0.3-cp311-cp311-manylinux_2_34_x86_64.whl:

Publisher: release.yml on sysid/vimania-uri-rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vimania_uri_rs-2.0.3-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for vimania_uri_rs-2.0.3-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 979e114b5ca09ad6ad4f1624877fb15aefbc22ff55e20d8ee772ee3b6182f6e3
MD5 cc81e25c85af6bb78364ae40874ef079
BLAKE2b-256 8d5e89188fa7b85d52520abc8d2868ccb1d4df2f038797295a3467ba5d735d5c

See more details on using hashes here.

Provenance

The following attestation bundles were made for vimania_uri_rs-2.0.3-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: release.yml on sysid/vimania-uri-rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vimania_uri_rs-2.0.3-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for vimania_uri_rs-2.0.3-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 1ffc5de2883e2c61d0ab5cbb4b0afa1ef14d46fb534e8912c7bceb464f20fbda
MD5 a0e26c87770387d9226a4757dbfde8e0
BLAKE2b-256 0c4a9e57a1ef4e1a65d3b253249d0ea621c00a73158e535be93811d7a50469a8

See more details on using hashes here.

Provenance

The following attestation bundles were made for vimania_uri_rs-2.0.3-cp311-cp311-macosx_10_12_x86_64.whl:

Publisher: release.yml on sysid/vimania-uri-rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vimania_uri_rs-2.0.3-cp310-cp310-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for vimania_uri_rs-2.0.3-cp310-cp310-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 adea936417e5ed34353027cbab03cbd75ea766548ea5acffccfb004302544009
MD5 0ab24e82858995477379dd9c26fdf605
BLAKE2b-256 61b8456e60258dd92cfd558625cae1d510e4ef84bd90e29b841ac7e5485688bf

See more details on using hashes here.

Provenance

The following attestation bundles were made for vimania_uri_rs-2.0.3-cp310-cp310-manylinux_2_34_x86_64.whl:

Publisher: release.yml on sysid/vimania-uri-rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vimania_uri_rs-2.0.3-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for vimania_uri_rs-2.0.3-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a022469dca62ecb4760e5fa275438fc70335f10934ac12791aed338f73e989c2
MD5 6bfe90bac71f6da3e3ec03f40f22acf4
BLAKE2b-256 6bbf497180c4f4417a1083888e4e3f3fa8ce4fb40f60d2215080340086900adb

See more details on using hashes here.

Provenance

The following attestation bundles were made for vimania_uri_rs-2.0.3-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: release.yml on sysid/vimania-uri-rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vimania_uri_rs-2.0.3-cp310-cp310-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for vimania_uri_rs-2.0.3-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 7899bbab8b1c4b839d998c509bd2158156b8e670cd90e20c6ba975114476c960
MD5 6e8519959c53117340745509b0e125d2
BLAKE2b-256 0d157ba2472525ed0d0e64bf26844faba8b97ace8c03967b44f4074bb10c4251

See more details on using hashes here.

Provenance

The following attestation bundles were made for vimania_uri_rs-2.0.3-cp310-cp310-macosx_10_12_x86_64.whl:

Publisher: release.yml on sysid/vimania-uri-rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page