Riferimento rapido

Cheat Sheet Funzioni Vimscript

Guida di riferimento rapido per le funzioni integrate di Vimscript: manipolazione di liste e dizionari, ispezione del buffer, movimento del cursore e stringhe.

· Pubblicato

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

Argomenti correlati