Referință rapidă

Cheat Sheet Funcții Vimscript

Ghid de referință rapidă pentru funcțiile încorporate din Vimscript: manipulare de liste și dicționare, inspectare buffere, mișcarea cursorului și șiruri de caractere.

· Publicat

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

Subiecte conexe