دليل مرجعي لدوال لغة 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")
المخزن المؤقت والمؤشر
فحص المخزن المؤقت
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") " موضع العلامة '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 المجلد الأب (/Users/name/project)
" :t اسم الملف فقط (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" (نص فرعي: الإزاحة، الطول)
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) " الطول بالبايت
strchars(str) " عدد الحروف (يدعم الحروف متعددة البايتات)
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')