From 31768c56ce33aef8a582fa7bbcd4eae502c8cd75 Mon Sep 17 00:00:00 2001 From: Wang Shidong Date: Tue, 28 Jul 2020 21:53:24 +0800 Subject: [PATCH] Add type func (#3666) --- autoload/SpaceVim/api/vim.vim | 44 +++++++++++++++++++++++++ autoload/SpaceVim/custom.vim | 9 ++--- docs/api/vim.md | 62 +++++++++++++++++++++++++++++++++++ docs/documentation.md | 2 +- 4 files changed, 112 insertions(+), 5 deletions(-) create mode 100644 docs/api/vim.md diff --git a/autoload/SpaceVim/api/vim.vim b/autoload/SpaceVim/api/vim.vim index 25ee60022..af6188710 100644 --- a/autoload/SpaceVim/api/vim.vim +++ b/autoload/SpaceVim/api/vim.vim @@ -134,6 +134,50 @@ function! s:self.is_qf_win(winnr) abort return a:winnr ==# self.get_qf_winnr() endfunction +function! s:self.is_number(var) abort + return type(a:var) ==# 0 +endfunction + +function! s:self.is_string(var) abort + return type(a:var) ==# 1 +endfunction + +function! s:self.is_func(var) abort + return type(a:var) ==# 2 +endfunction + +function! s:self.is_list(var) abort + return type(a:var) ==# 3 +endfunction + +function! s:self.is_dict(var) abort + return type(a:var) ==# 4 +endfunction + +function! s:self.is_float(var) abort + return type(a:var) ==# 5 +endfunction + +function! s:self.is_bool(var) abort + return type(a:var) ==# 6 +endfunction + +function! s:self.is_none(var) abort + return type(a:var) ==# 7 +endfunction + +function! s:self.is_job(var) abort + return type(a:var) ==# 8 +endfunction + +function! s:self.is_channel(var) abort + return type(a:var) ==# 9 +endfunction + +function! s:self.is_blob(var) abort + return type(a:var) ==# 10 +endfunction + function! SpaceVim#api#vim#get() abort return deepcopy(s:self) endfunction diff --git a/autoload/SpaceVim/custom.vim b/autoload/SpaceVim/custom.vim index 5cc9bdb52..3df8c3ab2 100644 --- a/autoload/SpaceVim/custom.vim +++ b/autoload/SpaceVim/custom.vim @@ -9,6 +9,7 @@ let s:TOML = SpaceVim#api#import('data#toml') let s:JSON = SpaceVim#api#import('data#json') let s:FILE = SpaceVim#api#import('file') +let s:VIM = SpaceVim#api#import('vim') let s:CMP = SpaceVim#api#import('vim#compatible') function! SpaceVim#custom#profile(dict) abort @@ -241,13 +242,13 @@ function! s:opt_type(opt) abort " @bugupstream viml-parser seem do not think this is used argument let opt = a:opt let var = get(g:, 'spacevim_' . opt, '') - if type(var) == type('') + if s:VIM.is_string(var) return '[string]' - elseif type(var) == 5 + elseif s:VIM.is_bool(var) return '[boolean]' - elseif type(var) == 0 + elseif s:VIM.is_number(var) return '[number]' - elseif type(var) == 3 + elseif s:VIM.is_list(var) return '[list]' endif endfunction diff --git a/docs/api/vim.md b/docs/api/vim.md new file mode 100644 index 000000000..dd3f306d7 --- /dev/null +++ b/docs/api/vim.md @@ -0,0 +1,62 @@ +--- +title: "vim api" +description: "vim API provides general vim functions." +--- + +# [Available APIs](../) >> vim + + + +- [Intro](#intro) +- [Functions](#functions) + + + +## Intro + +vim API provides general vim functions. + +## Functions + +**Type checking:** + +- `is_number(var)` +- `is_string(var)` +- `is_func(var)` +- `is_list(var)` +- `is_dict(var)` +- `is_float(var)` +- `is_bool(var)` +- `is_none(var)` +- `is_job(var)` +- `is_channel(var)` +- `is_blob(var)` + +here is an example for using type checking functions: + +```vim +let s:VIM = SpaceVim#api#import('vim') +let var = 'hello world' +if s:VIM.is_string(var) + echo 'It is a string' +endif +``` + +**Others:** + +- `win_set_cursor(winid, pos)`: change the cursor position of specific window. +- `jumps()`: return the jump list +- `setbufvar(bufnr, dict)`: the second argv is a dictionary, set all the options based on the keys in `dict`. +for example: + ```vim + let s:VIM = SpaceVim#api#import('vim') + call s:VIM.setbufvar(s:bufnr, { + \ '&filetype' : 'leaderGuide', + \ '&number' : 0, + \ '&relativenumber' : 0, + \ '&list' : 0, + \ '&modeline' : 0, + \ '&wrap' : 0, + \ '&buflisted' : 0, + \ } + ``` diff --git a/docs/documentation.md b/docs/documentation.md index d592f0cfe..2e14d347a 100644 --- a/docs/documentation.md +++ b/docs/documentation.md @@ -1825,7 +1825,7 @@ function! s:make_tasks() abort return {} endif endfunction -call SpaceVim#plugins#tasks#reg_provider(funcref('s:make_tasks')) +call SpaceVim#plugins#tasks#reg_provider(function('s:make_tasks')) ``` with above configuration, you will see following tasks in SpaceVim repo: