3

Vimscript functions cheatsheet

 2 years ago
source link: https://devhints.io/vimscript-functions
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Dictionaries

let colors = {
  \ "apple": "red",
  \ "banana": "yellow"
}

echo colors["a"]
echo get(colors, "apple")   " suppress error

remove(colors, "apple")

" :help E715
if has_key(dict, 'foo')
if empty(dict)
keys(dict)
len(dict)

max(dict)
min(dict)

count(dict, 'x')
string(dict)

map(dict, '<>> " . v:val')
extend(s:fruits, { ... })
for key in keys(mydict)
  echo key . ': ' . mydict(key)
endfor

Lists

let mylist = [1, two, 3, "four"]

let first = mylist[0]
let last  = mylist[-1]

" Suppresses errors
let second = get(mylist, 1)
let second = get(mylist, 1, "NONE")

Functions

Buffer

line('.')             " current line number
col('.')
col('$')

getline('.')          " current line as a string
getline(1)            " get line 1
getline(1, 5)         " get lines 1-5
search('^$')          " next blank line, returns line number
search('^$','n')      " but don't move cursor

getcurpos()           " [bufnum, lnum, col, off, curswant]
getpos('.')           " [bufnum, lnum, col, off]

nextnonblank(1)       " next non-blank line after line1
prevnonblank()

Marks

getpos("'a")          " position of a mark
setpos("'a",...)

getpos("'<")          " position of selection start

Cursor

cursor(line,col)      " moves cursor
cursor(line,col,off,curswant)

getcurpos()           " returns [bufnum,line,col,off,curswant]

Expand

expand('<cword>')      " word under cursor
expand('%')            " current file

" <cword>  current word on cursor
" :p    full path
" :h    head
" :p:h  dirname   (/Users/rsc/project)
" :t    tail      (file.txt)
" :r    root      (file)
" :e    extension (.txt)
" see :h cmdline-special

Files

fnameescape('string')
fnamemodify('main.c', ':p:h')
fnamemodify(fname, ':e')   " current file extension - see expand()
filereadable(fname)
getfsize('file.txt')
getcwd()

globpath(&rtp, "plugin/commentary.vim")
fmod(9, 2)  " modulus
abs(-0.5)
sqrt(9)

trunc(1.84)
floor(1.84)
ceil(1.84)
float2nr(3.14)

Casting

str2float('0.2')
str2nr('240')
str2nr('ff', '16')

string(0.3)

Type checking

type(var) == type(0)
type(var) == type("")
type(var) == type(function("tr"))
type(var) == type([])
type(var) == type({})
type(var) == type(0.0)

Date/time

strftime('%c')
strftime('%c',getftime('file.c'))

Strings

if a =~ '\s*'
substitute(str, '.', 'x', 'g')
strpart("abcdef", 3, 2)    " == "de" (substring)
strpart("abcdef", 3)       " == "def"
stridx("abcdef", "e")      " == 4
strridx()                  " reverse

matchstr('testing','test')  " == 'test' (or '')
match('testing','test')     " == 0
matchend('testing','test')  " == 4
match('testing','\ctest')   " ignore case

split(str, '\zs')           " split into characters

strlen(str)
strchars()                  " accounts for composing chars
strwidth()                  " accounts for ambig characters
strdisplaywidth()           " accounts for tab stops

toupper(str)
tolower(str)
tr('foo', '_-', '  ')

Syntax

synstack(line('.'),col('.'))   " returns many
synID(line('.'),col('.'),1)    " only one

synIDattr(id,"bg")
synIDattr(id,"name")
synIDtrans()

" syntax stack
map(synstack(line('.'), col('.')), 'synIDattr(v:val, "name")')

Shell

system('ls '.shellescape(expand('%:h')))

Registers

getreg('*')
getregtype('*')     " v(char), V(line) <ctrl-v>(block)

Comparisons

if name ==# 'John'     " case-sensitive
if name ==? 'John'     " case-insensitive
if name == 'John'      " depends on :set ignorecase
" also: is#, is?, >=#, >=?, and so on

if "hello" =~ '.*'
if "hello" !~ '.*'

Executing

Running commands

normal 'ddahello'
exe 'normal ^C'  " with expansions
wincmd J

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK