Przewodnik referencyjny po wbudowanych funkcjach i strukturach danych skryptów Vim.
Struktury Danych
Słowniki (Dictionaries)
let colors = {
\ "apple": "red",
\ "banana": "yellow"
}
echo colors["apple"]
echo get(colors, "apple") " tłumi błąd w przypadku braku klucza
call remove(colors, "apple")
" Inspekcja i testy
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
Listy (Lists)
let mylist = [1, "two", 3, "four"]
let first = mylist[0]
let last = mylist[-1]
" Bezpieczne pobieranie z wartością domyślną
let second = get(mylist, 1)
let fallback = get(mylist, 10, "NONE")
Bufor i Kursor
Inspekcja Bufora
line('.') " Bieżący numer wiersza
col('.') " Bieżący numer kolumny
col('$') " Ostatnia kolumna w bieżącym wierszu
getline('.') " Zawartość bieżącego wiersza jako ciąg znaków
getline(1) " Zawartość wiersza 1 jako ciąg znaków
getline(1, 5) " Wiersze od 1 do 5 jako lista ciągów znaków
search('^$') " Numer następnego pustego wiersza
search('^$', 'n') " Znajdź następny pusty wiersz bez przesuwania kursora
getcurpos() " [bufnum, lnum, col, off, curswant]
getpos('.') " [bufnum, lnum, col, off]
nextnonblank(1) " Następny niepusty wiersz po wierszu 1
prevnonblank(10)
Znaczniki (Marks)
getpos("'a") " Pozycja znacznika 'a'
setpos("'a", [0, 10, 5, 0])
getpos("'<") " Początek zaznaczenia wizualnego
getpos("'>") " Koniec zaznaczenia wizualnego
Pozycjonowanie Kursora
call cursor(line, col)
call cursor(line, col, off, curswant)
Rozwijanie Nazw Plików
expand('<cword>') " Słowo pod kursorem
expand('<cfile>') " Ścieżka do pliku pod kursorem
expand('%') " Bieżąca nazwa pliku
" Modyfikatory:
" :p Pełna ścieżka (/Users/name/project/file.txt)
" :h Katalog nadrzędny (Head) (/Users/name/project)
" :t Nazwa pliku (Tail) (file.txt)
" :r Nazwa bazowa bez rozszerzenia (file)
" :e Rozszerzenie (txt)
" Przykład: expand('%:p:h')
Pliki i Ścieżki
fnameescape('string')
fnamemodify('main.c', ':p:h')
fnamemodify(fname, ':e')
filereadable(fname)
getfsize('file.txt')
getcwd()
globpath(&rtp, "plugin/commentary.vim")
Matematyka i Typy
Operacje Matematyczne
fmod(9, 2) " Modulo: 1.0
abs(-0.5) " Wartość bezwzględna
sqrt(9) " Pierwiastek kwadratowy
trunc(1.84) " 1.0
floor(1.84) " 1.0
ceil(1.84) " 2.0
float2nr(3.14) " Konwersja float na integer: 3
Konwersje Typów
str2float('0.2')
str2nr('240')
str2nr('ff', 16) " Parsowanie szesnastkowe (Base-16)
string(0.3) " Konwersja na ciąg znaków
Sprawdzanie Typów
type(var) == type(0) " Liczba
type(var) == type("") " Ciąg znaków
type(var) == type(function("tr")) " Referencja do funkcji
type(var) == type([]) " Lista
type(var) == type({}) " Słownik
type(var) == type(0.0) " Liczba zmiennoprzecinkowa
Ciągi Znaków i Wyrażenia Regularne
Manipulacja Ciągami Znaków
if a =~ '\s*'
let clean = substitute(str, '\s\+', ' ', 'g')
strpart("abcdef", 3, 2) " == "de" (Podciąg: przesunięcie, długość)
strpart("abcdef", 3) " == "def"
stridx("abcdef", "e") " == 4 (Podciąg)
strridx("abcdef", "d") " Wyszukiwanie indeksu wstecz
matchstr('testing', 'test') " == 'test' (Pasujący tekst)
match('testing', 'test') " == 0 (Indeks początku dopasowania)
matchend('testing', 'test') " == 4 (Indeks końca dopasowania)
match('testing', '\ctest') " Ignoruj wielkość liter
split(str, '\zs') " Podział ciągu znaków na tablicę znaków
strlen(str) " Długość w bajtach
strchars(str) " Liczba znaków (obsługa multibyte)
strdisplaywidth(str) " Kolumny wyświetlania ekranu
toupper(str)
tolower(str)
tr('foo', '_-', ' ') " Tłumaczenie znaków
Porównania
if name ==# 'John' " Równość z uwzględnieniem wielkości liter
if name ==? 'John' " Równość bez uwzględniania wielkości liter
if name == 'John' " Zależy od opcji 'ignorecase'
if "hello" =~ '.*' " Dopasowuje wzorzec
if "hello" !~ '.*' " Nie dopasowuje wzorca
Polecenia i Wykonywanie
Wykonywanie Poleceń
normal! ddahello
execute 'normal! ' . a:keys
wincmd J " Polecenie przesuwania okna
Polecenia Powłoki (Shell)
let output = system('ls ' . shellescape(expand('%:h')))
Rejestry
getreg('*') " Pobierz zawartość schowka
getregtype('*') " Typ rejestru: 'v' (znak), 'V' (wiersz), '<ctrl-v>' (blok)
setreg('*', 'new text')