Ghid de referință pentru funcțiile și structurile de date încorporate din Vim.
Structuri de Date
Dicționare
let colors = {
\ "apple": "red",
\ "banana": "yellow"
}
echo colors["apple"]
echo get(colors, "apple") " suprimă eroarea dacă nu există cheia
call remove(colors, "apple")
" Inspectare și verificări
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
Liste
let mylist = [1, "two", 3, "four"]
let first = mylist[0]
let last = mylist[-1]
" Preluare sigură cu valoare implicită
let second = get(mylist, 1)
let fallback = get(mylist, 10, "NONE")
Buffer și Cursor
Inspectare Buffer
line('.') " Numărul liniei curente
col('.') " Numărul coloanei curente
col('$') " Ultima coloană din linia curentă
getline('.') " Conținutul liniei curente ca șir
getline(1) " Conținutul liniei 1 ca șir
getline(1, 5) " Liniile de la 1 la 5 ca listă de șiruri
search('^$') " Numărul următoarei linii goale
search('^$', 'n') " Găsește următoarea linie goală fără deplasarea cursorului
getcurpos() " [bufnum, lnum, col, off, curswant]
getpos('.') " [bufnum, lnum, col, off]
nextnonblank(1) " Următoarea linie non-goală după linia 1
prevnonblank(10)
Marcaje (Marks)
getpos("'a") " Poziția marcajului 'a'
setpos("'a", [0, 10, 5, 0])
getpos("'<") " Începutul selecției vizuale
getpos("'>") " Sfârșitul selecției vizuale
Poziționarea Cursorului
call cursor(line, col)
call cursor(line, col, off, curswant)
Expansiunea Numelor de Fișiere
expand('<cword>') " Cuvântul de sub cursor
expand('<cfile>') " Calea fișierului de sub cursor
expand('%') " Numele fișierului curent
" Modificatori:
" :p Cale completă (/Users/name/project/file.txt)
" :h Director părinte (Head) (/Users/name/project)
" :t Nume fișier (Tail) (file.txt)
" :r Nume de bază fără extensie (file)
" :e Extensie (txt)
" Exemplu: expand('%:p:h')
Fișiere și Căi
fnameescape('string')
fnamemodify('main.c', ':p:h')
fnamemodify(fname, ':e')
filereadable(fname)
getfsize('file.txt')
getcwd()
globpath(&rtp, "plugin/commentary.vim")
Matematică și Tipuri
Operații Matematice
fmod(9, 2) " Modulo: 1.0
abs(-0.5) " Valoare absolută
sqrt(9) " Rădăcină pătrată
trunc(1.84) " 1.0
floor(1.84) " 1.0
ceil(1.84) " 2.0
float2nr(3.14) " Conversie float în întreg: 3
Conversii de Tip
str2float('0.2')
str2nr('240')
str2nr('ff', 16) " Parsare hexazecimală (Baza-16)
string(0.3) " Conversie în șir
Verificarea Tipurilor
type(var) == type(0) " Număr
type(var) == type("") " Șir de caractere
type(var) == type(function("tr")) " Referință de funcție
type(var) == type([]) " Listă
type(var) == type({}) " Dicționar
type(var) == type(0.0) " Număr cu virgulă mobilă
Șiruri de Caractere și Expresii Regulate
Manipularea Șirurilor de Caractere
if a =~ '\s*'
let clean = substitute(str, '\s\+', ' ', 'g')
strpart("abcdef", 3, 2) " == "de" (Subșir: deplasament, lungime)
strpart("abcdef", 3) " == "def"
stridx("abcdef", "e") " == 4 (Subșir)
strridx("abcdef", "d") " Căutare index în sens invers
matchstr('testing', 'test') " == 'test' (Text potrivit)
match('testing', 'test') " == 0 (Index început potrivire)
matchend('testing', 'test') " == 4 (Index sfârșit potrivire)
match('testing', '\ctest') " Ignoră majusculele/minusculele
split(str, '\zs') " Împarte șirul într-un tablou de caractere
strlen(str) " Lungime în octeți
strchars(str) " Număr de caractere (suport multibyte)
strdisplaywidth(str) " Coloane afișate pe ecran
toupper(str)
tolower(str)
tr('foo', '_-', ' ') " Translație de caractere
Comparații
if name ==# 'John' " Egalitate sensibilă la majuscule
if name ==? 'John' " Egalitate insensibilă la majuscule
if name == 'John' " Depinde de opțiunea 'ignorecase'
if "hello" =~ '.*' " Se potrivește cu tiparul
if "hello" !~ '.*' " Nu se potrivește cu tiparul
Comenzi și Execuție
Executarea Comenzilor
normal! ddahello
execute 'normal! ' . a:keys
wincmd J " Comandă de mutare a ferestrei
Comenzi Shell
let output = system('ls ' . shellescape(expand('%:h')))
Registre
getreg('*') " Obține conținutul clipboard-ului
getregtype('*') " Tip de registru: 'v' (caracter), 'V' (linie), '<ctrl-v>' (bloc)
setreg('*', 'new text')