__ _ __
____ / /_ (_)__ _____/ /_
/ __ \/ __ \ / / _ \/ ___/ __/
/ /_/ / /_/ / / / __/ /__/ /_
\____/_.___/_/ /\___/\___/\__/
/___/
object.vim
is a minimal framework for Python-like programming in VimScript.
- Defining classes and creating instances.
let MyClass = object#class('MyClass')
let var = object#new(MyClass)
- Calling methods of parents and siblings with
super()
.
" MyClass as above.
function! MyClass.__init__()
call object#super(MyClass, self).__init__()
let self.data = 1
endfunction
- Creating Lambdas.
let x = reverse(range(3))
echo sort(x, object#lambda('x y', 'x - y'))
[0, 1, 2]
- Iterator and for loop construct.
echo object#list(object#zip('abc', range(3)))
[['a', 0], ['b', 1], ['c', 2]]
let dict = {'foo': 1, 'bar': 2}
call object#for('key val', items(dict), 'echo key val')
foo 1
bar 2
- Open files for reading and writing.
let f = object#open('data.txt', 'r')
echo object#repr(f)
<open file 'data.txt', mode 'r'>
echo f.read()
'All the lines concatenated with newline.'
- Wrappers for built-in types for inheritance.
let dict = object#dict_()
echo object#repr(dict)
<'dict' type>
let MyDict = object#class('MyDict', dict)
let var = object#new(MyDict, {'foo': 1})
echo var.values()
[['foo', 1]]
- A bunch of customizable protocol functions.
echo object#len(range(10))
10
echo object#contains('', 'string')
1
let object = object#object_()
echo object#dir(object)
['__name__', '__bases__', '__base__', '__repr__', '__class__', '__init__', '__mro__']
- Hashing arbitrary objects.
echo object#hash('this is a string')
197650594
echo object#hash(-1234)
2147482414
echo object#hash(function('tr'))
233815837
- Class-based exceptions.
let except = object#except#builtins()
call object#class('MyException', except.Exception, g:)
call object#raise(MyException)
E605: Exception not caught: MyException:
- Shallow namespace
object#
. - Multiple inheritances powered by C3 linearization.
- A complete set of Python-like built-in functions.
- True lambda with closure and named arguments.
- True iterator and
zip()
andenumerate()
. - Hash (nearly) arbitrary object.
- Read and write files with
open()
.
This plugin follows the standard runtime path structure, so it can be installed with a variety of plugin managers:
Plugin Manager | Command |
---|---|
NeoBundle | NeoBundle 'cgsdfc/object.vim' |
Vundle | Plugin 'cgsdfc/object.vim' |
Plug | Plug 'cgsdfc/object.vim' |
VAM | call vam#ActivateAddons(['vim-airline']) |
Dein | call dein#add('cgsdfc/object.vim') |
minpac | call minpac#add('cgsdfc/object.vim') |
- vim-maktaba for handling built-in type.
- vader.vim for unit tests.
- vimdoc for generating the help file from comments.
Please read the docs or after installation, run :help object
to see the full documents.
If you find our software useful in your research, please consider citing us as follows:
@misc{cong_objectvim_2018,
title = {object.vim: {A} minimal framework for {Python}-like programming in {VimScript}.},
shorttitle = {object.vim},
url = {https://github.com/cgsdfc/object.vim},
abstract = {object.vim is a minimal framework for Python-like programming in VimScript. It provides some of the core features of the Python programming language in the form of VimScript functions and dictionaries, such as class-based object-oriented programming, lambda functions, iterators, and exceptions. It is also an interesting try to implement features of a high-level language in terms of another lower-level language.},
author = {Cong, Feng},
year = {2018},
}