Snelle referentie

Vimscript Functies Spiekbrief

Snelle naslaggids voor ingebouwde Vimscript-functies: lijst- en dictionary-manipulatie, bufferinspectie, cursorbeweging en tekenreeksbewerkingen.

· Gepubliceerd

Een naslaggids voor ingebouwde Vim-scriptfuncties en datastructuren.

Datastructuren

Dictionaries

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

echo colors["apple"]
echo get(colors, "apple")   " onderdrukt foutmelding als sleutel ontbreekt

call remove(colors, "apple")

" Inspectie en controles
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, { "cherry": "red" })
for key in keys(mydict)
  echo key . ': ' . mydict[key]
endfor

Lijsten (Lists)

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

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

" Veilig ophalen met fallback-waarde
let second = get(mylist, 1)
let fallback = get(mylist, 10, "NONE")

Buffer & Cursor

Bufferinspectie

line('.')             " Huidig regelnummer
col('.')              " Huidig kolomnummer
col('$')              " Laatste kolom in huidige regel

getline('.')          " Inhoud van huidige regel als string
getline(1)            " Inhoud van regel 1 als string
getline(1, 5)         " Regels 1 tot 5 als lijst van strings
search('^$')          " Nummer van volgende lege regel
search('^$', 'n')     " Volgende lege regel zoeken zonder cursor te verplaatsen

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

nextnonblank(1)       " Volgende niet-lege regel na regel 1
prevnonblank(10)

Markeringen (Marks)

getpos("'a")          " Positie van markering 'a'
setpos("'a", [0, 10, 5, 0])

getpos("'<")          " Beginpositie van visuele selectie
getpos("'>")          " Eindpositie van visuele selectie

Cursorpositionering

call cursor(line, col)
call cursor(line, col, off, curswant)

Bestandsnaamexpansie

expand('<cword>')      " Woord onder cursor
expand('<cfile>')      " Bestandspad onder cursor
expand('%')            " Huidige bestandsnaam

" Modifiers:
" :p    Volledig pad (/Users/name/project/file.txt)
" :h    Hoofdmap (Head) (/Users/name/project)
" :t    Bestandsnaam (Tail) (file.txt)
" :r    Basisnaam zonder extensie (file)
" :e    Extensie (txt)
" Voorbeeld: expand('%:p:h')

Bestanden & Paden

fnameescape('string')
fnamemodify('main.c', ':p:h')
fnamemodify(fname, ':e')
filereadable(fname)
getfsize('file.txt')
getcwd()

globpath(&rtp, "plugin/commentary.vim")

Wiskunde & Types

Wiskundige Bewerkingen

fmod(9, 2)            " Modulo: 1.0
abs(-0.5)             " Absolute waarde
sqrt(9)               " Vierkantswortel

trunc(1.84)           " 1.0
floor(1.84)           " 1.0
ceil(1.84)            " 2.0
float2nr(3.14)        " Float omzetten naar integer: 3

Typeconversies

str2float('0.2')
str2nr('240')
str2nr('ff', 16)      " Hexadecimale parsing (Base-16)

string(0.3)           " Converteren naar string

Typecontrole

type(var) == type(0)            " Getal
type(var) == type("")           " String
type(var) == type(function("tr")) " Functiereferentie
type(var) == type([])           " Lijst
type(var) == type({})           " Dictionary
type(var) == type(0.0)          " Drijvende-kommagetal

Tekenreeksen & Reguliere Expressies

Stringbewerkingen

if a =~ '\s*'
let clean = substitute(str, '\s\+', ' ', 'g')

strpart("abcdef", 3, 2)         " == "de" (Substring: offset, lengte)
strpart("abcdef", 3)            " == "def"
stridx("abcdef", "e")           " == 4 (Substring)
strridx("abcdef", "d")          " Omgekeerd zoeken naar index

matchstr('testing', 'test')     " == 'test' (Overeenkomende tekst)
match('testing', 'test')        " == 0 (Beginindex van match)
matchend('testing', 'test')     " == 4 (Eindindex van match)
match('testing', '\ctest')      " Hoofdletterongevoelig

split(str, '\zs')               " String splitsen in array van tekens

strlen(str)                     " Lengte in bytes
strchars(str)                   " Aantal tekens (multibyte-ondersteuning)
strdisplaywidth(str)            " Weergavekolommen op scherm

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

Vergelijkingen

if name ==# 'John'     " Hoofdlettergevoelige gelijkheid
if name ==? 'John'     " Hoofdletterongevoelige gelijkheid
if name == 'John'      " Afhankelijk van 'ignorecase'-optie

if "hello" =~ '.*'     " Komt overeen met patroon
if "hello" !~ '.*'     " Komt niet overeen met patroon

Opdrachten & Uitvoering

Opdrachten Uitvoeren

normal! ddahello
execute 'normal! ' . a:keys
wincmd J               " Vensterverplaatsingsopdracht

Shell-opdrachten

let output = system('ls ' . shellescape(expand('%:h')))

Registers

getreg('*')            " Inhoud klembord ophalen
getregtype('*')        " Registertype: 'v' (teken), 'V' (regel), '<ctrl-v>' (blok)
setreg('*', 'new text')

Verwante onderwerpen