All Projects → arzg → Vim Strand

arzg / Vim Strand

Licence: isc
A barebones Vim plugin manger written in Rust

Programming Languages

rust
11053 projects

Projects that are alternatives of or similar to Vim Strand

Hot Reload.vim
A (Neo)vim plugin for Flutter to automatically hot reload the project every time a file is saved
Stars: ✭ 33 (-13.16%)
Mutual labels:  vim-plugin, vim-plugins
Context.vim
Vim plugin that shows the context of the currently visible buffer contents
Stars: ✭ 688 (+1710.53%)
Mutual labels:  vim-plugin, vim-plugins
Tornado Celery
Non-blocking Celery client for Tornado
Stars: ✭ 561 (+1376.32%)
Mutual labels:  async, asyncio
Vim Markdown Toc
A vim 7.4+ plugin to generate table of contents for Markdown files.
Stars: ✭ 427 (+1023.68%)
Mutual labels:  vim-plugin, vim-plugins
Fennel
A task queue library for Python and Redis
Stars: ✭ 24 (-36.84%)
Mutual labels:  async, asyncio
Nerdcommenter
Vim plugin for intensely nerdy commenting powers
Stars: ✭ 4,454 (+11621.05%)
Mutual labels:  vim-plugin, vim-plugins
Alchemist.vim
Elixir Integration Into Vim
Stars: ✭ 632 (+1563.16%)
Mutual labels:  vim-plugin, vim-plugins
Picoweb
Really minimal web application framework for the Pycopy project (minimalist Python dialect) and its "uasyncio" async framework
Stars: ✭ 361 (+850%)
Mutual labels:  async, asyncio
Vimcompletesme
You don't Complete Me; Vim Completes Me! A super simple, super minimal, super light-weight tab completion plugin for Vim.
Stars: ✭ 752 (+1878.95%)
Mutual labels:  vim-plugin, vim-plugins
Fastapi Users
Ready-to-use and customizable users management for FastAPI
Stars: ✭ 713 (+1776.32%)
Mutual labels:  async, asyncio
Lahja
Lahja is a generic multi process event bus implementation written in Python 3.6+ to enable lightweight inter-process communication, based on non-blocking asyncio
Stars: ✭ 374 (+884.21%)
Mutual labels:  async, asyncio
Fastapi
FastAPI framework, high performance, easy to learn, fast to code, ready for production
Stars: ✭ 39,588 (+104078.95%)
Mutual labels:  async, asyncio
Requests Threads
🎭 Twisted Deferred Thread backend for Requests.
Stars: ✭ 366 (+863.16%)
Mutual labels:  async, asyncio
Tmux Complete.vim
Vim plugin for insert mode completion of words in adjacent tmux panes
Stars: ✭ 447 (+1076.32%)
Mutual labels:  vim-plugin, vim-plugins
Github Stats
Better GitHub statistics images for your profile, no external server required
Stars: ✭ 338 (+789.47%)
Mutual labels:  async, asyncio
Aredis
redis client for Python asyncio (has support for redis server, sentinel and cluster)
Stars: ✭ 576 (+1415.79%)
Mutual labels:  async, asyncio
Pear Tree
A Vim auto-pair plugin that supports multi-character pairs, intelligent matching, and more
Stars: ✭ 327 (+760.53%)
Mutual labels:  vim-plugin, vim-plugins
Example Hftish
Example Order Book Imbalance Algorithm
Stars: ✭ 355 (+834.21%)
Mutual labels:  async, asyncio
Arq
Fast job queuing and RPC in python with asyncio and redis.
Stars: ✭ 695 (+1728.95%)
Mutual labels:  async, asyncio
Chili
Chili: HTTP Served Hot
Stars: ✭ 7 (-81.58%)
Mutual labels:  async, asyncio

vim-strand

strand installing thirty-one plugins concurrently.

Actions Status

