Emmet: تكامل Emmet مع المحررات

أخبار سارة: قد تكون تستخدم بالفعل محررًا يدعم Emmet — VSCode و WebStorm و Atom مفعل بها افتراضيًا، دون حاجة لأي تكوين.

1. ما ستتعلمه


2. قصة حقيقية لمطور واجهة أمامية

(1) نقطة الألم: إعادة تعلم Emmet كل مرة تغير فيها المحرر

بوب هو مطور واجهة أمامية بدأ مؤخرًا وظيفة جديدة. في يومه الأول، أعطاه الفريق حاسوبًا مثبتًا عليه WebStorm مس��قًا — وليس VSCode الذي اعتاد عليه. فتح بوب WebStorm، كتب div.box، ضغط Tab... ولم يحدث شيء. افترض أن WebStorm لا يدعم Emmet وذه�� ليسأل مديره، الذي أخبره: "WebStorm مفعل به افتراضيًا. هل تضغط المفتاح الصحيح؟" احتار بوب — اتضح أن المحررات المختلفة لها مفاتيح ��شغيل Emmet مختلفة. VSCode يستخدم Tab، WebStorm أيضًا يستخدم Tab، لكن بعض الإصدارات القديمة تتطلب Ctrl+Alt+Space. ثم سأل زميلته أليس عن المحرر الذي تستخدمه. قالت أليس إنها تستخدم Sublime Text، "لكنك تحتاج إلى تثبيت ملحق Emmet أولاً وتخصيص اختصار المفاتيح — Tab لن يعمل مباشرة." فكر بوب: إذا غيرت المحرر، يجب علي إعادة تكوين كل شيء من الصفر كل مرة. هذا عائق كبير جدًا.

(2) تكامل Emmet مع المحرر: الحل

إجابة Emmet: تقريبًا جميع المحررات الرئيسية تدعم Emmet بشكل أصلي أو عبر الملحقات، لكن طريقة التشغيل، وتغطية أنواع الملفات، ومتطلبات التكوين تختلف. بعد إكمال هذا الدرس، صنع بوب ورقة مرجعية وعلقها فوق مكتبه:

المحرر مفعل افتراضيًا يحتاج ملحق مفتاح التشغيل الافتراضي أنواع الملفات
VSCode نعم لا Tab .html .css .jsx .tsx .vue
WebStorm / IntelliJ نعم لا Tab .html .css .jsx .tsx .vue
Sublime Text لا نعم Ctrl+E (بعد تثبيت الملحق) .html .css
Atom نعم لا Tab .html .css
Vim / Neovim لا نعم مخصص .html .css
Brackets نعم لا Ctrl+Alt+Space .html .css

بهذه الورقة المرجعية، يمكن لبوب تشغيل Emmet في أي محرر خلال 5 دقائق.

(3) الفوائد

معرفة حالة دعم محررك تجلب فائدتين: أولاً، توفر وقت التكوين — لا مزيد من التخبط في الإعداد كل مرة تغير فيها المحرر. ثانيًا�� تجنب التداخل — ستعرف أي المفاتيح "يملكها" Emmet، حتى لا تشغل التوسيع عن طريق الخطأ حيث لا تريده. بعد هذا الدرس، ستتمكن من تشغيل Emmet في محررك المفضل خلال 5 دقائق.


3. نظرة عامة على دعم المحررات

أحد أهداف تصميم Emmet هو الاستقلال عن المحرر — نفس الاختصار ul>li*3 يتوسع بشكل متطابق في VSCode و WebStorm و Sublime. الاختلافات الوحيدة تكمن في كيفية دمجه و كيفية تشغيله.

المحرر مفعل افتراضيًا يحتاج ملحق مفتاح التشغيل الافتراضي HTML CSS JSX/TSX
VSCode نعم لا Tab نعم نعم نعم (يحتاج تكوين)
WebStorm / IntelliJ نعم لا Tab نعم نعم نعم
Sublime Text لا نعم (ملحق Emmet) Ctrl+E (قابل للتخصيص) نعم نعم يحتاج تفعيل يدوي
Atom نعم لا Tab نعم نعم يحتاج تفعيل يدوي
Vim / Neovim لا نعم (emmet-vim) مخصص (مثل <C-y>,) نعم نعم يحتاج تكوين
Brackets نعم لا Ctrl+Alt+Space نعم نعم لا

