Kurzreferenz

Vimscript-Funktionen Spickzettel

Kurzreferenz für integrierte Vimscript-Funktionen: Listen- und Dictionary-Manipulation, Puffer-Inspektion, Cursor-Bewegung und String-Operationen.

· Veröffentlicht

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')

Verwandte Themen