Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
0% found this document useful (0 votes)
59 views

Vim Scripting Cheatsheet

The document provides a Vim scripting cheatsheet with examples of variables, strings, functions, loops, custom commands, and flow control in Vim script. It shows how to define and use variables with different prefixes, concatenate and manipulate strings, write functions with arguments and return values, create for and while loops, define commands that call functions, and add conditionals and truth testing to control script flow.

Uploaded by

Giova Rossi
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
59 views

Vim Scripting Cheatsheet

The document provides a Vim scripting cheatsheet with examples of variables, strings, functions, loops, custom commands, and flow control in Vim script. It shows how to define and use variables with different prefixes, concatenate and manipulate strings, write functions with arguments and return values, create for and while loops, define commands that call functions, and add conditionals and truth testing to control script flow.

Uploaded by

Giova Rossi
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 6

Vim scripting 

cheatsheet
Start hacking Learn by example

let name = "John" function! SuperTab()


echo "Hello, " . name let l:part = strpart(getline('.'),col('.')-2,1)
if (l:part =~ '^\W\?$')
return "\<Tab>"
You can either put this in a script (script.vim) and run it (:source script.vim), or you can type the commandselse
individually in normal mode as :let and :echo.
return "\<C-n>"
endif
endfunction

imap <Tab> <C-R>=SuperTab()<CR>

Here’s another example with functions, variables and mapping.

# Variables
Defining Variable prefixes

let var = "hello" 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)

Other prefixes
The s: prefix is also available in function names. See :help local-variables

let w:foo = 'bar' " w: window


let b:state = 'on' " b: buffer
let t:state = 'off' " t: tab
echo v:var " v: vim special
Vim options

echo 'tabstop is ' . &tabstop


let @/ = '' " @ register (this clears last search pattern)
if &insertmode
echo $PATH " $ env
echo &g:option
echo &l:option

Operators Prefix Vim options with &

a + b " numbers only!


'hello ' . name " concat

let var -= 2
let var += 5
let var .= 'string' " concat

# Strings
Strings String functions

let str = "String" strlen(str) " length


let str = "String with \n newline" len(str) " same
strchars(str) " character length
let literal = 'literal, no \ escaping'
let literal = 'that''s enough' " double '' => ' split("one two three") "=> ['one', 'two', 'three']
split("one.two.three", '.') "=> ['one', 'two', 'three']
echo "result = " . re " concatenation
join(['a', 'b'], ',') "=> 'a,b'

Also see :help literal-string and :help expr-quote. See: Strings tolower('Hello')


toupper('Hello')

Also see :help functions See: String functions

1/6
# Functions
Functions Namespacing

" prefix with s: for local script-only functions function! myplugin#hello()


function! s:Initialize(cmd, args)
" a: prefix for arguments
echo "Command: " . a:cmd
Calling functions
return 1
endfunction
call s:Initialize()
call s:Initialize("hello")
See: Functions

Consuming return values


Abortable
echo "Result: " . s:Initialize()

function! myfunction() abort


endfunction
Var arguments
Aborts when an error occurs.
function! infect(...)
echo a:0 "=> 2
echo a:1 "=> jake
echo a:2 "=> bella

for s in a:000 " a list


echon ' ' . s
endfor
endfunction

infect('jake', 'bella')

See :help function-argument. See: Var arguments

# Loops
for s in list
echo s
continue " jump to start of loop
break " breaks out of a loop
endfor

while x < 5
endwhile

# Custom commands
Custom commands Commands calling functions

command! Save :set fo=want tw=80 nowrap command! Save call <SID>foo()

Custom commands start with uppercase letters. The ! redefines a command if it already exists. function! s:foo()
...
endfunction

Commands with arguments

command! -nargs=? Save call script#foo(<args>)

-nargs=0 0 arguments, default

2/6
-nargs=1 1 argument, includes spaces

-nargs=? 0 or 1 argument

-nargs=* 0+ arguments, space separated

-nargs=+ 1+ arguments, space reparated

# Flow
Conditionals Truthiness

let char = getchar() if 1 | echo "true" | endif


if char == "\<LeftMouse>" if 0 | echo "false" | endif
" ...
elseif char == "\<RightMouse>"
" ... if 1 "=> 1 (true)
else if 0 "=> 0 (false)
" ... if "1" "=> 1 (true)
endif if "456" "=> 1 (true)
if "xfz" "=> 0 (false)

No booleans. 0 is false, 1 is true. See: Truthiness


Operators

if 3 > 2
if a && b Strings
if (a && b) || (c && d)
if !c
if name ==# 'John' " case-sensitive
if name ==? 'John' " case-insensitive
See :help expression-syntax. See: Operators if name == 'John' " depends on :set ignorecase

" also: is#, is?, >=#, >=?, and so on

