Update vimscript

This commit is contained in:
Rico Sta. Cruz 2015-04-16 23:02:00 +08:00
parent e21f26a19c
commit fc9a2f6748
1 changed files with 312 additions and 52 deletions

View File

@ -3,20 +3,276 @@ title: vimscript
layout: default layout: default
--- ---
Variables
---------
```vim
let var = "hello"
```
### Variable prefixes
```vim
let g:ack_options = '-s -H' " g: global
let s:ack_program = "ack" " s: local to script
let l:foo = 'bar' " l: local to function
let w:foo = 'bar' " w: window
let b:state = 'on' " b: buffer
let t:state = 'off' " t: tab
echo v:var " v: vim special
let @/ = "" " @ register (this clears last search patterN)
echo $PATH " $ env
" they're actually a dictionary
keys(s:)
```
### Vim options
Prefix with `&`
```vim
echo "tabstop is " . &tabstop
if &insertmode
echo &g:option
echo &l:option
```
### Operation assignment
```vim
let var -= 2
let var += 5
let var .= "string" " concat
```
### Strings
```vim
let str = "String"
let str = "String with \n newline"
let literal = 'literal, no \ escaping'
echo "result = " . re " concatenation
```
```vim
strlen(str) " length
strchars(str) " character length
```
Functions
---------
```vim
" prefix with s: for local script-only functions
function! s:Initialize(cmd, args)
" a: prefix for arguments
echo "Command: " . a:cmd
return true
endfunction
```
### Calling functions
```vim
call s:Initialize()
call s:Initialize("hello")
```
### Consuming arguments
```vim
echo "Result: " . s:Initialize()
```
Commands
--------
```vim
command! Save set fo=want tw=80 nowrap
command! Save call s:Foo()
```
Flow
----
### Conditionals
```vim
let char = getchar()
if char == "\<LeftMouse>"
" ...
elseif char == "\<RightMouse>"
" ...
else
" ...
endif
```
### Boolean logic
```vim
if g:use_dispatch && s:has_dispatch
endif
```
Lists
-----
```vim
let mylist = [1, two, 3, "four"]
let first = mylist[0]
let last = mylist[-1]
" Supresses errors
let second = get(mylist, 1)
let second = get(mylist, 1, "NONE")
len(mylist)
empty(mylist)
sort(list)
let sortedlist = sort(copy(list))
split('hello there world', ' ')
```
### Concatenation
```vim
let longlist = mylist + [5, 6]
let mylist += [7, 8]
```
### Sublists
```vim
let shortlist = mylist[2:-1]
let shortlist = mylist[2:] " same
let shortlist = mylist[2:2] " one item
```
### Push
```vim
let alist = [1, 2, 3]
let alist = add(alist, 4)
```
### Map
```vim
call map(files, "bufname(v:val)") " use v:val for value
call filter(files, 'v:val != ""')
```
Dictionaries
------------
```
let colors = {
\ "apple": "red",
\ "banana": "yellow"
}
echo colors["a"]
echo get(colors, "apple") " supress error
remove(colors, "apple")
keys(dict)
len(dict)
```
### Extending
```
" Extending with more
let extend(s:fruits, { ... })
```
Casting
-------
```vim
str2float("2.3")
str2nr("3")
float2nr("3.14")
```
Math
----
```vim
sqrt(100)
floor(3.5)
ceil(3.3)
abs(-3.4)
sin() cos() tan()
sinh() cosh() tanh()
asin() acos() atan()
```
Vim-isms
--------
### Execute a command
Runs an ex command you typically run with `:`
execute "vsplit"
execute "e " . fnameescape(filename)
### Echo
```
echohl WarningMsg | echomsg "=> " . a:msg | echohl None
```
### Propmts
```
let result = confirm("Sure?")
execute "confirm q"
```
### Built-ins
```
has("feature") " :h feature-list
executable("python")
globpath(&rtp, "syntax/c.vim")
exists("$ENV")
exists(":command")
exists("variable")
exists("+option")
exists("g:...")
```
Mapping Mapping
------- -------
nnoremap ```
vmap nnoremap
... vmap
...
```
Components: Components:
[nvixso](nore)map ```
^ ^ [nvixso](nore)map
| don't recurse ^ ^
| | don't recurse
normal, visual, insert, eX mode, select, operator-pending |
normal, visual, insert, eX mode, select, operator-pending
```
Arguments: Arguments:
@ -24,69 +280,73 @@ Arguments:
- `<silent>` - no echo - `<silent>` - no echo
- `<nowait>` - `<nowait>`
Stuff
-----
let var = "hello"
echo "var = " . var
Functions
---------
has("feature") " :h feature-list
executable("python")
globpath(&rtp, "syntax/c.vim")
if getchar() == "\<LeftMouse>"
endif
exe "vsplit"
Syntax Syntax
------ ------
### Highlights ### Highlights
hi Comment ```
term=bold,underline hi Comment
gui=bold term=bold,underline
ctermfg=4 gui=bold
guifg=#80a0ff ctermfg=4
guifg=#80a0ff
```
### Filetype detection ### Filetype detection
augroup filetypedetect ```
au! BufNewFile,BufRead *.json setf javascript augroup filetypedetect
augroup END au! BufNewFile,BufRead *.json setf javascript
augroup END
au Filetype markdown setlocal spell au Filetype markdown setlocal spell
```
### Conceal ### Conceal
set conceallevel=2 ```
syn match newLine "<br>" conceal cchar=} set conceallevel=2
hi newLine guifg=green syn match newLine "<br>" conceal cchar=}
hi newLine guifg=green
```
### Region conceal ### Region conceal
syn region inBold concealends matchgroup=bTag start="<b>" end="</b>" ```
hi inBold gui=bold syn region inBold concealends matchgroup=bTag start="<b>" end="</b>"
hi bTag guifg=blue hi inBold gui=bold
hi bTag guifg=blue
```
### Syntax ### Syntax
syn match :name ":regex" :flags ```
syn match :name ":regex" :flags
syn region Comment start="/\*" end="\*/" syn region Comment start="/\*" end="\*/"
syn region String start=+"+ end=+"+ skip=+\\"+ syn region String start=+"+ end=+"+ skip=+\\"+
syn cluster :name contains=:n1,:n2,:n3... syn cluster :name contains=:n1,:n2,:n3...
flags: flags:
keepend keepend
oneline oneline
nextgroup= nextgroup=
contains= contains=
contained contained
hi def link markdownH1 htmlH1 hi def link markdownH1 htmlH1
```
### Include guards
```
if exists('g:loaded_myplugin')
finish
endif
" ...
let g:loaded_myplugin = 1
```