فيم مقابل Emacs: كيف تفكر بها - واختيار المحرر الخاص بك

عندما أتجول لمقالات لتكتبها ، أتطلع إلى Google وأرى ما يوجد هناك. في هذه الحالة ، قمت بالبحث في Google عن "vim vs. emacs" و "emacs vim vim" ، بما في ذلك على هذا الموقع ، ولم أجد ما أردت: دليل ، حصريًا عن هذين المحررين ، من شأنه توجيه شخص جديد ومساعدتهم على الاختيار بينهما. تقوم مواد أخرى على الويب بعمل رائع في تغطية تاريخ المحررين وخلفيتهم وتاريخهم وما إلى ذلك. وينطبق الشيء نفسه على ربط المفاتيح ومنحنى التعلم المبكر. لن أغطي ذلك هنا. بدلاً من ذلك ، سأبحث عن سبب اختيارك لأحدهما على الآخر.

لا يمكنني القول أن لدي كلبًا في هذه المعركة ، لكنني بدأت مع Emacs منذ سنوات عند تحرير مخطوطة ، وتحولت إلى vim واستغرقت ذلك يوميًا لعدة سنوات ، ثم انتقلت مرة أخرى إلى Emacs. تركت Vim انطباعًا كبيرًا عني لدرجة أنني نسيت فعليًا مرحلة My Emacs السابقة واضطررت إلى العودة وتصحيح هذه الفقرة ، لإعطائك إحساسًا بكيفية استخدامها على نطاق واسع. لاحظ أن vim تعني "vi محسنة" ويمكن استبدالها بشكل أساسي بـ vi ، في أي سياقات ذات أهمية (مثل عمليات بحث Google ، حيث تظهر vi مقابل emacs النتائج vim مقابل emacs).

إذا أخبرك الناس أن المنتجات المختلفة جيدة بنفس القدر في نفس الشيء ، فلن يكون لديك أي آلية للاختيار بينها ، باستثناء "غريزة القناة الهضمية" أو الثقة الغزيرة في شخص واحد على الآخر. في خطر تشويه قدرات كلا المحررين ، سأختار "الجوانب" وسأعطيك رأيًا في الوقت الذي يجب أن تستخدم فيه vim ، وعندما يجب عليك استخدام Emacs. يرجى ملاحظة أنه يمكنك إنشاء سير عمل يقوم بكتابة نفس الوظيفة تقريبًا بدافع من vim بحيث يمكنك الخروج من Emacs ، والعكس صحيح. من ناحية أخرى ، إذا كنت في مكان متقدم حيث لا يستطيع سوى واحد أو الآخر تلبية احتياجاتك ، فستحصل على إجابتك. لمعظم حالات الاستخدام ، تتداخل في وظائف.

لإخباركم كيف أستخدم المحرر الخاص بي ، أقضي حوالي نصف يوم في كتابة رسائل البريد الإلكتروني والنصوص والكتابات النصية نصف الأخرى في روبي أو بيثون أو جافا سكريبت أو ليسب. أرسل إجاباتي على الرغم من GET و POST إلى واجهة برمجة التطبيقات - يتم ذلك أيضًا من خلال Emacs. سيؤدي ذلك إلى تلوين وجهة نظري ، نظرًا لأنني لا أعطيك رأيي في أفضل محرر للحالات أو اللغات التي لا تنطبق علي. مع أن يقال ، إلى العمل.

همة

أولاً ، استخدم Vim بشكل مختلف عن Emacs. أقوم بفتح vim في محطة تقريبًا في كل مرة أرغب فيها في تحرير ملف ، حيث إنه سريع التحميل وسريع الاستخدام. إنه شعور "يشبه اللعبة" ، كما لاحظ آخرون ؛ بمجرد أن تتعلم ضغطات المفاتيح ، من الممتع أن تتجول في ملفك مع بضع نقرات من لوحة المفاتيح.

