Una guida di riferimento per le funzioni di script e le strutture dati integrate di Vim.
Strutture Dati
Dizionari
let colors = {
\ "apple": "red",
\ "banana": "yellow"
}
echo colors["apple"]
echo get(colors, "apple") " sopprime l'errore se mancante
call remove(colors, "apple")
" Ispezione e verifiche
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]
" Recupero sicuro con valore predefinito
let second = get(mylist, 1)
let fallback = get(mylist, 10, "NONE")
Buffer e Cursore
Ispezione Buffer
line('.') " Numero riga corrente
col('.') " Numero colonna corrente
col('$') " Ultima colonna nella riga corrente
getline('.') " Contenuto riga corrente come stringa
getline(1) " Contenuto riga 1 come stringa
getline(1, 5) " Righe da 1 a 5 come lista di stringhe
search('^$') " Numero della prossima riga vuota
search('^$', 'n') " Trova la prossima riga vuota senza muovere il cursore
getcurpos() " [bufnum, lnum, col, off, curswant]
getpos('.') " [bufnum, lnum, col, off]
nextnonblank(1) " Prossima riga non vuota dopo la riga 1
prevnonblank(10)
Segnalibri (Marks)
getpos("'a") " Posizione del mark 'a'
setpos("'a", [0, 10, 5, 0])
getpos("'<") " Inizio selezione visuale
getpos("'>") " Fine selezione visuale
Posizionamento del Cursore
call cursor(line, col)
call cursor(line, col, off, curswant)
Espansione Nomi File
expand('<cword>') " Parola sotto il cursore
expand('<cfile>') " Percorso file sotto il cursore
expand('%') " Nome file corrente
" Modificatori:
" :p Percorso completo (/Users/name/project/file.txt)
" :h Cartella superiore (Head) (/Users/name/project)
" :t Nome file (Tail) (file.txt)
" :r Nome base senza estensione (file)
" :e Estensione (txt)
" Esempio: expand('%:p:h')
File e Percorsi
fnameescape('string')
fnamemodify('main.c', ':p:h')
fnamemodify(fname, ':e')
filereadable(fname)
getfsize('file.txt')
getcwd()
globpath(&rtp, "plugin/commentary.vim")
Matematica e Tipi
Operazioni Matematiche
fmod(9, 2) " Modulo: 1.0
abs(-0.5) " Valore assoluto
sqrt(9) " Radice quadrata
trunc(1.84) " 1.0
floor(1.84) " 1.0
ceil(1.84) " 2.0
float2nr(3.14) " Converti float in intero: 3
Conversioni di Tipo
str2float('0.2')
str2nr('240')
str2nr('ff', 16) " Parsing esadecimale (Base-16)
string(0.3) " Converti in stringa
Verifica dei Tipi
type(var) == type(0) " Numero
type(var) == type("") " Stringa
type(var) == type(function("tr")) " Riferimento funzione
type(var) == type([]) " Lista
type(var) == type({}) " Dizionario
type(var) == type(0.0) " Float
Stringhe ed Espressioni Regolari
Manipolazione Stringhe
if a =~ '\s*'
let clean = substitute(str, '\s\+', ' ', 'g')
strpart("abcdef", 3, 2) " == "de" (Sottostringa: offset, lunghezza)
strpart("abcdef", 3) " == "def"
stridx("abcdef", "e") " == 4 (Sottostringa)
strridx("abcdef", "d") " Ricerca indice inversa
matchstr('testing', 'test') " == 'test' (Testo corrispondente)
match('testing', 'test') " == 0 (Indice inizio corrispondenza)
matchend('testing', 'test') " == 4 (Indice fine corrispondenza)
match('testing', '\ctest') " Ignora maiuscole/minuscole
split(str, '\zs') " Dividi stringa in array di caratteri
strlen(str) " Lunghezza in byte
strchars(str) " Conteggio caratteri (supporta multibyte)
strdisplaywidth(str) " Colonne a schermo
toupper(str)
tolower(str)
tr('foo', '_-', ' ') " Traslitterazione caratteri
Confronti
if name ==# 'John' " Uguaglianza sensibile alle maiuscole
if name ==? 'John' " Uguaglianza insensibile alle maiuscole
if name == 'John' " Dipende dall'opzione 'ignorecase'
if "hello" =~ '.*' " Corrisponde al pattern
if "hello" !~ '.*' " Non corrisponde al pattern
Comandi ed Esecuzione
Esecuzione Comandi
normal! ddahello
execute 'normal! ' . a:keys
wincmd J " Comando spostamento finestre
Comandi Shell
let output = system('ls ' . shellescape(expand('%:h')))
Registri
getreg('*') " Ottieni contenuto degli appunti
getregtype('*') " Tipo registro: 'v' (carattere), 'V' (linea), '<ctrl-v>' (blocco)
setreg('*', 'new text')