Vim Script
Template - plugins written in Python3
vim help | usr_41 write a vim script | usr_41 中文 | vim 内建函数分类 | vim 内建函数
https://github.com/skywind3000/writemdict
https://github.com/skywind3000/thousandTrading
g:var -全局
a:var -函数参数
l:var -函数局部变量
b:var -buffer 局部变量
w:var -window 局部变量
t:var -tab 局部变量
s:var -当前脚本内可见的局部变量
v:var -Vim 预定义的内部变量
<string> == <string :字符串相等
<string> != <string> :字符串不等
<string> =~ <string> :匹配 pattern
<string> !~ <string> :不匹配 pattern
<string> =~# <string> :匹配大小写 pattern
<string> =~? <string> :不匹配大小写 pattern
let data = readfile('config')
if writefile(data, 'config')
echomsg 'write error'
endif
字串转list
let S = '[''123'', ''456'', ''789'']'
let L = eval(S)"
if type(getdata) == 4
for key in keys(getdata)
let query[key] = getdata[key]
endfor
endif
if type(l:foo_list) == v:t_list
for [v1, v2] in [[1,2], [3,4]]
endfor
function! b:RangeSize() range
echo a:lastline - a:firstline
endfunction
let MyClass = {'foo': 'Foo'}
function MyClass.print() dict
echo self.foo
endfunction
let = instance = deepcopy(MyClass)
call instance.print()
let instance.foo = 'Bar'
call instance.print()
:help usr_41
:help function-list
:help syn-keyword
:help syn-match
:help iskeyword
取选中的文本
function! s:get_visual_selection()
let [line_start, column_start] = getpos("'<")[1:2]
let [line_end, column_end] = getpos("'>")[1:2]
let lines = getline(line_start, line_end)
if len(lines) == 0
return ''
endif
let lines[-1] = lines[-1][: column_end - 2]
let lines[0] = lines[0][column_start - 1:]
return join(lines, "\n")
endfunction
你运行set filetype=derp,vim会查找~/.vim/ftplugin文件。如果这个文件存在的话,vim就会执行它。
如果derp是文件夹,~/.vim/ftplugin/derp/目录下的所有*.vim文件
设置新文件类型:
au BufNewFile,BufRead *.pn set filetype=potion
设置to和time为关键字,并设置高亮
syntax keyword potionKeyword loop times to while
syntax keyword potionKeyword if elsif else
syntax keyword potionKeyword class return
highlight link potionKeyword Keyword
高亮函数:
syatax keyword potionFunction print join string
highlight link potionFunction Function
定义#为注释部分:
syntax match potionComment "\v#.*$"
highlight link potionComment Comment
正则表达式是以\v开始的,这个是在告诉vim用“very magic”模式
高亮操作符:
syntax match potionOperator "\v\*\="
syntax match potionOperator "\v/\="
syntax match potionOperator "\v\+\="
syntax match potionOperator "\v-\="
syntax match potionOperator "\v\*"
syntax match potionOperator "\v/"
syntax match potionOperator "\v\+"
syntax match potionOperator "\v-"
syntax match potionOperator "\v?"
高亮字符串:
syntax region potionString start=/\v"/ skip=/\v\\./ end=/\v"/
highlight link potionString String
外部命令:
:echo system("ls")
:slient !echo Hello, world.
运行:set ft=potion来重新加载它,然后使用b映射。Vim会在屏幕的底部输出字节码,一旦你确定这段代码能够正常工作,就可以吧echom这一行给删除了。
动加载的文件autoload/myplugin/somefile.vm。并且文件内部的函数的定义需要带上全路径:
function myplugin#somefile#Hello()
" ...
endfunction
:setlocal wrap
:autocmd BufNewFile,BufReadFile *.html :write
:autocmd FileType python nnoremap c I#
d/return
function Varg(...)
echom a:0
echom a:1
echo a:000
endfunction
call Varg("a","b")
output:
a:0 = 2
a:1 = a
a:2 = b
a:000 = list of all arguments
:echo split("one two three")
:echo split("one,two,three",",")
:echo join(["foo","bar"],"...")
:echom tolower("Foo")
:echom toupper("Foo")
:execute "echo 'hello'"
需要用双斜杠来表示单斜杠
function! QuickfixToggle()
if g:quickfix_is_open:
cclose
let g:quick_fix_is_open = 0
else
copen
let g:quick_fix_is_open = 1
endif
endfunction
相对路径和全局路径
:echom expand('%')
:echom expand('%:p')
:echom fnamemodify('foo.txt',':p')
列出当前目录所有文件
:echo globpath('.','*')
:echo split(globpath('.','*.txt'),'\n')
command! -nargs=1 Dict exec('py youdaoDict(<f-args>)')
-nargs=0 No arguments are allowed (the default)
-nargs=1 Exactly one argument is required
-nargs=* Any number of arguments are allowed (0, 1, or many)
-nargs=? 0 or 1 arguments are allowed
-nargs=+ Arguments must be supplied, but any number are allowed