ما مدى صعوبة التعلم؟ ليس كل هذا صعبًا ، حيث تسير الأمور (أقل من ذلك ، على سبيل المثال ، الإسبانية ، أو فيزياء المدارس الثانوية ، أو Dark Darks). يحتوي على منحنى تعليمي حاد إذا كنت تبدأ من لا شيء ، ولكن لحسن الحظ ، فإن الجزء الأكبر من هذا المنحنى محشو في الساعات القليلة الأولى.

صورة موجودة على الإنترنت (آسف ، لا أعرف الإسناد). لاحظ ما تقوله صورة vi / vim - من الصعب أن تتصاعد في البداية ، وهي تبحر بسلاسة بعد ذلك الجدار.

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

ما يقدمه vim ، في رأيي ، هو حل أنيق يعمل بشكل جميل إذا كنت تأخذ الوقت الكافي لتعلمه ، خارج الصندوق مباشرة. إذا كانت لعبة vim لعبة ، فقد يكون ذلك من صنع مصمم اللعبة الرئيسي Shigeru Miyamoto. إنه جيد حقًا فيما يفعله ؛ أفكاره حول ماهية القيم الافتراضية ، وكيف قد تبدو أهدافك ، وكيف تنقلك إلى أفعالك ، ممتازة بشكل عام. ستتعلم عمومًا الكثير إذا سمحت لنفسك بالتعلم منه. هل ستخلق لعبة أفضل من لعبة Legend of Zelda الأصلية؟ حتى لو قمت بذلك ، لا يزال بإمكانك التعلم من إتقانه للوسيط.

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

أيضًا ، في عصر AWS وأجهزة Linux الافتراضية ، فإن vim موجود في كل مكان. إذا قمت بتدوير مثيل AWS جديد ، ففيم هناك. إذا كنت بحاجة إلى استكشاف الأخطاء وإصلاحها في سجلات شخص آخر ولديك إمكانية الوصول إلى أجهزتهم ، فابحث عن ذلك. يمكنك الدخول والخروج في وقت قياسي ، ومن الجيد أن يتم استخدام حرف واحد من بين الآلاف ، وإجراء تغيير أو تعديل ، والخروج. الدقة الجراحية هي لعبة vim.

لكن هذا ليس كل شيء. لست مضطرًا إلى استخدام vim بالطريقة الافتراضية للمخزون (على الرغم من أن ذلك قوي - تتمتع Emacs بوضع مشهور تقليد يسمى الوضع الشرير ، بينما لا أحد يطالع بسداد المكمل مع "وضع emacs" في vim) . هناك الكثير من المطورين الذين يستخدمون vim مثل IDE الخاص بهم ، ولديه مساعدة بناء جملة متوافقة مع جميع اللغات. فقد الإضافات ، ونظم إدارة البرنامج المساعد - caboodle كله. تفسر الموارد الأخرى ذلك بشكل أفضل ، ولكن النقطة المهمة هي أنه يمكنك تخصيص vim باستخدام المكونات الإضافية وملفات التكوين الخاصة بك بدرجة كبيرة. إذا كنت تعرف vim ، فستكون هناك بالتأكيد مناسبة جيدة لك لاستخدامه.

من الصعب التمييز بشكل صارم وسريع بين مجموعتين من الميزات التي تظهر من أخمص القدمين تمامًا كما تفعل Emacs و vim ، لكنني سأقوم بهذه الملاحظة الشخصية. فكر في مقارنتي السابقة بسكين الطاهي. في النهاية ، يستخدم الطاهي فقط السكين كأداة - أداة رائعة ، نعم ، وأداة تم اختيارها بعناية فائقة ، ولكن لا يزال ، أداة تعتبر ثانوية في العمل الحقيقي الذي هو تركيزها. في هذه المقارنة الحيوية ، يظهر ذلك غالبًا كمستخدمين vim يفهمون vim بقدر ما يحتاجون إليه ، لكن في النهاية ينظرون إلى vim كوسيلة لتحقيق غاية بدلاً من غاية في حد ذاتها.

صورة رئيس الطهاة في مطعم Chez Panisse

إيماكس ، من ناحية أخرى ...

