All Projects → vim-jp → Vital.vim

vim-jp / Vital.vim

A comprehensive Vim utility functions for Vim plugins

Projects that are alternatives of or similar to Vital.vim

Sureness
A simple and efficient open-source security framework that focus on protection of restful api.
Stars: ✭ 254 (-49.6%)
Mutual labels:  framework, library
Towel
Throw in the towel.
Stars: ✭ 333 (-33.93%)
Mutual labels:  framework, library
Swiftuix
Extensions and additions to the standard SwiftUI library.
Stars: ✭ 4,087 (+710.91%)
Mutual labels:  framework, library
Goview
Goview is a lightweight, minimalist and idiomatic template library based on golang html/template for building Go web application.
Stars: ✭ 213 (-57.74%)
Mutual labels:  framework, library
Shadowview
An iOS Library that makes shadows management easy on UIView.
Stars: ✭ 391 (-22.42%)
Mutual labels:  framework, library
Finalcut
A text-based widget toolkit
Stars: ✭ 244 (-51.59%)
Mutual labels:  framework, library
Spruce Ios
Swift library for choreographing animations on the screen.
Stars: ✭ 3,249 (+544.64%)
Mutual labels:  framework, library
Operatorkit
An opinionated Go framework for developing Kubernetes operators
Stars: ✭ 179 (-64.48%)
Mutual labels:  framework, library
Kooper
Kooper is a simple Go library to create Kubernetes operators and controllers.
Stars: ✭ 388 (-23.02%)
Mutual labels:  framework, library
Distortos
object-oriented C++ RTOS for microcontrollers
Stars: ✭ 354 (-29.76%)
Mutual labels:  framework, library
Messenger4j
A Java library for building Chatbots on the Facebook Messenger Platform - easy and fast.
Stars: ✭ 199 (-60.52%)
Mutual labels:  framework, library
Bunny
BunnyJS - Lightweight native (vanilla) JavaScript (JS) and ECMAScript 6 (ES6) browser library, package of small stand-alone components without dependencies: FormData, upload, image preview, HTML5 validation, Autocomplete, Dropdown, Calendar, Datepicker, Ajax, Datatable, Pagination, URL, Template engine, Element positioning, smooth scrolling, routing, inversion of control and more. Simple syntax and architecture. Next generation jQuery and front-end framework. Documentation and examples available.
Stars: ✭ 473 (-6.15%)
Mutual labels:  framework, library
Duaef duik
Duduf After Effects Framework | Duik
Stars: ✭ 197 (-60.91%)
Mutual labels:  framework, library
Teaset
A UI library for react native, provides 20+ pure JS(ES6) components, focusing on content display and action control.
Stars: ✭ 2,845 (+464.48%)
Mutual labels:  framework, library
Autoserver
Create a full-featured REST/GraphQL API from a configuration file
Stars: ✭ 188 (-62.7%)
Mutual labels:  framework, library
Framework7
Full featured HTML framework for building iOS & Android apps
Stars: ✭ 16,560 (+3185.71%)
Mutual labels:  framework, library
Avalanche
Avalanche: a End-to-End Library for Continual Learning.
Stars: ✭ 151 (-70.04%)
Mutual labels:  framework, library
Fe
前端热门文章阅读
Stars: ✭ 174 (-65.48%)
Mutual labels:  framework, library
Promises
Promises is a modern framework that provides a synchronization construct for Swift and Objective-C.
Stars: ✭ 3,576 (+609.52%)
Mutual labels:  framework, library
Vugu
Vugu: A modern UI library for Go+WebAssembly (experimental)
Stars: ✭ 4,251 (+743.45%)
Mutual labels:  framework, library

vital.vim Build Status Build status codecov

Join the chat at https://gitter.im/vim-jp/vital.vim

A comprehensive Vim utility functions for Vim plugins.

Requirements

Modules in vital.vim basically support Vim 8.1 or later. We guarantee that the following versions of Vim are supported:

  • The latest major version (8.2.*)
  • The previous major version (8.1.*)

And some modules have stricter requirements and additional dependencies. Please read the docs of each module before using them.

Handling libraries in Vim WAS hard

Since Vim script has no built-in module system, using external libraries had been troublesome.

  • If you decide to include the libraries in your plugin repository by copy&paste manually: You are responsible for updating the libraries by yourself. sigh You have to find backward-incompatible changes that can break your plugin from every changes between the previous version you installed in the past. super tedious
  • If you want the plugin users to install the dependent libraries: The users will receive additional steps to get it working with your plugin. not easy Even worse, they may fail to install the dependencies properly. a bad dream

What vital.vim does for the problems

vital.vim will embed libraries into your plugin repository and thus your plugin users don't need to install them separately. Additionally, vital.vim can also resolve the dependencies according to the declaration on vital modules.

Concretely, vital.vim resolves the dependencies among vital modules by the module bundler called vitalizer. vitalizer can bundle only necessary modules and can update an existing bundle. On updating the modules, vitalizer shows any breaking changes to help you migrate to the new version of vital modules.

What vital.vim provides

