0Pricing
Lua Academy · درس

المخازن والنوافذ

عالج المحرر

المخازن والنوافذ درس مجاني في Lua Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Lua Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Lua Academy 4 دروس في المجموع.

المخازن المؤقتة والنوافذ وعلامات التبويب

يفصل Neovim بين المحتوى والعرض. يحتوي المخزن المؤقت على النص في الذاكرة؛ والنافذة هي منفذ عرض على مخزن مؤقت؛ وصفحة التبويب هي تخطيط للنوافذ.

يمكن أن يظهر مخزن مؤقت واحد في نوافذ متعددة. وتتعامل الإضافات مع هذه المقابض، وهي أعداد صحيحة، عبر عائلتي واجهة API nvim_buf_* وnvim_win_*.

local buf = vim.api.nvim_get_current_buf()
local win = vim.api.nvim_get_current_win()
print(buf, win)

قراءة أسطر المخزن المؤقت

تُعيد nvim_buf_get_lines(buf, start, end_, strict) الأسطر في صورة قائمة. تبدأ الفهارس من الصفر ولا تشمل قيمة النهاية؛ مرّروا -1 كنهاية للوصول إلى السطر الأخير.

يسمح ضبط strict_indexing على false باستخدام فهارس خارج النطاق بدلًا من إصدار خطأ.