نظرًا لأن هذا كان شيئًا لم أكن واضحًا فيه عندما بدأت في استخدام Emacs ، فيجب أن أوضحه هنا: لا تستخدم vim مثلك تستخدم Emacs. عندما استخدمت vim في الجهاز ، كنت أفتحه ، إن لم يكن المئات ، مرات في اليوم. من الأفضل أن يتم فتح ملفات في vim في علامات تبويب أو نوافذ ، لكن كان الأمر سريعًا جدًا ولم أشعر بالحاجة مطلقًا ، وأحببت إغلاق الفتح والإغلاق ، حيث لم يكن هناك أي تكاليف. (هذا جزء من السبب الذي يجعل الأمور تسير على ما يرام مع أنظمة tmux ، أو أنظمة وحدة التحكم الافتراضية / الطرفية). يتم تحميل Emacs مع تأخير ملحوظ قدره 2-3 ثوان ، لذلك إذا قارنته بالقيمة vim باستخدامه كما لو كان vim وتحميله 10 مرات في الساعة في مطرافك ، فسوف تتساءل عن سبب قبول أي شخص لهذا الأداء نجاح.

الجواب هو أنهم لا يفعلون ذلك ؛ أنت تعمل ذلك بالطريقة الخاطئة. في emacs ، تفتح برنامج التحرير الخاص بك مرة واحدة فقط ، في بداية يوم عملك. يمكنك بعد ذلك فتح الجهاز داخل Emacs باستخدام وضع shell أو eshell. لاحظ الجلاد: بدلاً من تشغيل vim في جهازك ، فأنت الآن تقوم بتشغيل shell في Emacs. أو بشكل أكثر فظاظة: تعمل المحطة الطرفية على vim بالإضافة إلى أشياء أخرى ، بينما تقوم Emacs بتشغيل المحطة بالإضافة إلى أشياء أخرى. بمرور الوقت ، كما يوحي هذا النهج ، يتم دمج المزيد والمزيد من العناصر في Emacs ؛ الاتجاه هو بالنسبة لمستخدمي Emacs الذين يتمتعون بالقوة "العيش داخل" Emacs ، والمغامرة فقط بالخارج للحصول على المهمات والمهام الخاطئة (على سبيل المثال ، التحقق من كيفية عرض شيء ما في متصفح Chrome).

لكن أليس محرر إيماكس؟ وصفت إحدى المقابلات التي استضافتها ساشا تشوا ذات مرة إيميكس بأنها آلة ليزب افتراضية ، وأعتقد أن هذا إطار مفيد للغاية لذلك.

أنا شخصياً أفكر في Emacs كخطوة تالية منطقية للأشخاص الذين يقولون "أحب سطر الأوامر" أو "أقضي وقتًا طويلاً في سطر الأوامر". Emacs موجودة لتمكين تفضيلات سطر الأوامر - واتخاذ الى المستوى التالي. يمكنك الآن التحكم بشكل غير محدود في تخصيصات لوحة المفاتيح ، علاوة على ذلك ، يمكنك برمجة بيئتك مباشرة باستخدام تخصيصات Lisp (على الرغم من أن هناك الكثير من السحر المبسط الذي تم رشه ، والذي يستخدمه الجميع تقريبًا ؛ ليس عليك إنشاء مترجم من الصفر لجعل هذا حقيقة واقعة ، أو أي شيء آخر فوق طاقة البشر).

مع Emacs ، ستحصل على هذا الصندوق البني الكبير غير المُسمى. في الداخل ، الصندوق ممتلئ بالأدوات ، ومعبأة بإحكام في مساحتها. يبدو أن الكثير من الأدوات عملية للغاية وغير مستوحاة بشكل خاص ، ولكنها تنجز المهمة ، وهذه هي القوة الجماعية لتلك الأدوات ، معًا ، عبقرية المحرر. قضيب معدني ، في حد ذاته؟ ملل. لكن باستخدام ذلك في جهاز به مرفقات للثقوب المملة ، ووضع الكابلات ، وحفر النوى ... هذا هو المكان الذي يمكن أن يأخذك Emacs.