نصيحة: بناء جملة JSX/TSX يختلف قليلاً عن HTML القياسي (class يُكتب كـ className). بعض المحررات تحتاج إلى تفعيل خيار "Emmet في JSX" بشكل صريح للتوسيع الصحيح.


4. إعداد عملي للمحررات الشائعة

فيما يلي نشرح إعداد Emmet للمحررات الثلاثة الأكثر استخدامًا: VSCode و WebStorm و Sublime Text.

(1) VSCode: يعمل مباشرة

VSCode لديه دعم Emmet الأكثر شمولاً. الإصدارات 1.0 وما بعدها مفعل بها Emmet افتراضيًا — لا حاجة لملحقات، فقط اضغط Tab في ملفات HTML أو CSS للتوسيع.

▶ مثال: التحقق من Emmet في VSCode (الصعوبة: ★)

الخطوة 1: إنشاء ملف HTML جديد

BASH
# اضغط Ctrl+N في VSCode لإنشاء ملف جديد
# احفظه باسم test.html (VSCode يكتشف اللغة تلقائيًا من الامتداد)

الخطوة 2: اكتب اختصار Emmet

HTML
div.container>h1{Hello Emmet}+p.lead{My first Emmet expansion in VSCode}

الخطوة 3: اضغط Tab للتشغيل

HTML
<div class="container">
  <h1>Hello Emmet</h1>
  <p class="lead">My first Emmet expansion in VSCode</p>
</div>

الناتج:

TEXT 📖 للعرض فقط
سطر واحد من الاختصار يتوسع فورًا إلى 4 أسطر من HTML، مع وضع المؤشر داخل h1. مفتاح Tab الافتراضي في VSCode يعمل لتوسيع Emmet دون أي تكوين.

تفعيل Emmet في ملفات JSX/TSX (اختياري):

JSON
// أضف إلى settings.json (Ctrl+Shift+P → "Preferences: Open User Settings (JSON)")
{
  "emmet.includeLanguages": {
    "javascript": "javascriptreact",
    "typescript": "typescriptreact"
  }
}

(2) WebStorm / IntelliJ: التشغيل بـ Tab افتراضيًا

جميع بيئات JetBrains (IntelliJ IDEA، PyCharm، PhpStorm، إلخ) تأتي مع Emmet مدمجًا — لا حاجة للتثبيت. مفتاح التشغيل هو أيضًا Tab، لكن هناك فارق بسيط: مفتاح Tab في WebStorm قد يحاول أولاً إكمال الكود؛ قد تحتاج إلى الضغط على Tab عدة مرات لتشغيل توسيع Emmet.

▶ مثال: التحقق من Emmet في WebStorm (الصعوبة: ★)

الخطوة 1: إنشاء ملف HTML جديد

BASH
# File → New → HTML File → سمّه test.html

الخطوة 2: اكتب الاختصار واضغط Tab

HTML
ul.nav>li*4>a[href="#"]{Menu $}

الخطوة 3: نتيجة التوسيع

HTML
<ul class="nav">
  <li><a href="#">Menu 1</a></li>
  <li><a href="#">Menu 2</a></li>
  <li><a href="#">Menu 3</a></li>
  <li><a href="#">Menu 4</a></li>
</ul>

الناتج:

TEXT 📖 للعرض فقط
قائمة تنقل تحتوي على 4 عناصر قائمة يتم توليدها فورًا. إذا لم يستجب Tab، اضغط `Ctrl+Alt+Space` لفرض توسيع Emmet (اختصار المفاتيح البديل في WebStorm).

(3) Sublime Text: يحتاج ملحقًا