Identity operators
Regexp matches
a is b
a isnot b
"hello" =~ 'xx*'
"hello" !~ 'xx*'
Checks if it’s the same instance object. "hello" =~ '\v<\d+>'

\v enables “extended” regex mode which allows word boundary (<>), +, and

Single line

if empty(a:path) | return [] | endif Boolean logic


a ? b : c

if g:use_dispatch && s:has_dispatch


Use | to join lines together. ···
endif

# Lists
Lists Functions

let mylist = [1, two, 3, "four"] len(mylist)


empty(mylist)
let first = mylist[0]
let last = mylist[-1] sort(list)
let sortedlist = sort(copy(list))
" Suppresses errors
let second = get(mylist, 1) split('hello there world', ' ')
let second = get(mylist, 1, "NONE")

Concatenation
Sublists

3/6
let shortlist = mylist[2:-1] let longlist = mylist + [5, 6]
let shortlist = mylist[2:] " same let mylist += [7, 8]

let shortlist = mylist[2:2] " one item

Push

let alist = [1, 2, 3]


Map let alist = add(alist, 4)

call map(files, "bufname(v:val)") " use v:val for value


call filter(files, 'v:val != ""')

# Dictionaries
Dictionaries Using dictionaries

let colors = { remove(colors, "apple")


\ "apple": "red",
\ "banana": "yellow"
} " :help E715
if has_key(dict, 'foo')
echo colors["a"] if empty(dict)
echo get(colors, "apple") " suppress error keys(dict)
len(dict)

See :help dict
max(dict)
min(dict)

Iteration count(dict, 'x')


string(dict)

for key in keys(mydict)


echo key . ': ' . mydict[key] map(dict, '<>> " . v:val')
endfor

Extending Prefixes

keys(s:)
" Extending with more
let extend(s:fruits, { ... })

Prefixes (s:, g:, l:, etc) are actually dictionaries.

# Casting
str2float("2.3")
str2nr("3")
float2nr("3.14")

# Numbers
Numbers Floats

let int = 1000 let fl = 100.1


let int = 0xff let fl = 5.4e4
let int = 0755 " octal

See :help Float
See :help Number. See: Numbers

Arithmetic
Math functions
3 / 2 "=> 1, integer division
3 / 2.0 "=> 1.5

4/6
3 * 2.0 "=> 6.0
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 Running keystrokes

execute "vsplit" normal G


execute "e " . fnameescape(filename) normal! G " skips key mappings

execute "normal! gg/foo\<cr>dd"


Runs an ex command you typically run with :. Also see :help execute. See: Execute a command

Use :normal to execute keystrokes as if you’re typing them in normal mode.

Getting filenames

echo expand("%") " path/file.txt


Silencing
echo expand("%:t") " file.txt
echo expand("%:p:h") " /home/you/path/file.txt silent g/Aap/p
echo expand("%:r") " path/file
echo expand("%:e") " txt
Suppresses output. See :help silent

See :help expand

Echo

Settings
echoerr 'oh it failed'
echomsg 'hello there'
set number echo 'hello'
set nonumber
set number! " toggle echohl WarningMsg | echomsg "=> " . a:msg | echohl None
set numberwidth=5
set guioptions+=e

Prompts

Built-ins
let result = confirm("Sure?")
execute "confirm q"
has("feature") " :h feature-list
executable("python")
globpath(&rtp, "syntax/c.vim")

exists("$ENV")
exists(":command")
exists("variable")
exists("+option")
exists("g:...")

# Mapping
Mapping commands Explanation Arguments

<buffer>
nmap [nvixso](nore)map
vmap <silent>
imap
xmap │ └ don't recurse <nowait>
nnoremap │
vnoremap └ normal, visual, insert,
inoremap eX mode, select, operator-pending
xnoremap
...

5/6
# Syntax
Highlights Filetype detection

hi Comment augroup filetypedetect


term=bold,underline au! BufNewFile,BufRead *.json setf javascript
gui=bold augroup END
ctermfg=4
guifg=#80a0ff au Filetype markdown setlocal spell

Conceal Region conceal

set conceallevel=2 syn region inBold concealends matchgroup=bTag start="<b>" end="</b>


syn match newLine "<br>" conceal cchar=} hi inBold gui=bold
hi newLine guifg=green hi bTag guifg=blue

Syntax Include guards

syn match :name ":regex" :flags if exists('g:loaded_myplugin')


finish
syn region Comment start="/\*" end="\*/" endif
syn region String start=+"+ end=+"+ skip=+\\"+
" ...
syn cluster :name contains=:n1,:n2,:n3...
let g:loaded_myplugin = 1
flags:
keepend
oneline
nextgroup=
contains=
contained

hi def link markdownH1 htmlH1

6/6

You might also like