إذا كانت Emacs لعبة ، فسيكون الأمر مثل Minecraft ، باستثناء ربما أكثر صرامة حول الحواف وأكثر تركيزًا من جانب وزارة الدفاع. إنه عالم مفتوح. هذا يفتح الكثير من الاحتمالات ، ومساحة هائلة للإبداع والريادة - ولكن أيضًا ، الكثير من المساحة المخصصة للتجول في جميع أنحاء العالم. إذا كنت لا تهمك سكين الطاهي ، فستضعه وتفعل شيئًا لا يطبخ. ولكن إذا كنت مؤثراً ، فإن Emacs تقدم إغراء إمكانيات التخصيص اللانهائية (غير الضرورية).

ولكن من الناحية العملية ، من الصعب للغاية في كثير من الأحيان تحديد الفرق بين التحسين المفرط الذي لا داعي له ، والتعرف على النظام بطريقة ستؤتي ثمارها بشكل أكبر ، لاحقًا.

ماذا لو كان الجدار الصخري على اليسار ... ثقب آخر ...

بالنسبة لي ، سمح لي Emacs بنسج Emacs Lisp ، وهي لغة نصية (نسخة احتياطية لما لا يمكن أن أفعله بمعرفتي العملية في Lisp) ، وواجهة برمجة تطبيقات (API) في مجموعة متماسكة سهلت علي هيكلي والسبب في عملى. كما سهلت الفصل بين القضايا وتصعيدها ، باستخدام المعايير الخاصة بي ؛ تمكنت من فرض بنية على شيء يبدو غالبًا وكأنه فوضى بلا شكل ، وأنشئ عرضًا تقديميًا مختلفًا تمامًا عن ما يجب علي قبوله من خلال واجهة مستخدم لجهة خارجية.

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

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

الاستنتاجات

في حالتي ، شعرت كأنني دفعت بقوة أكبر من المنطقي للذهاب لحالة الاستخدام الغريبة ، والانتقال إلى المستوى التالي ، كنت بحاجة إلى تعلم برمجة المحرر نفسه. كان هذا يعني VimScript أو Emacs Lisp ، وكان ذلك إجابة سهلة ، للأسباب الموضحة أعلاه. لقد شعرت أيضًا بأن Emacs كان لديه قشرة ص ، ربما أتعلمها أيضًا من الداخل ، في الجانب العلوي من مقارنة lightsaber ، للوصول إلى رأيي الشخصي حول (الاستنتاج النهائي: ehh).

ولكن بمجرد انضمامي إلى Emacs ، وجدت أن الغلاف الذي يحتويه المحرر هو وسيلة راحة مفيدة ، وقد سمعت أشخاصًا آخرين يستشهدون بهذا كميزة مفضلة لديهم أيضًا. نظرًا لأنه يسهل الوصول إليها بضغطة واحدة ، ويمكنك التنقل فيها باستخدام روابط Emacs ، يمكنني التنقل بشكل أسرع وأكثر راحة بكثير مما كنت أستطيع من قبل ؛ كان من المفيد ، على سبيل المثال ، تقديم طلب JSON لواجهة برمجة التطبيقات (بغض النظر عن المدة) ، والتمرير لأعلى ، ونسخ سطر من البيانات ، ثم الانتقال إلى ملف وإدراجه.

على الورق ، لا يبدو المكافئ في vim أصعب بكثير: إعادة توجيه إخراج JSON إلى ملف ؛ افتح الملف؛ انسخ السطر وافتح ملفًا آخر والصقه - ربما بترتيب الثواني ، في كلتا الحالتين. لكن في الممارسة العملية ، فإن تلك التجربة في Emacs تبدو أكثر سلاسة وأكثر طبيعية. أنت لا تواجه هذه المشكلة أبدًا حيث تعتقد أنك لست بحاجة إلى تحويل الإخراج إلى أقل ، على سبيل المثال ، والآن لا يمكنك رؤية ما تريد لأنه تم التمرير بعيدًا للغاية وتذهب (في هذه الحالة: إعادة توجيه الإخراج إلى ملف…). إنها ليست صفقة ضخمة ، لكنها تبدو وكأنها "تشحذ عجلات Emacs" لاستخدامي الطرفي وتجعلها أكثر راحة قليلاً.