Sublime Text لا يتضمن Emmet افتراضيًا. تحتاج إلى تثبيت ملحق Emmet عبر Package Control. بعد التثبيت، مفتاح التشغيل الافتراضي هو Ctrl+E (وليس Tab، لأن Tab محجوز للإزاحة في Sublime).

▶ مثال: تثبيت Emmet في Sublime Text (الصعوبة: ★★)

الخطوة 1: تثبيت Package Control

BASH
# إذا لم يكن Package Control مثبتًا بعد:
# 1. اضغط Ctrl+` لفتح الكونسول
# 2. الصق كود تثبيت Package Control (من https://packagecontrol.io/installation)
# 3. أعد تشغيل Sublime Text

الخطوة 2: تثبيت ملحق Emmet

BASH
# 1. اضغط Ctrl+Shift+P لفتح لوحة الأوامر
# 2. اكتب "Package Control: Install Package" واضغط Enter
# 3. ابحث عن "Emmet" واضغط Enter للتثبيت
# 4. يتم تفعيل الملحق تلقائيًا بعد التثبيت

الخطوة 3: استخدم Ctrl+E للتشغيل

HTML
<!-- اكتب الاختصار -->
form>(input[type=email])+(input[type=password])+button{Login}
<!-- ��ضغط Ctrl+E (وليس Tab) -->

نتيجة التوسيع:

HTML
<form>
  <input type="email">
  <input type="password">
  <button>Login</button>
</form>

الناتج:

TEXT 📖 للعرض فقط
شغّل بـ Ctrl+E لتوليد 3 عناصر نموذج فورًا. للتبديل إلى Tab كمفتاح تشغيل، انظر مثال تخصيص المفاتيح أدناه.

(4) اختصارات المفاتيح المخصصة: Tab مقابل Ctrl+E

يفضل العديد من المطورين الضغط على Tab لتشغيل Emmet، لكن محررات مثل Sublime Text و Vim تحجز Tab لوظائف أخرى. يوضح هذا القسم كيفية توسيع مشغل Tab في VSCode ليشمل ملفات JSX — أو التبديل إلى Ctrl+E.

▶ مثال: تخصيص تكوين Emmet في VSCode (الصعوبة: ★★)

السيناريو أ: تفعيل مشغل Tab لملفات JSX/TSX

JSON
// settings.json
{
  "emmet.triggerExpansionOnTab": true,
  "emmet.includeLanguages": {
    "javascript": "javascriptreact",
    "typescript": "typescriptreact",
    "vue-html": "html",
    "razor": "html"
  }
}

السيناريو ب: تغيير مشغل Emmet إلى Ctrl+E (مطابقة Sublime)

JSON
// keybindings.json (Ctrl+Shift+P → "Preferences: Open Keyboard Shortcuts (JSON)")
[
  {
    "key": "ctrl+e",
    "command": "editor.action.emmet.action.expandAbbreviation",
    "when": "editorTextFocus && !editorReadonly"
  }
]

السيناريو ج: تعطيل Emmet في أنواع ملفات محددة

JSON
// settings.json (لتعطيل Emmet في ملفات markdown)
{
  "emmet.excludeLanguages": ["markdown"]
}

الناتج:

TEXT 📖 للعرض فقط
مع الإعدادات أعلاه، يمكنك إعادة تعيين مفتاح تشغيل Emmet إلى أي اختصار يناسب عادات فريقك أو تفضيلاتك الشخصي��، والتحكم بدقة في أنواع الملفات التي ينشط فيها Emmet.

5. قواعد التفعيل التلقائي لأنواع الملفات

يدعم كل محرر مجموعة مختلفة قليلاً من أنواع الملفات لـ Emmet. القاعدة العامة: HTML و CSS مفعلان بالكامل افتراضيًا؛ JSX/TSX مفعل افتراضيًا في VSCode/WebStorm لكنه يح��اج تفعيلاً يدويًا في Sublime؛ Vue و Svelte وغيرهما يحتاجون تكوينًا إضافيًا.