Module Description
Assertion assertion library
Async.Promise An asynchronous operation like ES6 Promise
Bitwise bitwise operators
Color color conversion library between RGB/HSL/terminal code
ConcurrentProcess manages processes concurrently with vimproc
Data.Base64 base64 utilities library
Data.Base64.RFC4648 base64 RFC4648 utilities library
Data.Base64.URLSafe base64 URLSafe utilities library
Data.Base32 base32 utilities library
Data.Base32.Crockford base32 Crockford utilities library
Data.Base32.Hex base32 Hex utilities library
Data.Base32.RFC4648 base32 RFC4648 utilities library
Data.Base16 base16 utilities library
Data.BigNum multi precision integer library
Data.Closure Provide Closure object
Data.Counter Counter library to support convenient tallies
Data.Dict dictionary utilities library
Data.Either either value library
Data.LazyList lazy list including file io
Data.List list utilities library
Data.List.Closure Data.List provider for Data.Closure
Data.List.Byte Data.List provider for Bytes-List and other bytes-list like data converter.
Data.Optional optional value library
Data.OrderedSet ordered collection library
Data.Set set and frozenset data structure ported from python
Data.String string utilities library
Data.String.Interpolation build string with ${}
Data.Tree tree utilities library
Database.SQLite sqlite utilities library
DateTime date and time library
Experimental.Functor Utilities for functor
Hash.HMAC Hash-based Message Authentication Code
Hash.MD5 MD5 encoding
Hash.SHA1 SHA1 encoding
Interpreter.Brainf__k Brainf**k interpreter
Locale.Message very simple message localization library
Mapping Utilities for mapping
Math Mathematical functions
OptionParser Option parser library for Vim
Prelude crucial functions
Process Utilities for process
Random.Mt19937ar random number generator using mt19937ar
Random.Xor128 random number generator using xor128
Random Random utility frontend library
Stream A streaming library
System.Cache An unified cache system
System.File filesystem utilities library
System.Filepath path string utilities library
System.Process A cross-platform process utilities
Text.CSV CSV library
Text.INI INI file library
Text.LTSV LTSV library
Text.Lexer lexer library
Text.Parser parser library
Text.TOML TOML library
Text.Table Character table library
Vim.BufferManager buffer manager
Vim.Buffer Vim's buffer related stuff in general
Vim.Compat Vim compatibility wrapper functions
Vim.Guard Guard options/variables
Vim.Message Vim message functions
Vim.Python +python/+python3 compatibility functions
Vim.ScriptLocal Get script-local things
Vim.Search Vim's [I like function
Vim.ViewTracer Trace window and tabpage
Vim.WindowLayout lays out windows declaratively
Web.HTML HTML parser written in pure Vim script
Web.HTTP simple HTTP client library
Web.JSON JSON parser written in pure Vim script
Web.URI URI manipulation library
Web.XML XML parser written in pure Vim script

... and you can also create your own vital modules. Please see External vital modules for more information.

Let's get started

Install modules for your own plugin

Use :Vitalize to install modules. Assuming your Vim plugin name is your_plugin_name and plugin directory is your_plugin_dir. Please see the help for more details.

:Vitalize --name=your_plugin_name $HOME/.vim/bundle/your_plugin_dir/

You can also install only specified modules; recommended for making your repository size small, assuming you are going to upload it to a remote repository

:Vitalize --name=your_plugin_name $HOME/.vim/bundle/your_plugin_dir/ Data.String Data.List

Use vital functions

Assuming your Vim plugin name is your_plugin_name. You can define your utility function set your_plugin_name#util just by

let s:Process = vital#your_plugin_name#import('System.Process')

function! your_plugin_name#util#system(...)
  return s:Process.execute(a:000)
endfunction
" run
" echo your_plugin_name#util#system('echo','abc')
" -> $ echo abc

and then you can call functions by your_plugin_name#util#system(), without taking care of vital.vim itself. It's all hidden.

Vital has module system. The below is an example to import/load a module Math and to call a function lcm() of the module.

" Recommended way
let s:M = vital#your_plugin_name#import('Math')
call s:M.lcm([2, 3, 4])
" -> 12

or

" Alternative way
let s:V = vital#your_plugin_name#new()
let s:M = s:V.import('Math')
call s:M.lcm([2, 3, 4])
" -> 12

or

" Alternative way only if you rarely use the module
let s:V = vital#your_plugin_name#new()
call s:V.load('Math')
call s:V.Math.lcm([2, 3, 4])
" -> 12

or

" Available, but we don't recommend this very much
let s:V = vital#your_plugin_name#new()
call s:V.import('Math', s:)
call s:lcm([2, 3, 4])
" -> 12

We recommend you to use a capital letter for a Vital module dictionary to assign.

Plugins Using vital.vim

A lot of vim plugins are using vital.vim

Badges

It is not necessary but we recommend adding a badge to your project README to make the vital.vim developers happy ;-) The following is a markdown snippet.

[![Powered by vital.vim](https://img.shields.io/badge/powered%20by-vital.vim-80273f.svg)](https://github.com/vim-jp/vital.vim)

The badge uses Shields.io so you can customize the looks as like:

  • Powered by vital.vim (Default)
  • Powered by vital.vim by adding ?style=plastic
  • Powered by vital.vim by adding ?style=flat
  • Powered by vital.vim by adding ?style=flat-square

If you want to become a vital developer

Become a vital.vim Developer

References

License

NYSL

Japanese original text: http://www.kmonos.net/nysl/

What's NYSL? and Why did we chose it?

NYSL is a very loose license like a Beer License, or more like WTFPL. See NYSL for details. (English and Japanese)

First, vital.vim is a bundling (static) library. We think everyone should be able to use it easily, without worrying about licensing stuff too much.

Second, In Japan, Strict Public Domain might be invalid. You outside Japan may interpret simply the license as Public Domain.

That's why we chose NYSL.

(See https://github.com/vim-jp/vital.vim/issues/26 about the discussion.)

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].