لسوء الحظ ، حتى مع الممارسة المستمرة ، لا يمكنني الاحتفاظ إلا بالعديد من روابط المفاتيح المتضاربة في رأسي مرة واحدة ، وأستطيع أن أقول أنني أشعر بالحيرة بشكل ملحوظ مع vim ، وهو ما فضلتُه في الأسابيع القليلة الأولى (كما أتعامل مع الشهر الثالث من التبديل Emacs ، الآن). ولكن إذا تغيرت أهدافي ، سأكون سعيدًا بالعودة. أميل إلى استخدام أحدهما أو الآخر ، وتخطي أوضاع محاكاة المضاهاة الأخرى (الوضع الشرير) لأنها تؤدي إلى تعارضات خفية تطفئني.

أرغب في تجنب حدوث انفصام سيء رأيته ضمنيًا ، حيث أن vim هو مجرفة العمال البكمين ، و Emacs هي مصمم الأضواء للمهندسين العبقريين. أول قبالة: لا. ثانياً ، إذا ظهر ذلك في عرضي التقديمي ، فقد قمت بتخصيص Emacs أكثر مما فعلت. يمكنك تخصيص استخدامك لـ vim أكثر من المستخدم Emacs العادي ، بسهولة ؛ توقفت ، في النهاية ، لأنه عندما وصل الأمر إلى هذا المستوى من التخصيص ، اعتقدت أنه من الأفضل استثمار ذلك الوقت في تعلم اللغة Lisp (في لهجتها Emacs) من VimScript (والذي لا يستخدم في أي مكان خارج vim ، وليس لديه عملة في السوق ). نظرًا لأنه كان من الأسهل الانتقال من Emacs Lisp إلى Clojure ، على سبيل المثال من VimScript إلى أي شيء آخر ، فقد قرر ذلك.

للقارئ ، آمل أن يوفر هذا سياقًا مفيدًا لكيفية التفكير فيه ، وبعض النصائح حول كيف يمكنك أن تنمو مع محررك مع مرور الوقت. خلاصة القول: أنا أحب vim أكثر عندما غير مكوّن ، لإجراء تغييرات سريعة سريعة ، وللذهاب في خط مستقيم إلى هدف محدد مسبقًا ؛ أنا أحب Emacs أكثر بالنسبة للإمكانات نصف الإنتاجية ، والمتعة النصفية ، والإحتيالية لأنماطها ، والإمكانيات التي تدعمها Lisp ، والتي ، على مدار مسارها الوظيفي ، لديها إمكانات أكبر. شخصيا ، أود أيضًا أن أرى مجتمع كلتيهما يتوسعان في الحجم ، وأنا شخصياً استثمر في رؤية المزيد من مقالات Emacs Lisp تنشر ، لذلك آمل أن يؤدي هذا المقال دوره.

إخلاء المسئولية النهائي والحكاية الفكاهية: منذ فترة عملت مع رجل كان الرجل المعين لـ Emacs ، بينما كنت الرجل الحيوي. كان يزعجني عندما تعلمت أخيرًا Emacs ، وأقول - ما زلت في قائمة المجموعات. قمت بتبديل الوظائف ، وفي فترة انتقالية ، التقطتها ؛ منذ وقت ليس ببعيد ، صادفته في الغداء ، وتوصلنا إلى حديث إيماكس الذي طال انتظاره.

كان هذا هو كشفي الكبير: قلت إن الملامح القاتلة هي وظائف Emacs Lisp والقشرة ، ونتوقع منه أن يوافق على الفور على أن هؤلاء الفائزين هم أيضًا. بدلاً من ذلك ، قال: "أوه ، أنا لا أستخدمها أبدًا." لقد كان يعني ذلك ؛ كانوا أصفار في كتابه الاستخدام الفعلي. بالنسبة له ، كانت وحدات الماكرو ، التي نظرت إليها ولم أجد الكثير من الفائدة لها ، شخصيًا. لذلك ، أنت لا تعرف أبدا ؛ إنه اختيار شخصي للغاية في النهاية. جرِّب كلاً من محاولة الذهاب مع مفضلتك.