Οδηγός αναφοράς για τις ενσωματωμένες συναρτήσεις σεναρίων και τις δομές δεδομένων του 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')