local lines = vim.api.nvim_buf_get_lines(0, 0, -1, false)
print('line count: ' .. #lines)

كتابة أسطر المخزن المؤقت

تستبدل nvim_buf_set_lines نطاقًا بنص جديد. وللإلحاق في النهاية، اضبطوا البداية والنهاية كلتيهما على -1. وللكتابة فوق كل شيء، استخدموا 0, -1.

يكون الاستبدال قائمة Lua من السلاسل النصية، سلسلة واحدة لكل سطر، من دون محارف سطر جديد في النهاية.

vim.api.nvim_buf_set_lines(0, -1, -1, false, {
  '-- appended line',
})

المخازن المؤقتة من نوع Scratch

أنشئوا مخزنًا مؤقتًا غير مُدرج وقابلًا للتخلص منه باستخدام nvim_create_buf(listed, scratch). ويجعل تمرير false, true مخزنًا مؤقتًا من نوع Scratch مثاليًا لواجهة مستخدم الإضافة.

اضبطوا bufhidden = 'wipe' حتى يختفي عند إغلاق نافذته، فتتجنبوا بقاء مخازن مؤقتة غير لازمة.

local buf = vim.api.nvim_create_buf(false, true)
vim.bo[buf].bufhidden = 'wipe'
vim.api.nvim_buf_set_lines(buf, 0, -1, false, { 'Panel' })

خيارات محلية للمخزن المؤقت

استخدموا vim.bo[buf] لفهرسة الخيارات المحلية للمخزن المؤقت وتعيينها على مقبض محدد. ومن إعدادات الإضافات الشائعة modifiable = false وbuftype = 'nofile'.

يمنع جعل مخزن العرض غير قابل للتعديل المستخدمين من تحرير المحتوى المُنشأ عن طريق الخطأ.

vim.bo[buf].modifiable = false
vim.bo[buf].buftype = 'nofile'
vim.bo[buf].filetype = 'myplugin'

فتح نوافذ عائمة

يضع nvim_open_win(buf, enter, config) مخزنًا مؤقتًا في نافذة عائمة. ويحدد الإعداد relative وrow وcol وwidth وheight وborder.

تُعد النوافذ العائمة أساس واجهة المستخدم الحديثة، مثل مستندات التحويم وأدوات الاختيار والإشعارات.

local win = vim.api.nvim_open_win(buf, true, {
  relative = 'editor', row = 5, col = 10,
  width = 40, height = 10, border = 'rounded',
})

إعداد النافذة

عدّلوا نافذة عائمة مفتوحة باستخدام nvim_win_set_config، وهو أمر مفيد لتغيير حجمها عند وقوع VimResized. واقرؤوا التخطيط الحالي باستخدام nvim_win_get_config.

اضبطوا الخيارات المحلية للنافذة عبر vim.wo[win]، مثل إخفاء سطر المؤشر أو تعطيل أعمدة الأرقام في لوحات واجهة المستخدم.

vim.wo[win].number = false
vim.wo[win].cursorline = true
vim.api.nvim_win_set_config(win, { width = 50 })

المؤشر والموضع

حرّكوا المؤشر باستخدام nvim_win_set_cursor(win, {row, col}). لاحظوا أن row يبدأ من واحد، بينما col يبدأ من الصفر، وهو مصدر شائع لأخطاء الفرق بمقدار واحد.

اقرؤوا الموضع مجددًا باستخدام nvim_win_get_cursor لحفظ موضع المستخدم واستعادته حول إحدى العمليات.

local pos = vim.api.nvim_win_get_cursor(0)
vim.api.nvim_win_set_cursor(0, { pos[1], 0 })

التحقق من الصلاحية والتنظيف

قد تصبح المقابض قديمة أو غير صالحة. تحقّقوا باستخدام nvim_buf_is_valid وnvim_win_is_valid قبل إجراء أي عملية على المقابض المخزنة.

أغلقوا النوافذ باستخدام nvim_win_close(win, force) واحذفوا المخازن المؤقتة عبر nvim_buf_delete(buf, { force = true }). تحقّقوا دائمًا أولًا لتجنب الأخطاء.

if vim.api.nvim_win_is_valid(win) then
  vim.api.nvim_win_close(win, true)
end

العلامات الممتدة ومساحات الأسماء

تربط العلامات الممتدة البيانات الوصفية بالنص الذي يتحرك مع إجراء التعديلات. أنشئ مساحة أسماء باستخدام nvim_create_namespace، ثم أرفق نصًا افتراضيًا أو تمييزات.

تدعم nvim_buf_set_extmark النص الافتراضي وأعمدة الإشارات والتمييزات المضمنة، وهي الآلية التي تقف وراء تلميحات الإدراج وإضافات git blame.

local ns = vim.api.nvim_create_namespace('myplugin')
vim.api.nvim_buf_set_extmark(0, ns, 0, 0, {
  virt_text = { { ' hint', 'Comment' } },
})

السرد والتكرار

تعيد nvim_list_bufs وnvim_list_wins جميع المقابض الحالية. صفِّها باستخدام nvim_buf_is_loaded أو من خلال التحقق من الخيارات.

يتيح التكرار للإضافة تنفيذ إجراء على مستوى الجلسة بأكملها، مثل إغلاق كل نافذة عائمة أو تحديث كل مخزن مؤقت من نوع ملف محدد.

for _, b in ipairs(vim.api.nvim_list_bufs()) do
  if vim.api.nvim_buf_is_loaded(b) then print(b) end
end

مراجعة سريعة

تحقق مما تعلمته عن المخازن المؤقتة والنوافذ.

مراجعة: المخازن المؤقتة والنوافذ

تحتفظ المخازن المؤقتة بالنص، بينما تعرضه النوافذ، وتكون المقابض أعدادًا صحيحة يجب التحقق منها قبل استخدامها. يمكنك قراءة الأسطر وكتابتها، وإنشاء مخازن مؤقتة مؤقتة، وتعيين خيارات محلية للمخزن المؤقت.

تمنحك النوافذ العائمة عبر nvim_open_win، والتحكم في المؤشر، والعلامات الممتدة، وواجهات برمجة التطبيقات الخاصة بالسرد كل ما تحتاج إليه لبناء واجهات مستخدم غنية وحفظ الحالة للإضافات.

الأسئلة الشائعة

هل درس «المخازن والنوافذ» مجاني؟

نعم — نص درس «المخازن والنوافذ» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Lua Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Lua Academy 4 دروس في المجموع.

ماذا ستتعلم في «المخازن والنوافذ»؟

عالج المحرر تتمرن على Lua Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Lua Academy؟

لا تُشترط خبرة سابقة. Lua Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «المخازن والنوافذ»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Lua Academy هذا؟

نعم. كل درس في Lua Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. واجهة Lua البرمجية في Neovim
  2. الأوامر وخرائط المفاتيح
  3. المخازن والنوافذ
  4. تجهيز إضافة
← العودة إلى Lua Academy