Szybka pomoc

Ściągawka z funkcji Vimscript

Krótki przewodnik referencyjny po wbudowanych funkcjach Vimscript: manipulacja listami i słownikami, inspekcja buforów, ruch kursora i operacje na ciągach znaków.

· Opublikowano

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

Powiązane tematy