نوع الملف VSCode WebStorm Sublime Text ملاحظات
.html .htm نعم نعم نعم دعم افتراضي
.css نعم نعم نعم دعم افتراضي
.js .jsx نعم (يتطلب emmet.includeLanguages) نعم يحتاج تفعيل يدوي JSX يحتاج وضع className
.ts .tsx نعم (يحتاج تكوين) نعم يحتاج تفعيل يدوي نفس JSX
.vue نعم (يحتاج تكوين) نعم (مع ملحق Vue) يحتاج تفعيل يدوي ملفات Vue SFC
.svelte نعم (يحتاج ملحق Svelte) يحتاج ملحق لا قوالب Svelte
.md .markdown اختياري اختياري اختياري HTML مضمن في Markdown

نصيحة: إذا لم يستجب Emmet لـ Tab في نوع ملف معين، تحقق أولاً من إعدادات اقتران نوع الملف في محررك لتأكيد أن Emmet مفعل لتلك اللغة.


❓ أسئلة شائعة

س Tab لا يعمل في VSCode الخاص بي. ما الذي أخطأت في تكوينه؟
ج أولاً، تأكد من حفظ الملف بامتداد .html أو .css (VSCode لن يعامل الملفات بدون امتداد كـ HTML). ثانيًا، تحقق مما إذا كان لديك أي ملحقات مثبتة تعترض Tab (مثل الإصدارات القديمة من Vetur) — جرب تعطيلها مؤقتًا. أخيرًا، تحقق من أن emmet.triggerExpansionOnTab مضبوط على true.
س في WebStorm، Tab دائمًا يشغل إكمال الكود أولاً، ويجب علي الضغط على Tab عدة مرات. ماذا يمكنني أن أفعل؟
ج هذا حسب التصميم في WebStorm — Tab يعطي الأولوية لإكمال الكود. حلان بديلان: 1) بعد كتابة الاختصار، انتظر ظهور نافذة إكمال الكود، اضغط Esc لإغلاقها، ثم اضغط Tab لتشغيل Emmet. 2) استخدم Ctrl+Alt+Space لفرض توسيع Emmet.
س بعد تثبيت ملحق Emmet في Sublime Text، Tab لا يزال لا يعمل. أي مفتاح يجب أن أستخدم؟
ج مشغل Emmet الافتراضي في Sublime Text هو Ctrl+E، وليس Tab (Tab م��جوز للإزاحة في Sublime). لاستخدام Tab بدلاً من ذلك، خصص اختصار المفاتيح — انظر القسم 4(4) من هذا الدرس.
س في ملفات JSX، Emmet يوسع class بدلاً من className. كيف أصلح هذا؟
ج هذا هو السلوك القياسي لـ Emmet في سياقات JSX. للتوسيع كـ className، يمكنك كتابة className بشكل صريح في اختصارك (Emmet يخرجه كما هو)، أو تفعيل التحويل التلقائي "وضع JSX" في محررك (إعداد emmet.syntaxProfiles في VSCode).

📖 ملخص


📝 تمارين

  1. أساسي (الصعوبة: ★): في محررك الحالي، أنشئ ملف .html جديدًا، اكتب div.container>ul>li*3>a، اضغط مفتاح التشغيل الافتراضي، سجل نتيجة التوسيع، والتقط لقطة شاشة.
  2. متوسط (الصعوبة: ★★): افتح إعدادات محررك، ابحث عن خيارات التكوين المتعلقة بـ Emmet، اذكر 3 خيارات لم تكن تعرفها من قبل (مثل مفتاح التشغيل، اللغات المضمنة، اللغات المستبعدة)، ووصف ما يفعله كل منها.
  3. متقدم (الصعوبة: ★★★): إذا كنت تستخدم ملفات JSX/TSX أو Vue بشكل متكرر، قم بتكوين محررك لتفعيل Emmet في أنواع الملفات هذه. ثم اكتب اختصار Emmet واحدًا يتوسع إلى مكون JSX كامل (يتضمن props وربط الأحداث).
Web-Tutorial.com

فريق Web-Tutorial التقني

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

100%