Ein Referenzleitfaden für integrierte Vim-Skriptfunktionen und Datenstrukturen.
Datenstrukturen
Dictionaries
let colors = {
\ "apple": "red",
\ "banana": "yellow"
}
echo colors["apple"]
echo get(colors, "apple") " unterdrückt Fehler bei Nichtvorhandensein
call remove(colors, "apple")
" Inspektion und Prüfungen
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
Listen (Lists)
let mylist = [1, "two", 3, "four"]
let first = mylist[0]
let last = mylist[-1]
" Sicheres Abrufen mit Fallback
let second = get(mylist, 1)
let fallback = get(mylist, 10, "NONE")
Puffer & Cursor
Puffer-Inspektion
line('.') " Aktuelle Zeilennummer
col('.') " Aktuelle Spaltennummer
col('$') " Letzte Spaltennummer in der aktuellen Zeile
getline('.') " Inhalt der aktuellen Zeile als String
getline(1) " Inhalt von Zeile 1 als String
getline(1, 5) " Zeilen 1 bis 5 als Liste von Strings
search('^$') " Nächste leere Zeilennummer
search('^$', 'n') " Nächste Leerzeile finden ohne den Cursor zu bewegen
getcurpos() " [bufnum, lnum, col, off, curswant]
getpos('.') " [bufnum, lnum, col, off]
nextnonblank(1) " Nächste nicht-leere Zeilennummer nach Zeile 1
prevnonblank(10)
Marken (Marks)
getpos("'a") " Position von Marke 'a'
setpos("'a", [0, 10, 5, 0])
getpos("'<") " Startposition der visuellen Auswahl
getpos("'>") " Endposition der visuellen Auswahl
Cursor-Positionierung
call cursor(line, col)
call cursor(line, col, off, curswant)
Dateinamen-Expansion
expand('<cword>') " Wort unter dem Cursor
expand('<cfile>') " Dateipfad unter dem Cursor
expand('%') " Aktueller Dateiname
" Modifikatoren:
" :p Vollständiger Pfad (/Users/name/project/file.txt)
" :h Verzeichnis (Head) (/Users/name/project)
" :t Dateiname (Tail) (file.txt)
" :r Basisname ohne Erweiterung (file)
" :e Dateiendung (txt)
" Beispiel: expand('%:p:h')
Dateien & Pfade
fnameescape('string')
fnamemodify('main.c', ':p:h')
fnamemodify(fname, ':e')
filereadable(fname)
getfsize('file.txt')
getcwd()
globpath(&rtp, "plugin/commentary.vim")
Mathematik & Typen
Mathematische Operationen
fmod(9, 2) " Modulo: 1.0
abs(-0.5) " Absoluter Wert
sqrt(9) " Quadratwurzel
trunc(1.84) " 1.0
floor(1.84) " 1.0
ceil(1.84) " 2.0
float2nr(3.14) " Float in Ganzzahl umwandeln: 3
Typkonvertierungen
str2float('0.2')
str2nr('240')
str2nr('ff', 16) " Hexadezimales Parsen (Basis 16)
string(0.3) " In String umwandeln
Typprüfung
type(var) == type(0) " Zahl
type(var) == type("") " Zeichenkette
type(var) == type(function("tr")) " Funktionsreferenz
type(var) == type([]) " Liste
type(var) == type({}) " Dictionary
type(var) == type(0.0) " Gleitkommazahl
Zeichenketten & Reguläre Ausdrücke
String-Manipulation
if a =~ '\s*'
let clean = substitute(str, '\s\+', ' ', 'g')
strpart("abcdef", 3, 2) " == "de" (Teilstring: Offset, Länge)
strpart("abcdef", 3) " == "def"
stridx("abcdef", "e") " == 4 (Teilstring)
strridx("abcdef", "d") " Rückwärtssuche nach Index
matchstr('testing', 'test') " == 'test' (Übereinstimmender Text)
match('testing', 'test') " == 0 (Startindex der Übereinstimmung)
matchend('testing', 'test') " == 4 (Endindex der Übereinstimmung)
match('testing', '\ctest') " Groß-/Kleinschreibung ignorieren
split(str, '\zs') " String in Zeichenarray aufteilen
strlen(str) " Byte-Länge
strchars(str) " Zeichenanzahl (Multibyte-fähig)
strdisplaywidth(str) " Bildschirmspaltenbreite
toupper(str)
tolower(str)
tr('foo', '_-', ' ') " Zeichentranslation
Vergleiche
if name ==# 'John' " Groß-/Kleinschreibung beachten
if name ==? 'John' " Groß-/Kleinschreibung ignorieren
if name == 'John' " Abhängig von der Option 'ignorecase'
if "hello" =~ '.*' " Muster passt
if "hello" !~ '.*' " Muster passt nicht
Befehle & Ausführung
Befehle ausführen
normal! ddahello
execute 'normal! ' . a:keys
wincmd J " Fensterbewegungsbefehl
Shell-Befehle
let output = system('ls ' . shellescape(expand('%:h')))
Register
getreg('*') " Inhalt der Zwischenablage abrufen
getregtype('*') " Registertyp: 'v' (Zeichen), 'V' (Zeile), '<ctrl-v>' (Block)
setreg('*', 'new text')