Γρήγορη αναφορά

Vimscript Functions Cheatsheet

Γρήγορος οδηγός αναφοράς για τις ενσωματωμένες συναρτήσεις του Vimscript: διαχείριση λιστών και λεξικών, έλεγχος buffer, κίνηση κέρσορα και συμβολοσειρές.

· Δημοσιεύτηκε

Οδηγός αναφοράς για τις ενσωματωμένες συναρτήσεις σεναρίων και τις δομές δεδομένων του Vim.

Δομές Δεδομένων

Λεξικά (Dictionaries)

let colors = {
  \ "apple": "red",
  \ "banana": "yellow"
}

echo colors["apple"]
echo get(colors, "apple")   " αποσιωπά το σφάλμα εάν λείπει

call remove(colors, "apple")

" Έλεγχος και επιβεβαιώσεις
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

Λίστες (Lists)

let mylist = [1, "two", 3, "four"]

let first = mylist[0]
let last  = mylist[-1]

" Ασφαλής ανάκτηση με προεπιλογή
let second = get(mylist, 1)
let fallback = get(mylist, 10, "NONE")

Buffer & Κέρσορας

Έλεγχος Buffer

line('.')             " Αριθμός τρέχουσας γραμμής
col('.')              " Αριθμός τρέχουσας στήλης
col('$')              " Αριθμός τελευταίας στήλης στην τρέχουσα γραμμή

getline('.')          " Περιεχόμενο τρέχουσας γραμμής ως συμβολοσειρά
getline(1)            " Περιεχόμενο γραμμής 1 ως συμβολοσειρά
getline(1, 5)         " Γραμμές 1 έως 5 ως λίστα συμβολοσειρών
search('^$')          " Αριθμός επόμενης κενής γραμμής
search('^$', 'n')     " Εύρεση επόμενης κενής γραμμής χωρίς μετακίνηση του κέρσορα

getcurpos()           " [bufnum, lnum, col, off, curswant]
getpos('.')           " [bufnum, lnum, col, off]

nextnonblank(1)       " Επόμενη μη κενή γραμμή μετά τη γραμμή 1
prevnonblank(10)

Σημάδια (Marks)

getpos("'a")          " Θέση του mark 'a'
setpos("'a", [0, 10, 5, 0])

getpos("'<")          " Θέση έναρξης οπτικής επιλογής
getpos("'>")          " Θέση τέλους οπτικής επιλογής

Τοποθέτηση Κέρσορα

call cursor(line, col)
call cursor(line, col, off, curswant)

Ανάπτυξη Ονομάτων Αρχείων

expand('<cword>')      " Λέξη κάτω από τον κέρσορα
expand('<cfile>')      " Διαδρομή αρχείου κάτω από τον κέρσορα
expand('%')            " Όνομα τρέχοντος αρχείου

" Τροποποιητές:
" :p    Πλήρης διαδρομή (/Users/name/project/file.txt)
" :h    Φάκελος (Head) (/Users/name/project)
" :t    Όνομα αρχείου (Tail) (file.txt)
" :r    Όνομα χωρίς επέκταση (file)
" :e    Επέκταση (txt)
" Παράδειγμα: expand('%:p:h')

Αρχεία & Διαδρομές

fnameescape('string')
fnamemodify('main.c', ':p:h')
fnamemodify(fname, ':e')
filereadable(fname)
getfsize('file.txt')
getcwd()

globpath(&rtp, "plugin/commentary.vim")

Μαθηματικά & Τύποι

Μαθηματικές Πράξεις

fmod(9, 2)            " Υπόλοιπο διαίρεσης: 1.0
abs(-0.5)             " Απόλυτη τιμή
sqrt(9)               " Τετραγωνική ρίζα

trunc(1.84)           " 1.0
floor(1.84)           " 1.0
ceil(1.84)            " 2.0
float2nr(3.14)        " Μετατροπή δεκαδικού σε ακέραιο: 3

Μετατροπές Τύπων

str2float('0.2')
str2nr('240')
str2nr('ff', 16)      " Ανάλυση δεκαεξαδικού (Base-16)

string(0.3)           " Μετατροπή σε συμβολοσειρά

Έλεγχος Τύπων

type(var) == type(0)            " Αριθμός
type(var) == type("")           " Συμβολοσειρά
type(var) == type(function("tr")) " Αναφορά συνάρτησης
type(var) == type([])           " Λίστα
type(var) == type({})           " Λεξικό
type(var) == type(0.0)          " Δεκαδικός αριθμός

Συμβολοσειρές & Κανονικές Εκφράσεις

Χειρισμός Συμβολοσειρών

if a =~ '\s*'
let clean = substitute(str, '\s\+', ' ', 'g')

strpart("abcdef", 3, 2)         " == "de" (Υποσυμβολοσειρά: offset, μήκος)
strpart("abcdef", 3)            " == "def"
stridx("abcdef", "e")           " == 4 (Υποσυμβολοσειρά)
strridx("abcdef", "d")          " Αντίστροφη αναζήτηση δείκτη

matchstr('testing', 'test')     " == 'test' (Κείμενο που ταιριάζει)
match('testing', 'test')        " == 0 (Δείκτης έναρξης ταιριάσματος)
matchend('testing', 'test')     " == 4 (Δείκτης τέλους ταιριάσματος)
match('testing', '\ctest')      " Αγνόηση πεζών/κεφαλαίων

split(str, '\zs')               " Διαχωρισμός συμβολοσειράς σε πίνακα χαρακτήρων

strlen(str)                     " Μήκος σε byte
strchars(str)                   " Πλήθος χαρακτήρων (multibyte aware)
strdisplaywidth(str)            " Στήλες προβολής οθόνης

toupper(str)
tolower(str)
tr('foo', '_-', '  ')           " Μετάφραση χαρακτήρων

Συγκρίσεις

if name ==# 'John'     " Ισότητα με διάκριση πεζών/κεφαλαίων
if name ==? 'John'     " Ισότητα χωρίς διάκριση πεζών/κεφαλαίων
if name == 'John'      " Εξαρτάται από την επιλογή 'ignorecase'

if "hello" =~ '.*'     " Ταιριάζει με το μοτίβο
if "hello" !~ '.*'     " Δεν ταιριάζει με το μοτίβο

Εντολές & Εκτέλεση

Εκτέλεση Εντολών

normal! ddahello
execute 'normal! ' . a:keys
wincmd J               " Εντολή μετακίνησης παραθύρου

Εντολές Shell

let output = system('ls ' . shellescape(expand('%:h')))

Καταχωρητές (Registers)

getreg('*')            " Λήψη περιεχομένων προχείρου
getregtype('*')        " Τύπος καταχωρητή: 'v' (χαρακτήρας), 'V' (γραμμή), '<ctrl-v>' (μπλοκ)
setreg('*', 'new text')

Σχετικά θέματα