A barebones plugin manager for Vim in Rust that takes advantage of Vim’s packages feature. Its (very ambitious) goal is to provide the fastest out-of-the-box fresh plugin installation of all Vim plugin managers.

Installation

With Homebrew

If you’re using Homebrew, installation is as easy as:

$ brew tap arzg/homebrew-vim-strand
$ brew install strand

From Releases

This is the recommended method for most users, as it allows you to skip the step of installing Rust and compiling strand yourself. Simply hop over to the latest Release and download the binary appropriate to your machine. (Note that the ubuntu-latest binary also supports other Linux distributions).

From source

If your OS is not catered to in the Releases section, you will have to clone and compile strand yourself. This means you will need Rust installed on your system. If you don’t have it already I recommend using rustup. Once you have Rust installed, run the following commands from inside your clone of this repo:

> git checkout $(git describe --tags $(git rev-list --tags --max-count 1))
> RUSTFLAGS='--codegen target-cpu=native' cargo install --force --path .

This first checks out the last tag (stable version) of the repository, and then compiles it with optimisations specific to your native CPU architecture, finally installing the generated binary to ~/.cargo/bin/strand for your personal use.

Usage

The first thing you need to do to get started with strand is to set up a configuration file – strand uses the YAML format. Put it in the location specified by strand --config-location. Here is an example:

plugin_dir: ~/.vim/pack/strand/start

plugins:
  # GitHub, GitLab and Bitbucket repos are all fully supported
  - Git: [email protected]/vim-surround
  - Git: [email protected]/vim-quantum
  - Git: [email protected]/vim-surround

  # GitHub is the default Git provider, so ‘[email protected]’ can be elided:
  - Git: tpope/vim-endwise

  - Git: [email protected]/vim-quantum:new-styles # Specify a branch name,
  - Git: tpope/vim-unimpaired:v2.0                 # a tag name,
  - Git: romainl/vim-qf:4a97465                    # or a commit hash.

  # Or just the URL of a tar.gz archive
  - Archive: https://codeload.github.com/romainl/vim-qlist/tar.gz/master

When you run strand in your shell, the specified plugin_dir is completely emptied, after which all the plugins in the config file are installed afresh. This property allows you to run strand when you want to update your plugins or when you have removed a plugin from your config file and want it gone – all from one command.

The same syntax for specifying plugins also applies to the install subcommand, to which you can provide a list of plugins to temporarily install:

> strand install [email protected]/vim-qf:4a97465 https://codeload.github.com/romainl/vim-qlist/tar.gz/master

The next time you run strand these plugins will be removed (unless they are in your config file).

Philosophy

To keep the plugin manager as simple as possible, it only provides one function: re-installing the entire plugin directory each time. This avoids the need for a clean command and an update command. For maximum speed, strand is written in Rust, using the wonderful async-std library for concurrent task support. Additionally, instead of cloning Git repositories by either shelling out to git or using a Git binding, strand essentially acts as a parallel tar.gz downloader, making use of the automated compressed archive generation of Git hosting providers like GitHub and Bitbucket to avoid downloading extraneous Git info. (This can also be partially achieved with git clone --depth=1, but this AFAIK is not compressed like tar.gz is.)

Motivation

Once I realised that I barely utilised the more advanced features of Vim plugin managers like vim-plug, I decided to start developing a small script to maintain my Vim plugin collection. Conveniently, Vim had just recently gotten support for Pathogen-like runtimepath management (:help packages), meaning that plugin managers now had only one job – downloading and updating plugins. So far the only plugin manager I’ve seen that takes advantage of packages is minpac. At one point that duct taped-together script from earlier would download plugins asynchronously using Bash’s job control (& and wait), leading to very fast install times. To keep things simple, the script just had a hard-coded list of plugins in an array that it would re-download fully each time, instead of keeping track of which plugins still needed to be installed or which plugins needed updating. I decided to rewrite the script in Rust to learn about its async IO capabilities and get better at the language.

Prior art

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].