it-swarm.asia

ما هو الاختصار الأكثر إنتاجية مع Vim؟

لقد سمعت الكثير عن فيم ، كل من إيجابيات وسلبيات. يبدو أنك يجب أن تكون (كمطور) أسرع مع Vim من أي محرر آخر. أنا أستخدم Vim للقيام ببعض الأشياء الأساسية وأنا في أحسن الأحوال 10 مرات أقل إنتاجية مع Vim.

الشيءان الوحيدان اللذان يجب أن تهتم بهما عندما تتحدث عن السرعة (قد لا تهتم بهما كافية ، ولكن يجب عليك) هما:

  1. يعد استخدام اليدين اليمنى واليسرى بدلاً من ذلك الطريقة الأسرع لاستخدام لوحة المفاتيح.
  2. أبدا لمس الماوس هو الطريقة الثانية لتكون في أسرع وقت ممكن. يتطلب الأمر الأعمار لتحريك يدك والاستيلاء على الماوس وتحريكه وإعادته إلى لوحة المفاتيح (ويتعين عليك في كثير من الأحيان إلقاء نظرة على لوحة المفاتيح للتأكد من أنك قد عادت يدك بشكل صحيح إلى المكان الصحيح)

فيما يلي مثالان يوضحان لماذا أنا أقل إنتاجية مع Vim.

نسخ/قص ولصق أفعل ذلك طوال الوقت. مع كل المحررين المعاصرين تضغط Shift بيدك اليسرى ، وحرك المؤشر بيدك اليمنى لتحديد النص. ثم Ctrl+C نسخ ، يمكنك تحريك المؤشر و Ctrl+V المعاجين.

مع Vim إنه لأمر فظيع:

  • yy لنسخ سطر واحد (لا تريد أبدًا السطر بالكامل!)
  • [number xx]yy لنسخ خطوط xx في المخزن المؤقت. لكنك لا تعرف بالضبط ما إذا كنت قد حددت ما تريد. غالبًا ما يتعين علي القيام به [number xx]dd ثم u للتراجع!

مثال آخر؟ بحث واستبدال

  • في PSPadCtrl+f ثم اكتب ما تريد البحث عنه ، ثم اضغط Enter.
  • في Vim: / ، ثم اكتب ما تريد البحث عنه ، ثم إذا وضعت بعض الأحرف الخاصة \ قبل كل شخصية خاصة ، ثم اضغط Enter.

وكل شيء مع Vim مثل ذلك: يبدو أنني لا أعرف كيفية التعامل معها بالطريقة الصحيحة.

ملحوظة: لقد قرأت بالفعل Vim الغشsheet :)

سؤالي هو:

ما هي الطريقة التي تستخدم بها Vim والتي تجعلك أكثر إنتاجية من المحرر المعاصر؟

1127
Olivier Pons

مشكلتك مع Vim هي أنك لا تأكل vi .

لقد ذكرت أن القطع بـ yy وتشكو من أنك لا تريد أبدًا تقطيع الأسطر بأكملها. في الواقع ، فإن المبرمجين الذين يقومون بتحرير الكود المصدري ، غالباً ما يرغبون في العمل على أسطر كاملة ، ونطاقات من الخطوط وكتل الكود. ومع ذلك ، yy هي واحدة فقط من العديد من الطرق لإلغاء النص في المخزن المؤقت للنسخة المجهولة (أو "التسجيل" كما يطلق عليه vi ).

"Zen" vi هو أنك تتحدث لغة. y الأولي هو فعل. العبارة yy مرادف لـ y_. يتم مضاعفة y حتى يسهل الكتابة ، لأنها عملية شائعة.

يمكن التعبير عن هذا أيضًا كـ ddP (احذف السطر الحالي والصق نسخة في مكانه ؛ وترك نسخة في السجل المجهول كتأثير جانبي). يأخذ y و d "أفعال" أي حركة كـ "موضوع". وبالتالي yW هي "yank من هنا (المؤشر) إلى نهاية الكلمة الحالية/التالية (الكبيرة)" و y'a هي "yank من هنا إلى السطر الذي يحتوي على العلامة المسماة" a '. "

إذا فهمت فقط حركات المؤشر لأعلى ولأسفل ولليسار ولليمين ، فلن يكون vi أكثر إنتاجية من نسخة من "المفكرة" لك. (حسنًا ، لا يزال لديك تسليط الضوء على بناء الجملة والقدرة على التعامل مع الملفات التي يزيد حجمها عن 45 كيلوبايت تقريبًا أو ما يقرب من ذلك ؛ لكن عليك العمل معي هنا).

vi لديه 26 "علامة" و 26 "سجلات". يتم تعيين علامة على أي موقع مؤشر باستخدام الأمر m. يتم تعيين كل علامة بحرف صغير واحد. وهكذا ma تعيّن العلامة "a" على الموقع الحالي ، وتعيين mz العلامة "z". يمكنك الانتقال إلى السطر الذي يحتوي على علامة باستخدام الأمر ' (علامة اقتباس مفردة). وبالتالي ينتقل 'a إلى بداية السطر الذي يحتوي على علامة "a". يمكنك الانتقال إلى الموقع الدقيق لأي علامة باستخدام الأمر ` (backquote). وبالتالي ، فإن `z سينتقل مباشرة إلى الموقع الدقيق للعلامة "z".

نظرًا لأن هذه "حركات" يمكن استخدامها أيضًا كمواضيع لـ "عبارات" أخرى.

لذلك ، تتمثل إحدى طرق قص التحديد التعسفي للنص في إسقاط علامة (عادةً ما أستخدم "a" كعلامة "أول" الخاصة بي ، "z" بصفتي العلامة التالية ، "b" كعلامة أخرى ، و "e" على أنها علامة أخرى (لا أتذكر أنني استخدمت تفاعليًا أكثر من أربع علامات في 15 عامًا من استخدام vi ؛ يُنشئ المرء اصطلاحات خاصة به فيما يتعلق بكيفية استخدام العلامات والسجلات بواسطة وحدات الماكرو التي لا تزعج سياق الشخص التفاعلي) ، ثم ننتقل إلى الطرف الآخر من النص المطلوب ؛ يمكن أن تبدأ في أي من النهايتين ، لا يهم ، ثم يمكننا ببساطة استخدام d`a لقص أو y`a للنسخ ، وبالتالي فإن العملية برمتها تحتوي على 5 ضغطات المفاتيح العامة (ستة إذا بدأنا في وضع "insert" وتحتاج إلى Esc خارج وضع القيادة). بمجرد قيامنا بقصها أو نسخها ، فإن لصق نسخة منها هو بمثابة ضغطة مفتاح واحدة: p.

أقول أن هذه طريقة واحدة لقص أو نسخ النص. ومع ذلك ، أنها ليست سوى واحدة من بين العديد. في كثير من الأحيان يمكننا أن نصف بإيجاز نطاق النص دون تحريك المؤشر وإسقاط علامة. على سبيل المثال ، إذا كنت في فقرة من النص ، يمكنني استخدام حركات { و } لبداية أو نهاية الفقرة على التوالي. لذلك ، لنقل فقرة من النص قمت بقصها باستخدام {d} (3 ضغطات المفاتيح). (إذا كنت موجودًا بالفعل في السطر الأول أو الأخير من الفقرة ، فيمكنني ببساطة استخدام d} أو d{ على التوالي.

إن مفهوم "الفقرة" الافتراضي هو شيء معقول عادةً. وبالتالي فإنه يعمل في كثير من الأحيان لرمز وكذلك النثر.

غالبًا ما نعرف بعض الأنماط (التعبير المنتظم) التي تحدد نهاية أو أخرى للنص الذي يهمنا. البحث للأمام أو للخلف عبارة عن حركات في vi . وبالتالي ، يمكن استخدامها أيضًا "كمواضيع" في "بياناتنا". لذلك يمكنني استخدام d/foo للقطع من السطر الحالي إلى السطر التالي الذي يحتوي على السلسلة "foo" و y?bar للنسخ من السطر الحالي إلى أحدث سطر (سابق) يحتوي على "bar". إذا لم أكن أرغب في استخدام سطور كاملة ، فلا يزال بإمكاني استخدام حركات البحث (كبيانات خاصة بهم) ، واسقط علامتي (علاماتي) واستخدم أوامر `x كما هو موضح سابقًا.

بالإضافة إلى "الأفعال" و "الموضوعات" vi يوجد أيضًا "كائنات" (بالمعنى النحوي للمصطلح). حتى الآن لقد وصفت فقط استخدام السجل المجهول. ومع ذلك ، يمكنني استخدام أيٍّ من سجلات 26 "المسماة" بواسطة البادئة مرجع "الكائن" مع " (معدل الاقتباس المزدوج). وبالتالي إذا استخدمت "add ، فسأقوم بقص السطر الحالي في السجل "a" وإذا كنت تستخدم "by/foo فأنا أقوم بنسخ نسخة من النص من هنا إلى السطر التالي الذي يحتوي على "foo" في سجل "b". للصق من سجل ، أود فقط أن أقوم بادئة اللصق بنفس تسلسل المعدل: "ap يلصق نسخة من محتويات السجل "a" في النص بعد المؤشر ، ويلصق "bP نسخة من "b 'قبل السطر الحالي.

يضيف مفهوم "البادئات" هذا أيضًا نظائر "الصفات" النحوية و "الظروف" إلى لغة التلاعب بالنص "." يمكن لمعظم الأوامر (الأفعال) والحركة (الأفعال أو الأشياء ، اعتمادًا على السياق) أن تأخذ أيضًا بادئات رقمية. يعني 3J "الانضمام إلى الأسطر الثلاثة التالية" ويعني d5} "حذف من السطر الحالي حتى نهاية الفقرة الخامسة لأسفل من هنا."

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


عينة من الحيل الأكثر تقدما:

هناك عدد من أوامر : ، وأبرزها تقنية الاستبدال العمومي :% s/foo/bar/g. (هذا ليس متقدمًا ولكن يمكن استخدام أوامر :). مجموعة الأوامر : بأكملها كانت موروثة تاريخيا بواسطة vi التجسدات السابقة مثل ed (محرر سطر) وبعد ذلك the ex (محرر الخط الممتد) الأدوات المساعدة. في الواقع vi تتم تسمية ذلك لأنه الواجهة المرئية ex .

تعمل أوامر : عادةً على أسطر النص. تمت كتابة ed و ex في عصر كانت فيه الشاشات الطرفية غير شائعة وكان العديد من المحطات الطرفية عبارة عن أجهزة "teletype" (TTY). لذلك كان من الشائع العمل من النسخ المطبوعة من النص ، باستخدام الأوامر من خلال واجهة شديدة الخطورة (كانت سرعات الاتصال الشائعة 110 باود ، أو ما يقرب من 11 حرفًا في الثانية - وهو أبطأ من الطباعة السريعة ؛ كانت التخلفات شائعة في جلسات تفاعلية متعددة المستخدمين ؛ بالإضافة إلى ذلك كان هناك في الغالب بعض الدوافع لحفظ الورق).

لذلك يتضمن بناء جملة معظم أوامر : عنوانًا أو نطاقًا من العناوين (رقم السطر) متبوعًا بأمر. من الطبيعي أن يستخدم الشخص أرقام الأسطر الحرفية: :127,215 s/foo/bar لتغيير التكرار الأول لـ "foo" إلى "bar" على كل سطر بين 127 و 215. يمكن للمرء أيضًا استخدام بعض الاختصارات مثل . أو $ للخطوط الحالية والأخيرة على التوالي. يمكن أيضًا استخدام البادئات النسبية + و - للإشارة إلى الإزاحات بعد أو قبل السطر الحالي ، على التوالي. وبالتالي: :.,$j تعني "من السطر الحالي إلى السطر الأخير ، قم بضمهم جميعًا في سطر واحد". :% مرادف :1,$ (جميع الأسطر).

تحمل الأوامر :... g و :... v بعض التفسير لأنها قوية بشكل لا يصدق. :... g هي بادئة "عالميًا" لتطبيق أمر لاحق على جميع الأسطر التي تتطابق مع نمط (تعبير عادي) بينما يطبق :... v مثل هذا الأمر على جميع الأسطر التي لا تتطابق مع النمط المحدد ("v" من "conVerse"). كما هو الحال مع غيرها ex الأوامر يمكن أن تكون بادئة هذه عن طريق معالجة/مراجع النطاق. وبالتالي ، فإن :.,+21g/foo/d تعني "حذف أي أسطر تحتوي على السلسلة" foo "من السطر الحالي عبر الأسطر 21 التالية" بينما تعني :.,$v/bar/d "من هنا إلى نهاية الملف ، احذف أي أسطر لا تحتوي على سلسلة" bar. "

من المثير للاهتمام أن أمر Unix الشائع grep كان مستوحىًا بالفعل من هذا ex الأمر (وتمت تسميته بالطريقة التي تم بها وثقت). كان ex الأمر :g/re/p (grep) هو الطريقة التي وثقوا بها كيفية "خطوط" الطباعة "العالمية" التي تحتوي على "تعبير عادي" (إعادة). عندما تم استخدام ed و ex ، كان الأمر :p واحدًا من أول ما تعلمه أي شخص وغالبًا ما كان الأول يستخدم عند التحرير أي ملف. كانت كيفية طباعة المحتويات الحالية (عادةً صفحة واحدة كاملة في وقت واحد باستخدام :.,+25p أو بعضها).

لاحظ أن :% g/.../d أو (نظيرها العكسي/المقابل: :% v/.../d هي أنماط الاستخدام الأكثر شيوعًا. ومع ذلك ، هناك أمران ex أوامر جديرة بالتذكر:

يمكننا استخدام m لنقل الخطوط حولها و j للانضمام إلى السطور. على سبيل المثال ، إذا كان لديك قائمة وتريد فصل جميع العناصر المطابقة (أو على العكس لا تتطابق مع بعض الأنماط) دون حذفها ، فيمكنك استخدام شيء مثل: :% g/foo/m$ ... وسيتم نقل جميع خطوط "foo" إلى نهاية الملف. (لاحظ النصيحة الأخرى حول استخدام نهاية الملف كمسافة خدش). سيحتفظ هذا بالترتيب النسبي لجميع خطوط "foo" بينما يستخرجها من بقية القائمة. (سيكون هذا مكافئًا لفعل شيء مثل: 1G!GGmap!Ggrep foo<ENTER>1G:1,'a g/foo'/d (انسخ الملف إلى ذيله الخاص ، وقم بتصفية الذيل من خلال grep ، وحذف جميع العناصر من الرأس).

لربط الأسطر عادةً ، يمكنني العثور على نمط لكل الخطوط التي يجب ربطها بالسابق (جميع الخطوط التي تبدأ بـ "^" بدلاً من "^ *" في بعض قوائم التعداد النقطي ، على سبيل المثال). في هذه الحالة ، سأستخدم: :% g/^ /-1j (لكل سطر مطابق ، اصعد سطرًا واحدًا وانضم إليهم). (راجع للشغل: بالنسبة لقوائم التعداد النقطي التي تحاول البحث عن خطوط التعداد النقطي والانضمام إلى التالى لا تعمل لعدة أسباب ... يمكن أن تربط خط التعداد النقطي بأخرى ، ولن تنضم إلى أي خط تعداد نقطي بـ - الكل من متابعاتها ؛ ستعمل فقط بشكل متزامن على المباريات).

وغني عن القول أنه يمكنك استخدام صديقنا القديم s (بديل) مع الأمرين g و v (global/converse-global). عادة لا تحتاج إلى القيام بذلك. ومع ذلك ، ضع في اعتبارك بعض الحالات التي تريد فيها إجراء استبدال فقط على خطوط مطابقة لنمط آخر. غالبًا ما يمكنك استخدام نمط معقد مع الالتقاطات واستخدام المراجع الخلفية للحفاظ على أجزاء من الخطوط التي لا تريد تغييرها. ومع ذلك ، سيكون من الأسهل غالبًا فصل المطابقة عن الاستبدال: :% g/foo/s/bar/zzz/g - لكل سطر يحتوي على "foo" ، استبدل "bar" بكلمة "bar" بكلمة "zzz". (شيء مثل :% s/\(.*foo.*\)bar\(.*\)/\1zzz\2/g لن يعمل إلا في حالات مثيلات "bar" التي تم إعدادها بواسطة "foo" على نفس السطر ؛ إنها غير كافية بشكلٍ كافٍ بالفعل ، وستكون بحاجة إلى مزيد من التماس للقبض على جميع الحالات التي سبقت "bar" "فو")

النقطة المهمة هي أن هناك أكثر من مجرد خطوط p و s و d في مجموعة أوامر ex.

يمكن أن تشير عناوين : أيضًا إلى العلامات. وبالتالي يمكنك استخدام: :'a,'bg/foo/j لضم أي سطر يحتوي على السلسلة foo إلى السطر التالي ، إذا كان يقع بين السطور بين علامتي "a" و "b". (نعم ، يمكن أن تقتصر جميع أمثلة الأوامر ex السابقة على مجموعات فرعية من سطور الملف عن طريق بادئة مع أنواع التعبير عنونة هذه).

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

آخر مفيد للغاية vi أو ex الأمر هو :r للقراءة في محتويات ملف آخر. وبالتالي: :r foo تدرج محتويات الملف المسمى "foo" في السطر الحالي.

أقوى هو الأمر :r!. هذا يقرأ نتائج الأمر. إنه نفس تعليق الجلسة vi ، تشغيل أمر ، إعادة توجيه الإخراج الخاص به إلى ملف مؤقت ، واستئناف vi الجلسة ، والقراءة في محتويات من درجة الحرارة. ملف.

والأكثر قوة هي الأوامر ! (bang) و :... ! ( ex bang) الأوامر. هذه أيضا تنفيذ الأوامر الخارجية وقراءة النتائج في النص الحالي. ومع ذلك ، فإنها أيضا تصفية اختيارات نصنا من خلال الأمر! هذا يمكننا فرز جميع الأسطر في ملفنا باستخدام 1G!Gsort (G هو الأمر vi "goto" ؛ إنه افتراضيًا للانتقال إلى السطر الأخير من الملف ، ولكن يمكن البادئة برقم سطر ، مثل 1 ، السطر الأول). هذا يكافئ ex البديل :1,$!sort. غالبًا ما يستخدم الكتاب ! مع Unix fmt أو fold الأدوات المساعدة لإعادة تحديد أو "التفاف Word" للنصوص. ماكرو شائع جدًا هو {!}fmt (إعادة صياغة الفقرة الحالية). يستخدمه المبرمجون في بعض الأحيان لتشغيل التعليمات البرمجية الخاصة بهم ، أو أجزاء منه فقط ، من خلال المسافة البادئة أو أدوات إعادة تهيئة التعليمات البرمجية الأخرى.

إن استخدام الأمرين :r! و ! يعني أن أي أداة مساعدة خارجية أو مرشح يمكن التعامل معه على أنه امتداد لمحررنا. كنت أحيانًا تستخدم هذه البرامج النصية التي سحبت البيانات من قاعدة بيانات ، أو باستخدام wget أو lynx الأوامر التي سحبت البيانات من موقع ويب أو ssh الأوامر التي سحبت البيانات من الأنظمة البعيدة.

مفيد آخر ex الأمر هو :so (اختصار لـ :source). هذا يقرأ محتويات الملف كسلسلة من الأوامر. عندما تبدأ vi ، عادةً ما ، تقوم ضمنيًا :source في ملف ~/.exinitrc Vim عادةً ما يتم ذلك على ~/.vimrc ). استخدام هذا هو أنه يمكنك تغيير ملف تعريف المحرر الخاص بك على الطاير ببساطة من خلال تحديد مصادر في مجموعة جديدة من وحدات الماكرو ، والاختصارات ، وإعدادات المحرر. إذا كنت متسترًا ، فيمكنك استخدام هذا كخدعة لتخزين تسلسلات ex أوامر التحرير لتطبيقها على الملفات عند الطلب.

على سبيل المثال ، لدي ملف من سبعة أسطر (36 حرفًا) يقوم بتشغيل الملف من خلال wc ، وإدراج تعليق على النمط C في الجزء العلوي من الملف الذي يحتوي على بيانات عدد الكلمات تلك. يمكنني تطبيق هذا "الماكرو" على ملف باستخدام أمر مثل: vim +'so mymacro.ex' ./mytarget

(خيار سطر الأوامر + إلى vi و Vim يستخدم عادة لبدء جلسة التحرير برقم سطر معين. حقيقة غير معروفة وهي أنه يمكن للمرء أن يتبع + بأي أمر صالح ex أمر/تعبير ، مثل أمر "source" كما فعلت هنا ؛ على سبيل المثال البسيط لدي البرامج النصية التي تستدعي: vi +'/foo/d|wq!' ~/.ssh/known_hosts لإزالة إدخال من ملف مضيف SSH المعروف بشكل غير تفاعلي أثناء إعادة تصوير مجموعة من الخوادم).

عادة ما يكون من الأسهل بكثير كتابة مثل هذه "وحدات الماكرو" باستخدام Perl ، AWK ، sed (والذي ، في الواقع ، مثل grep a فائدة مستوحاة من ed الأمر).

ربما يكون الأمر @ الأكثر غموضًا vi الأمر. في بعض الأحيان أقوم بتدريس دورات متقدمة في إدارة الأنظمة لمدة تقرب من عقد من الزمان ، قابلت عددًا قليلًا جدًا من الأشخاص الذين استخدموها على الإطلاق. ينفذ @ محتويات السجل كما لو كان أمرًا vi أو ex أمر.
مثال: غالبًا ما أستخدم: :r!locate ... للعثور على بعض الملفات على نظامي وقراءة اسمه في وثيقتي. من هناك ، أحذف أي عدد من الزيارات الخارجية ، ولم أترك سوى المسار الكامل للملف الذي يهمني Tab- من خلال كل مكون من المسار (أو ما هو أسوأ من ذلك ، إذا صادفت أن أكون عالقًا على جهاز بدون دعم إكمال علامة التبويب في نسخته من vi ) أنا فقط استخدم:

  1. 0i:r (لتحويل السطر الحالي إلى أمر صالح : r أمر) ،
  2. "cdd (لحذف السطر في السجل "c") و
  3. @c تنفيذ هذا الأمر.

هذه ليست سوى 10 ضغطات المفاتيح (والتعبير "cdd@c هو في الواقع ماكرو إصبع بالنسبة لي ، لذلك يمكنني كتابته بأسرع ما يمكن من أي كلمة مؤلفة من ستة أحرف مشتركة).


الفكر الرصين

لقد خدشت فقط على سطح vi قوة وليس أي مما وصفته هنا هو جزء من "التحسينات" التي vim يدعى! يجب أن يعمل كل ما وصفته هنا على أي نسخة قديمة من vi من 20 أو 30 عامًا مضت.

هناك أشخاص استخدموا أكثر من vi قوة أكثر من أي وقت مضى.

2862
Jim Dennis

بعض النصائح الإنتاجية:

الحركات الذكية

  • * و # ابحث عن الكلمة تحت المؤشر للأمام/للخلف.
  • w إلى الكلمة التالية
  • W إلى الكلمة التالية مفصولة بمسافة
  • b/e إلى بداية/نهاية Word الحالي. (B/E للمسافة مفصولة فقط)
  • gg/G انتقل إلى بداية/نهاية الملف.
  • % انتقل إلى المطابقة {..} أو (..) ، إلخ.
  • {/} انتقل إلى الفقرة التالية.
  • '. القفز مرة أخرى إلى آخر سطر تحرير.
  • g; القفز مرة أخرى إلى آخر موضع تم تعديله.

أوامر التحرير السريع

  • I insert في البداية.
  • A إلحاق حتى النهاية.
  • o/O فتح سطر جديد بعد/قبل الحالي.
  • الوضع المرئي v/V/Ctrl+V (لتحديد النص!)
  • Shift+R استبدال النص
  • C تغيير الجزء المتبقي من السطر.

الجمع بين الأوامر

تقبل معظم الأوامر مقدارًا واتجاهًا ، على سبيل المثال:

  • cW = التغيير حتى نهاية Word
  • 3cW = تغيير 3 كلمات
  • BcW = لبدء Word بالكامل ، قم بتغيير Word بالكامل
  • ciW = تغيير الكلمة الداخلية.
  • ci" = التغيير الداخلي بين ".."
  • ci( = تغيير النص بين (..)
  • ci< = تغيير النص بين <..> (يحتاج set matchpairs+=<:> في vimrc)
  • 4dd = احذف 4 أسطر
  • 3x = حذف 3 أحرف.
  • 3s = بديل 3 أحرف.

أوامر مبرمج مفيدة

  • r استبدل حرفًا واحدًا (على سبيل المثال rd يستبدل الحرف الحالي بـ d).
  • تغير ~ الحالة.
  • J ينضم إلى سطرين
  • Ctrl + A/Ctrl + X يزيد/ينقص رقم.
  • . كرر الأمر الأخير (ماكرو بسيط)
  • == المسافة البادئة إصلاح الخط
  • كتلة المسافة البادئة > (في الوضع المرئي)
  • < كتلة غير مقصودة (في الوضع المرئي)

تسجيل ماكرو

  • اضغط على q[ key ] لبدء التسجيل.
  • ثم اضغط على q لإيقاف التسجيل.
  • يمكن تشغيل الماكرو باستخدام @[ key ].

باستخدام أوامر وحركات محددة للغاية ، يمكن VIM إعادة تشغيل تلك الإجراءات الدقيقة للخطوط التالية. (على سبيل المثال ، أ من إلحاق إلى نهاية ، b/e لنقل المؤشر إلى بداية أو نهاية Word على التوالي)

مثال على إعدادات بنيت جيدا

# reset to vim-defaults
if &compatible          # only if not set before:
  set nocompatible      # use vim-defaults instead of vi-defaults (easier, more user friendly)
endif

# display settings
set background=dark     # enable for dark terminals
set nowrap              # dont wrap lines
set scrolloff=2         # 2 lines above/below cursor when scrolling
set number              # show line numbers
set showmatch           # show matching bracket (briefly jump)
set showmode            # show mode in status bar (insert/replace/...)
set showcmd             # show typed command in status bar
set ruler               # show cursor position in status bar
set title               # show file in titlebar
set wildmenu            # completion with menu
set wildignore=*.o,*.obj,*.bak,*.exe,*.py[co],*.swp,*~,*.pyc,.svn
set laststatus=2        # use 2 lines for the status bar
set matchtime=2         # show matching bracket for 0.2 seconds
set matchpairs+=<:>     # specially for html

# editor settings
set esckeys             # map missed escape sequences (enables keypad keys)
set ignorecase          # case insensitive searching
set smartcase           # but become case sensitive if you type uppercase characters
set smartindent         # smart auto indenting
set smarttab            # smart tab handling for indenting
set magic               # change the way backslashes are used in search patterns
set bs=indent,eol,start # Allow backspacing over everything in insert mode

set tabstop=4           # number of spaces a tab counts for
set shiftwidth=4        # spaces for autoindents
#set expandtab           # turn a tabs into spaces

set fileformat=unix     # file mode is unix
#set fileformats=unix,dos    # only detect unix file format, displays that ^M with dos files

# system settings
set lazyredraw          # no redraws in macros
set confirm             # get a dialog when :q, :w, or :wq fails
set nobackup            # no backup~ files.
set viminfo='20,\"500   # remember copy registers after quitting in the .viminfo file -- 20 jump links, regs up to 500 lines'
set hidden              # remember undo after quitting
set history=50          # keep 50 lines of command history
set mouse=v             # use mouse in visual mode (not normal,insert,command,help mode


# color settings (if terminal/gui supports it)
if &t_Co > 2 || has("gui_running")
  syntax on          # enable colors
  set hlsearch       # highlight search (very useful!)
  set incsearch      # search incremently (search while typing)
endif

# paste mode toggle (needed when using autoindent/smartindent)
map <F10> :set paste<CR>
map <F11> :set nopaste<CR>
imap <F10> <C-O>:set paste<CR>
imap <F11> <nop>
set pastetoggle=<F11>

# Use of the filetype plugins, auto completion and indentation support
filetype plugin indent on

# file type specific settings
if has("autocmd")
  # For debugging
  #set verbose=9

  # if bash is sh.
  let bash_is_sh=1

  # change to directory of current file automatically
  autocmd BufEnter * lcd %:p:h

  # Put these in an autocmd group, so that we can delete them easily.
  augroup mysettings
    au FileType xslt,xml,css,html,xhtml,javascript,sh,config,c,cpp,docbook set smartindent shiftwidth=2 softtabstop=2 expandtab
    au FileType tex set wrap shiftwidth=2 softtabstop=2 expandtab

    # Confirm to PEP8
    au FileType python set tabstop=4 softtabstop=4 expandtab shiftwidth=4 cinwords=if,Elif,else,for,while,try,except,finally,def,class
  augroup END

  augroup Perl
    # reset (disable previous 'augroup Perl' settings)
    au!  

    au BufReadPre,BufNewFile
    \ *.pl,*.pm
    \ set formatoptions=croq smartindent shiftwidth=2 softtabstop=2 cindent cinkeys='0{,0},!^F,o,O,e' " tags=./tags,tags,~/devel/tags,~/devel/C
    # formatoption:
    #   t - wrap text using textwidth
    #   c - wrap comments using textwidth (and auto insert comment leader)
    #   r - auto insert comment leader when pressing <return> in insert mode
    #   o - auto insert comment leader when pressing 'o' or 'O'.
    #   q - allow formatting of comments with "gq"
    #   a - auto formatting for paragraphs
    #   n - auto wrap numbered lists
    #   
  augroup END


  # Always jump to the last known cursor position. 
  # Don't do it when the position is invalid or when inside
  # an event handler (happens when dropping a file on gvim). 
  autocmd BufReadPost * 
    \ if line("'\"") > 0 && line("'\"") <= line("$") | 
    \   exe "normal g`\"" | 
    \ endif 

endif # has("autocmd")

يمكن تخزين الإعدادات في ~/.vimrc ، أو على مستوى النظام في /etc/vimrc.local ثم من خلال القراءة من ملف /etc/vimrc باستخدام:

source /etc/vimrc.local

(سيتعين عليك استبدال حرف التعليق # بـ " لجعله يعمل في VIM ، وأردت تقديم تسليط الضوء على بناء الجملة المناسب هنا).

الأوامر التي أدرجتها هنا أساسية جدًا ، والأوامر الرئيسية التي استخدمها حتى الآن. إنها تجعلني بالفعل أكثر إنتاجية ، دون الحاجة إلى معرفة كل الأشياء الفاخرة.

207
vdboor

ال Control+R الآلية مفيدة للغاية :-) في وضع الإدراج أو وضع الأوامر (أي على سطر : عند كتابة الأوامر) ، تابع باستخدام سجل مُرقّم أو مسمى:

  • a - z السجلات المسماة
  • " السجل الذي لم يكشف عن اسمه ، والذي يحتوي على نص آخر حذف أو حذف
  • % اسم الملف الحالي
  • # اسم الملف البديل
  • * محتويات الحافظة (X11: الاختيار الأساسي)
  • + محتويات الحافظة
  • / نمط البحث الأخير
  • : سطر الأوامر الأخير
  • . النص الأخير المدرج
  • - آخر صغير (أقل من خط) حذف
  • =5*5 أدخل 25 في النص (آلة حاسبة صغيرة)

راجع :help i_CTRL-R و :help c_CTRL-R للحصول على مزيد من التفاصيل ، وانتقل إلى مكان قريب للحصول على مزيد من صلاحيات CTRL-R.

98
kev

فيم الإضافات

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

(Rails.vim

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

(Gist.vim

يسمح لك هذا البرنامج المساعد بتحديد منطقة نص في الوضع المرئي واكتب أمر سريع لنشرها على Gist.github.com . يسمح ذلك بوصول سهل إلى Pastebin ، وهو سهل الاستخدام بشكل لا يصدق إذا كنت تتعاون مع شخص ما فوق IRC أو IM.

space.vim

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

surround.vim

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

supertab.vim

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

syntastic.vim

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

fugitive.vim

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

nerdtree.vim

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

FuzzyFinderTextmate.vim

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

استنتاج

هناك الكثير من الأدوات المدهشة المتاحة لل vim. أنا متأكد من أنني فقط خدشت السطح هنا ، ويستحق البحث عن الأدوات المناسبة لنطاقك. مزيج من مجموعة أدوات vi التقليدية القوية ، وتحسينات vim عليها ، والمكونات الإضافية التي تمدد vim إلى أبعد من ذلك ، إنها واحدة من أقوى الطرق لتحرير النص الذي تم تصوره على الإطلاق. تتمتع Vim بسهولة قوية مثل emacs و Eclipse والاستوديو المرئي وزميل النص.

شكر

بفضل duwanis على vim configs الذي تعلمت منه الكثير واستعارت معظم الإضافات المدرجة هنا.

91
Benson

. كرر الأمر الأخير لتغيير النص

أنا وفر الكثير من الوقت مع هذا واحد.

تم ذكر الوضع المرئي سابقًا ، لكن الوضع المرئي للحظر قد وفر لي الكثير من الوقت عند تحرير أعمدة ذات حجم ثابت في ملف نصي. (الوصول إليها باستخدام Ctrl-V).

53
Cooper6581

gi

انتقل إلى آخر موقع تم تعديله (مفيد جدًا إذا أجريت بعض عمليات البحث وأردت الرجوع إلى التعديل)

^ P و ^ N

أكمل النص السابق (^ P) أو النص التالي (^ N).

^ O و ^ I

انتقل إلى الموقع السابق (^O - "O" للموقع القديم) أو إلى الموقع التالي (^I - "I" بالقرب من "O"). عند إجراء عمليات بحث أو تحرير ملفات وما إلى ذلك ، يمكنك التنقل خلال هذه "القفزات" للأمام والخلف.

48
dimba

لقد اكتشفت هذا الموقع مؤخرًا: http://vimcasts.org/

انها جديدة جدا وجيدة حقا حقا. تحول الرجل الذي يقوم بتشغيل الموقع من زميل النص إلى vim ويستضيف يلقي جيدة جدا وموجزة على مواضيع محددة vim. تحقق من ذلك!

46
Ronny Brendel

CTRL + A يزيد الرقم الذي تقف عليه.

42
hcs42

كل ما في الوضع العادي:

f <char> للانتقال إلى المثيل التالي لحرف معين في السطر الحالي ، و ؛ لتكرار.

F <char> للانتقال إلى المثيل السابق لحرف معين في السطر الحالي و ؛ لتكرار.

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

* على كلمة للبحث عن المثيل التالي.

# على كلمة للبحث عن المثيل السابق.

38
Eric Smith

جلسة

ا. حفظ جلسة

: mks اسم الجلسة

ب. قوة حفظ الجلسة

: أعضاء الكنيست! اسم الجلسة

ج. جلسة التحميل

gvim أو vim -S اسم الجلسة


إضافة وطرح

ا. إضافة وطرح

CTRL-A ؛ أضف [عدد] إلى الرقم أو الحرف الأبجدي في أو بعد المؤشر. {ليس في السادس

CTRL-X ؛ اطرح [العد] من الرقم أو الحرف الأبجدي عند أو بعد المؤشر. {ليس في السادس}

ب. نافذة مفتاح unmapping

في النافذة ، تم تعيين Ctrl-A بالفعل لتحديد الملف بالكامل ، تحتاج إلى إلغاء تعيينه في ملف rc. حدد جزء تعيين mswin.vim CTRL-A كتعليق أو أضف ملف اتفاقية روتردام الخاص بك مع إلغاء التثبيت

ج. مع ماكرو

يعد الأمر CTRL-A مفيدًا جدًا في الماكرو. مثال: استخدم الخطوات التالية لإنشاء قائمة ذات تعداد رقمي.

  1. قم بإنشاء إدخال القائمة الأولى ، تأكد من أنه يبدأ برقم.
  2. qa - ابدأ التسجيل في المخزن المؤقت "a"
  3. Y - yank الإدخال
  4. ع - ضع نسخة من الإدخال أسفل الأول
  5. CTRL-A - زيادة الرقم
  6. ف وقف التسجيل
  7. @ أ - كرر yank ، وطرح وزيادة مرات
34
agfe2

في الأسبوع الماضي في العمل ، ورث مشروعنا الكثير من كود بايثون من مشروع آخر. لسوء الحظ ، لم تتوافق الشفرة مع هيكلنا الحالي - فقد تم كل ذلك مع المتغيرات والوظائف العالمية ، والتي لن تعمل في بيئة متعددة الخيوط.

كان لدينا ما يقرب من 80 ملفًا تحتاج إلى إعادة صياغتها لتكون موجهة للكائنات - تم نقل جميع الوظائف إلى فئات ، وتم تغيير المعلمات ، واستيراد عبارات الاستيراد ، وما إلى ذلك. كان لدينا قائمة تضم حوالي 20 نوعًا من الإصلاحات التي يتعين القيام بها لكل ملف. أود أن أقدر أن القيام بذلك باليد يمكن أن يفعله شخص واحد ربما 2-4 في اليوم.

هكذا فعلت أول واحد باليد ومن ثم كتبت سيناريو vim لأتمتة التغييرات. كان معظمها قائمة بأوامر vim مثل.

" delete an un-needed function "
g/someFunction(/ d

" add wibble parameter to function foo "
%s/foo(/foo( wibble,/

" convert all function calls bar(thing) into method calls thing.bar() "
g/bar(/ normal nmaf(ldi(`aPa.

آخر واحد يستحق بعض الشرح:

g/bar(/  executes the following command on every line that contains "bar("
normal   execute the following text as if it was typed in in normal mode
n        goes to the next match of "bar(" (since the :g command leaves the cursor position at the start of the line)
ma       saves the cursor position in mark a
f(       moves forward to the next opening bracket
l        moves right one character, so the cursor is now inside the brackets
di(      delete all the text inside the brackets
`a       go back to the position saved as mark a (i.e. the first character of "bar")
P        paste the deleted text before the current cursor position
a.       go into insert mode and add a "." 

لبضعة تحويلات أكثر تعقيدًا مثل توليد جميع عبارات الاستيراد ، قمت بدمج بعض الثعبان في البرنامج النصي.

بعد بضع ساعات من العمل عليه ، كان لدي نص سينفذ ما لا يقل عن 95٪ من التحويل. أنا فقط فتح ملف في vim ثم تشغيل :source fixit.vim ويتم تحويل الملف في غمضة عين.

لا يزال لدينا عمل لتغيير نسبة الـ 5٪ المتبقية التي لم تكن تستحق التشغيل الآلي واختبار النتائج ، لكن من خلال قضاء يوم في كتابة هذا البرنامج النصي ، أقدر أننا قد وفرنا أسابيع من العمل.

بالطبع كان من الممكن أتمتة هذا باستخدام لغة نصية مثل Python أو Ruby ، ​​لكن الأمر استغرق وقتًا أطول للكتابة وسيكون أقل مرونة - المثال الأخير كان سيصعب لأن regex لوحده لن يكون قادرًا على التعامل الأقواس المتداخلة ، على سبيل المثال لتحويل bar(foo(xxx)) إلى foo(xxx).bar(). كان فيم مثاليًا للمهمة.

32
Dave Kirby

استخدم مستكشف الملفات المدمج! الأمر هو :Explore ويسمح لك بالتصفح من خلال شفرة المصدر الخاصة بك بسرعة كبيرة جدًا. لدي هذه التعيين في .vimrc:

map <silent> <F8>   :Explore<CR>
map <silent> <S-F8> :sp +Explore<CR>

يسمح لك المستكشف بإجراء تعديلات على الملف أيضًا. سأنشر بعض مفاتيحي المفضلة ، سيؤدي الضغط على <F1> إلى منحك القائمة الكاملة:

  • - : الأكثر فائدة: التغيير إلى الدليل العلوي (cd ..)
  • mf : وضع علامة على الملف
  • D: احذف الملفات المميزة أو الملف قيد التشغيل ، إذا لم يكن هناك شيء محدد.
  • R: إعادة تسمية الملف المؤشر قيد التشغيل.
  • d : إنشاء دليل جديد في الدليل الحالي
  • ٪ : إنشاء ملف جديد في الدليل الحالي
28
soulmerge

أنا عضو في رابطة التشفير الأمريكية. تضم المجلة التي تصدر كل شهرين أكثر من 100 كتاب تشفير من مختلف الأنواع. حوالي 15 من هذه "cryptarithms" - أنواع مختلفة من المشاكل الحسابية بأحرف بديلة للأرقام. اثنان أو ثلاثة من هؤلاء هم sudokus ، باستثناء الحروف بدلاً من الأرقام. عند اكتمال الشبكة ، ستوضح الأحرف التسعة المميزة كلمة أو كلمات ، على بعض الخطوط ، قطري ، حلزوني ، إلخ ، في مكان ما في الشبكة.

بدلاً من العمل بالقلم الرصاص أو كتابة المشكلات يدويًا ، أقوم بتنزيل المشكلات من منطقة الأعضاء في موقع الويب الخاص بهم.

عند العمل مع sudokus ، أستخدم vi ، ببساطة لأنني أستخدم المرافق التي تحتوي على عدد قليل من المحررين الآخرين. في الغالب في تحويل الشبكة ذات الحروف إلى شبكة ذات تعداد رقمي ، لأنني أجد أنه من الأسهل حلها ، ثم الشبكة المرقمة المكتملة مرة أخرى إلى الشبكة ذات الحروف للعثور على الحل Word أو الكلمات.

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

النتيجة ستبدو هكذا:

T-O-----C
-E-----S-
--AT--N-L
---NASO--
---E-T---
--SPCL---
E-T--OS--
-A-----P-
S-----C-T

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

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

:!}tr -cd A-Z | sed 's/\(.\)/\1\n/g' | sort -u | tr -d '\n'

: مرة أخرى يضعني في وضع الأوامر. ! يشير إلى أنه يجب أن يتم نقل محتوى yank التالي عبر سطر أوامر. } يفرز الفقرة التالية ، ثم يستخدم سطر الأوامر الأمر tr لتجريد كل شيء باستثناء الأحرف الكبيرة ، والأمر sed لطباعة كل حرف على سطر واحد ، والأمر sort لفرز هذه السطور ، وإزالة التكرارات ، ثم tr يطرد الأسطر الجديدة ، تاركًا الأحرف التسعة المميزة في سطر واحد ، ليحل محل الأسطر التسعة التي شكلت الفقرة أصلاً. في هذه الحالة ، تكون الأحرف هي: ACELNOPST.

الخطوة التالية هي عمل نسخة أخرى من الشبكة. ثم لاستخدام الحروف التي حددتها للتو لاستبدال كل من هذه الأحرف برقم من 1 إلى 9. هذا بسيط: :!}tr ACELNOPST 0-9. النتيجه هي:

8-5-----1
-2-----7-
--08--4-3
---4075--
---2-8---
--7613---
2-8--57--
-0-----6-
7-----1-8

يمكن بعد ذلك حلها بالطريقة المعتادة ، أو الدخول في أي محل حل سودوكو قد تفضله. يمكن بعد ذلك تحويل الحل المكتمل إلى أحرف مع :!}tr 1-9 ACELNOPST.

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

25
Jeff Dege

التلاعب النص بالجملة!

إما من خلال وحدات الماكرو:

  • ابدأ بالتسجيل: qq
  • افعل اشياء
  • إيقاف التسجيل: q
  • كرر: @q (المرة الأولى) ، @@ بعد ذلك.
  • كرر 20 مرة: [email protected]@

أو من خلال التعبيرات العادية:

  • استبدال الأشياء: :%s/[fo]+/bar/g

(لكن حذر: إذا قمت بهذا الأخير ، فستواجه مشكلتين :).)

23
jqno

لقد اكتشفت مؤخرا q:. يفتح "نافذة الأوامر" ويعرض أحدث أوامر (وضع الأوامر) السابقين. يمكنك التحرك كالمعتاد داخل النافذة ، والضغط على <CR> ينفذ الأمر. يمكنك تعديل ، وما إلى ذلك أيضا. لا تقدر بثمن عند العبث ببعض الأوامر المعقدة أو regex ولا ترغب في إعادة كتابة الأمر بالكامل ، أو إذا كان الشيء المعقد الذي تريد القيام به هو 3 أوامر. يشبه الأمر تقريبًا bash's set -o vi ، ولكن بالنسبة لـ vim نفسه (هيه!).

انظر :help q: للحصول على وحدات بت أكثر إثارة للاهتمام للعودة ذهابًا وإيابًا.

23
David Pope

لقد اكتشفت في النهاية إخلاء فيم في اليوم الآخر ، وبينما سأعترف أنني أشعر بالضباب قليلاً على ما الذي يحدث ، فقد حققت نتائج جيدة بشكل مدهش فقط Ctrl + xCtrl + u أو Ctrl + n/Ctrl +p في وضع الإدراج. إنها ليست تمامًا التحسس الذكي ، لكنني ما زلت أتعلمها.

حاول! :help ins-completion

22
Svend

هذه ليست اختصارات ، لكنها مرتبطة:

  1. اجعل capslock علامة ESC إضافية (أو Ctrl)
  2. تعيين زعيم ل "،" (فاصلة) ، مع هذا الأمر: دع mapleader = "،"

أنها تعزز الإنتاجية بلدي.

20
tfmoraes

من المفيد "اختصار" السادس الذي أستخدمه بشكل متكرر هو "xp". سيؤدي هذا إلى تبديل الحرف أسفل المؤشر بالحرف التالي.

19
Costyn

الوضع البصري

كما قال العديد من الأشخاص الآخرين ، فإن الوضع المرئي هو الحل لمشكلة النسخ/القص واللصق. يمنحك Vim 'v' و 'V' و C-v. الحالة السفلية 'v' في vim هي في الأساس نفس مفتاح التحول في المفكرة. الشيء الجميل هو أنك لست مضطرًا للاحتفاظ بها. يمكنك استخدام أي أسلوب حركة للتنقل بكفاءة إلى نقطة البداية (أو النهاية) التي تحددها. ثم اضغط على "v" ، واستخدم تقنيات الحركة الفعالة مرة أخرى للتنقل إلى الطرف الآخر من اختيارك. ثم يسمح لك 'd' أو 'y' بقص هذا الاختيار أو نسخه.

يتميز الوضع المرئي لـ vim على وصف Jim Dennis الخاص بالقص/النسخ/اللصق في السادس ، وهو أنه لا يتعين عليك الحصول على الموقع الصحيح تمامًا. في بعض الأحيان يكون استخدام الحركة السريعة أكثر فعالية في المناطق المجاورة العامة للمكان الذي تريد الذهاب إليه ثم تحسين ذلك باستخدام حركات أخرى بدلاً من التفكير في أمر حركة واحدة أكثر تعقيدًا يتيح لك الوصول إلى المكان الذي تريد الذهاب إليه بالضبط.

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

سأعيد التأكيد أيضًا على أن أوضاع الخط المرئي والكتلة المرئية تمنحك أشكالًا مختلفة حول هذا الموضوع نفسه يمكن أن تكون قوية جدًا ... وخاصة وضع الكتلة المرئية.

على الاستخدام الفعال للوحة المفاتيح

لا أوافق أيضًا على تأكيدك على أن تناوب اليدين هو أسرع طريقة لاستخدام لوحة المفاتيح. لديها عنصر الحقيقة في ذلك. التحدث بشكل عام ، الاستخدام المتكرر لنفس الشيء بطيء. هذا المثال الأكثر أهمية لهذا المبدأ هو أن ضربات المفاتيح المتتالية المكتوبة بنفس الإصبع بطيئة للغاية. ربما ينبع تأكيدك من الميل الطبيعي لاستخدام s/finger/hand/transformation في هذا النمط. هذا صحيح إلى حد ما ، لكن في الطرف العلوي للغاية من طيف الكفاءة ، فإنه غير صحيح.

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

المشكلة الأكثر صعوبة هي الأمثل لهذا. من السهل جداً تحسين المسافة المطلقة على لوحة المفاتيح. فيم يفعل ذلك. من الصعوبة بمكان التحسين على مستوى "التشغيل" ، لكن vi (m) مع التعديل الشرطي يمنحك فرصة أفضل لتكون قادرًا على القيام بذلك أكثر من أي نهج غير مشروط (مهم ، emacs) من أي وقت مضى.

على إيماكس

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

يمنحك Vim كفاءة لا مثيل لها لتحرير النصوص تمنحك Emacs قدرة لا مثيل لها على تخصيص المحرر وبرمجته

سوف المتعصبين vim العمياء يدعي أن vim لديه لغة البرمجة. لكنها لغة غامضة ومخصصة تم تصميمها لخدمة المحرر. إيماكس لديه LISP! قال بما فيه الكفاية. إذا كنت لا تقدر أهمية هاتين الجملتين الأخيرتين أو لديك الرغبة في تعلم ما يكفي عن البرمجة الوظيفية و LISP لتطوير هذا التقدير ، فعليك استخدام vim.

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

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

لذلك إذا كنت تريد كفاءة التحرير الخام ، استخدم vim. إذا كنت تريد البيئة النهائية للبرمجة والبرمجة ، استخدم المحرر emacs. إذا كنت تريد بعضهما مع التركيز على قابلية البرمجة ، فاستخدم emacs مع وضع viper (أو برمجة وضعك الخاص). إذا كنت تريد أفضل ما في العالمين ، فأنت الآن محظوظ.

18
user307058

<Ctrl> + W، V لتقسيم الشاشة رأسياً
<Ctrl> + W ، W للتبديل بين النوافذ

! python٪ [args] لتشغيل البرنامج النصي الذي أعدله في هذه النافذة

ZF في الوضع البصري لطي خطوط تعسفية

18
Peter Ellis

اقضِ 30 دقيقة في عمل البرنامج التعليمي vim (قم بتشغيل vimtutor بدلاً من vim في المحطة الطرفية). سوف تتعلم الحركات الأساسية ، وبعض ضربات المفاتيح ، وهذا سيجعلك على الأقل منتجة مع vim كما هو الحال مع محرر النصوص الذي استخدمته من قبل. بعد ذلك ، حسناً ، اقرأ إجابة Jim Dennis 'مرة أخرى :)

17
konryd

لقد فوجئت أن لا أحد يذكر حركة t. أستخدمها بشكل متكرر مع قوائم المعلمات في شكل dt, أو yt,

16
David Corbin

من الغريب ذكر ctags. قم بتنزيل "ctags exuberant" ووضعها في مقدمة الإصدار المجنون المثبت مسبقًا لديك بالفعل في مسار البحث. سي دي إلى جذر كل ما كنت تعمل على ؛ على سبيل المثال توزيع نواة أندرويد. اكتب "ctags -R." لإنشاء فهرس للملفات المصدر في أي مكان أسفل هذا دير في ملف يسمى "العلامات". هذا يحتوي على جميع العلامات ، وترشيح اللغة ولا في دير ، في ملف واحد ، لذلك العمل عبر اللغات سهل.

ثم افتح vim في هذا المجلد وقراءة: مساعدة ctags لبعض الأوامر. وهناك عدد قليل من استخدامها في كثير من الأحيان:

  • ضع المؤشر على استدعاء أسلوب واكتب CTRL-] للانتقال إلى تعريف الأسلوب.

  • اكتب: تا اسم للذهاب إلى تعريف الاسم.

16
Bradjcox

استخدم \c في أي مكان في البحث لتجاهل الحالة (تجاوز إعدادات الجاهلية أو إعدادات الحقيبة الذكية). مثلا /\cfoo أو /foo\c ستطابق foo ، Foo ، fOO ، FOO ، إلخ.

استخدم \C في أي مكان في البحث لفرض مطابقة الحالة. مثلا /\Cfoo أو /foo\C سيتطابق فقط مع foo.

16
kev

ما هي الطريقة التي تستخدم بها Vim والتي تجعلك أكثر إنتاجية من المحرر المعاصر؟

القدرة على تنفيذ عمليات التحرير المعقدة المتكررة باستخدام عدد قليل جدًا من ضغطات المفاتيح (غالبًا باستخدام وحدات الماكرو ). ألقِ نظرة على VimGolf لمشاهدة قوة Vim!

بعد أكثر من عشر سنوات من الاستخدام اليومي تقريبًا ، يصعب تخيل استخدام أي محرر آخر.

16
Johnsyweb

لقد سألت عن الاختصارات الإنتاجية ، لكنني أعتقد أن سؤالك الحقيقي هو: هل القيمة تستحق العناء؟ الجواب على هذا السؤال stackoverflow -> "نعم"

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

كل هذا الاستثمار الذي وضعته في vim سيسدد ألف مرة. ستكون داخل محرر نصوص لعدة ساعات قبل أن تموت. فيم سيكون رفيقك.

14
autodidakto

المسافة البادئة التلقائي:

gg (انتقل إلى بداية المستند)
= (وقت المسافة البادئة!)
shift-g (انتقل إلى نهاية المستند)

ستحتاج إلى "وضع مسافة filetype plugin" في ملف .vimrc ، وربما إعدادات "shiftwidth" و "expandtab" المناسبة.

14
David Claridge

العديد من المخازن المؤقتة ، وبالأخص القفز السريع بينها لمقارنة ملفين مع :bp و :bn (تم إعادة تعيينها بشكل صحيح إلى واحد Shift + p أو Shift + n)

وضع vimdiff (انشقاقات في عازلة اثنين من المخازن المؤقتة ، مع الألوان لإظهار الاختلافات)

نسخة المنطقة مع Ctrl + v

وأخيرًا ، أكمل علامة التبويب معرفات (ابحث عن "mosh_tab_or_complete"). هذا تغيير في الحياة.

13
Stefano Borini

متفق مع أعلى ملصق -: ص! الأمر هو جدا مفيد.

في أغلب الأحيان أستخدمها "لصق" الأشياء:

:r!cat
**Ctrl-V to paste from the OS clipboard**
^D

وبهذه الطريقة ، لست مضطرًا للتلاعب بـ :set paste.

12
David Wolever

cit - إفراغ محتويات العلامة مع الانتقال في وضع الإدراج

yit - نسخ محتويات العلامة

10
Sanek

المعيار الثالث لتسريع التحرير هو عدد ضغطات المفاتيح المطلوبة. أود أن أقول أن هذا أكثر أهمية من الآخرين. 2. في المقام الأول ، تتطلب جميع العمليات تقريبًا ضغطات مفاتيح أقل من أي محرر آخر أعرفه.

لقد ذكرت أنك تواجه مشكلة في القص واللصق ، ولكن يبدو أنك بحاجة إلى مزيد من الخبرة مع أوامر الحركة العامة في vim. yank 3 كلمات: y3w yank من المؤشر إلى النصف التالي: yf؛ انطلق إلى الحدوث التالي لبحثك الأخير: yn كل هذه أسرع بكثير من محاولة التنقل بالماوس أثناء الضغط باستمرار على مفتاح التعديل. أيضًا ، كما هو موضح في بعض الأمثلة في استجابة CMS ، يتم تحسين أوامر حركة vim بشكل كبير للتنقل الفعال في شفرة مصدر C و C++.

بالنسبة للسؤال "كيف يمكنني استخدام vim الذي يجعلني أكثر إنتاجية؟" ، آمل أن يكون الجواب هو: "بكفاءة".

10
William Pursell

خدعتي vi/Vim الأكثر إنتاجية هي:

:%s

أحب أن أكون قادرًا على استخدام التعبيرات العادية أثناء التنقل لاستبدال كل ما أريد داخل الملف. يجب أن يدعم كل محرر نصوص التعبيرات المعتادة IMHO.

10
Eric Ryan Harrison

يمكنك استخدام\= في سلسلة بديلة وهو شيء أقوم به كثيرًا.

إذا كانت لديك قائمة غير مرتبة بشكل أساسي في vim ، فقل باستخدام # كعلامة ، يمكنك تحويلها إلى قائمة مرتبة.

# CSSLINT
# PHPCS
# Charlie
# Delta

إذا كان يبدأ على السطر الأول ، يمكنك القيام به

:1,6s/#/\=line(".")/g

لتحويلها الى

1 CSSLINT
2 PHPCS
3 Charlie
4 Delta

إذا لم تبدأ في السطر الأول ، فما عليك إلا أن تفعل الرياضيات:

:16,20s/#/\=line(".") - 15/g

مزيد من المعلومات على: help sub-replace-expression

10
kguest

إليك موقع موقع آخر وجدته مفيدًا في تعلم Vim. انها ممتعة جدا! :)

VIM Adventures هي لعبة على الإنترنت تعتمد على اختصارات لوحة المفاتيح لـ VIM (الأوامر والحركات والمشغلين). إنها لعبة "Zelda تلتقي بتحرير النص". إنها لعبة ألغاز لممارسة وحفظ أوامر VIM (يتم أيضًا تغطية السادس القديم الجيد ، بالطبع). إنها طريقة سهلة للتعلم VIM بدون منحنى تعليمي حاد.

9
Alex Lockwood

بعد تعيين أدناه إلى مجموعة مفاتيح بسيطة ، فإن ما يلي مفيد للغاية بالنسبة لي:

اقفز إلى ملف أثناء السير في طريقه

gf

الحصول على اسم المسار الكامل للملف الموجود

:r!echo %:p

الحصول على دليل للملف الموجود

:r!echo %:p:h

رمز التشغيل:

:!Ruby %:p

اختصارات روبي:

ab if_do if end<esc>bi<cr><esc>xhxO
ab if_else if end<esc>bi<cr><esc>xhxO else<esc>bhxA<cr> <esc>k$O
ab meth def method<cr>end<esc>k<esc>:s/method/
ab klas class KlassName<cr>end<esc>k<esc>:s/KlassName/
ab mod module ModName<cr>end<esc>k<esc>:s/ModName/

تشغيل البرنامج الحالي:

   map ,rby :w!<cr>:!Ruby %:p<cr>

تحقق من بناء جملة البرنامج الحالي:

   map ,c :w!<cr>:!Ruby -c %:p<cr>

قم بتشغيل جميع المواصفات لبرنامج المواصفات الحالي:

   map ,s :w!<cr>:!rspec %:p<cr>

كسرها مفتوحة irb:

   map ,i :w!<cr>:!irb<cr>

اختصارات rspec:

   ab shared_examples shared_examples_for "behavior here" do<cr>end
   ab shared_behavior describe "description here" do<cr>  before :each do<cr>end<cr>it_should_behave_like "behavior here"<cr><bs>end<cr>
   ab describe_do describe "description here" do<cr>end
   ab context_do describe "description here" do<cr>end
   ab it_do it "description here" do<cr>end
   ab before_each before :each do<cr>end<cr>

اختصارات القضبان:

مصادقة المستخدم:

     ab userc <esc>:r $VIMRUNTIME/Templates/Ruby/c-users.rb<cr>
     ab userv <esc>:r $VIMRUNTIME/Templates/Ruby/v-users.erb<cr>
     ab userm <esc>:r $VIMRUNTIME/Templates/Ruby/m-users.rb<cr>

افتح عنوان url المحدد بصريًا في فايرفوكس:

"function
   function open_url_in_firefox:(copy_text)
     let g:open_url_in_firefox="silent !open -a \"firefox\" \"".a:copy_text."\""
     exe g:open_url_in_firefox
   endfunction

"abbreviations
   map ,d :call open_url_in_firefox:(expand("%:p"))<cr>
   map go y:call open_url_in_firefox:(@0)<cr> 

rspec: تشغيل المواصفات التي تحتوي على السطر الحالي:

"function
   function run_single_rspec_test:(the_test)
     let g:rake_spec="!rspec ".a:the_test.":".line(".")
     exe g:rake_spec
   endfunction

"abbreviations
   map ,s :call run_single_rspec_test:(expand("%:p"))<cr>

rspec-Rails: تشغيل المواصفات التي تحتوي على السطر الحالي:

"function
   function run_single_Rails_rspec_test:(the_test)
     let g:rake_spec="!rake spec SPEC=\"".a:the_test.":".line(".")."\""
     exe g:rake_spec
   endfunction

"abbreviations
   map ,r :call run_single_Rails_rspec_test:(expand("%:p"))<cr>

rspec-Rails: تشغيل المواصفات التي تحتوي على السطر الحالي مع تصحيح الأخطاء:

"function
   function run_spec_containing_current_line_with_debugging:(the_test)
     let g:rake_spec="!rake spec SPEC=\"".a:the_test.":".line(".")." -d\""
     exe g:rake_spec
   endfunction

"abbreviations
   map ,p :call run_spec_containing_current_line_with_debugging:(expand("%:p")) <cr>

أتش تي أم أل

"abbreviations

  "ab htm <html><cr><tab><head><cr></head><cr><body><cr></body><cr><bs><bs></html>
   ab template_html <script type = 'text/template' id = 'templateIdHere'></script>
   ab script_i <script src=''></script>
   ab script_m <script><cr></script>
   ab Tpage <esc>:r ~/.vim/templates/pageContainer.html<cr>
   ab Ttable <esc>:r ~/.vim/templates/listTable.html<cr>

"function to render common html template

   function html:() 
     call feedkeys( "i", 't' )
     call feedkeys("<html>\<cr>  <head>\<cr></head>\<cr><body>\<cr> ", 't')
     call feedkeys( "\<esc>", 't' )
     call feedkeys( "i", 't' )
     call include_js:()
     call feedkeys("\<bs>\<bs></body>\<cr> \<esc>hxhxi</html>", 't')
   endfunction

جافا سكريبت

"jasmine.js
  "abbreviations
   ab describe_js describe('description here', function(){<cr>});
   ab context_js context('context here', function(){<cr>});
   ab it_js it('expectation here', function(){<cr>});
   ab expect_js expect().toEqual();
   ab before_js beforeEach(function(){<cr>});
   ab after_js afterEach(function(){<cr>});

"function abbreviations

   ab fun1 function(){}<esc>i<cr><esc>ko
   ab fun2 x=function(){};<esc>hi<cr>
   ab fun3 var x=function(){<cr>};

"method for rendering inclusion of common js files

   function include_js:()
     let includes_0  = "  <link   type = 'text\/css' rel = 'stylesheet' href = '\/Users\/johnjimenez\/common\/stylesheets\/jasmine-1.1.0\/jasmine.css'\/>"
     let includes_1  = "  <link   type = 'text\/css' rel = 'stylesheet' href = '\/Users\/johnjimenez\/common\/stylesheets\/screen.css'\/>"
     let includes_2  = "<script type = 'text\/javascript' src = '\/Users\/johnjimenez\/common\/javascripts\/jquery-1.7.2\/jquery-1.7.2.js'><\/script>"
     let includes_3  = "<script type = 'text\/javascript' src = '\/Users\/johnjimenez\/common\/javascripts\/underscore\/underscore.js'><\/script>"
     let includes_4  = "<script type = 'text\/javascript' src = '\/Users\/johnjimenez\/common\/javascripts\/backbone-0.9.2\/backbone.js'><\/script>"
     let includes_5  = "<script type = 'text\/javascript' src = '\/Users\/johnjimenez\/common\/javascripts\/jasmine-1.1.0\/jasmine.js'><\/script>"
     let includes_6  = "<script type = 'text\/javascript' src = '\/Users\/johnjimenez\/common\/javascripts\/jasmine-1.1.0\/jasmine-html.js'><\/script>"
     let includes_7  = "<script>"
     let includes_8  = "  describe('default page', function(){ "
     let includes_9  = "it('should have an html tag', function(){ "
     let includes_10 = "  expect( $( 'head' ).html() ).not.toMatch(\/^[\\s\\t\\n]*$\/);"
     let includes_11  = "});"
     let includes_12 = "});"
     let includes_13 = "$(function(){"
     let includes_14 = "jasmine.getEnv().addReporter( new jasmine.TrivialReporter() );"
     let includes_15 = "jasmine.getEnv().execute();"
     let includes_16 = "});"
     let includes_17 = "\<bs>\<bs><\/script>"

     let j = 0

     while j < 18
       let entry = 'includes_' . j
       call feedkeys( {entry}, 't' )
       call feedkeys( "\<cr>", 't' )
       let j = j + 1
     endwhile

   endfunction

"jquery

  "abbreviations

     ab docr $(document).ready(function(){});
     ab jqfun $(<cr>function(){<cr>}<cr>);
9
kikuchiyo
Ctrl-w Ctrl-f ............ open file under cursor in new window
Ctrl-6 ................... alternate file
'0 ....................... open last file
:x ....................... close if save
7
SergioAraujo

إدراج نص في بعض الشيء في الكود:

ctrl + v, (selecting text on multiple lines), I, (type something I want), ESC

تسجيل ماكرو لتحرير النص وتشغيله مرات N:

q, a (or some other letter), (do the things I want to record), q, ESC,
(type N, as in the number of times I want to run the macro), @, a
7
Vesa Nieminen

تجاهل السؤال للحظة (إجابتي أدناه) ، بعض الأشياء التي قد تساعد في مشاكلك مع vim:

:map <C-F> /\V

سيؤدي هذا إلى جعل Ctrl-F تبدأ عملية بحث حيث تكون الأحرف الأولى من عملية البحث \V ، والتي تعمل على إيقاف تشغيل كل "السحر" ، لذلك ليس عليك الهروب من أي شيء (مثل PsPad).

" CTRL-X and SHIFT-Del are Cut
vnoremap <C-X> "+x
vnoremap <S-Del> "+x

" CTRL-C and CTRL-Insert are Copy
vnoremap <C-C> "+y
vnoremap <C-Insert> "+y

" CTRL-V and SHIFT-Insert are Paste
map <C-V>       "+gP
map <S-Insert>      "+gP

cmap <C-V>      <C-R>+
cmap <S-Insert>     <C-R>+

(مأخوذة مباشرة من mswin.vim من توزيع Vim). سيوفر لك هذا Ctrl-C و Ctrl-V وما إلى ذلك للنسخ واللصق.

شخصيا ، أجد النسخ واللصق أفضل بكثير مع Vim القياسية. في Vim I يمكن أن يكون المؤشر على سطر ، اكتب yy لنسخه ، 10p للصق 10 نسخ منه. باستخدام محاذاة البرنامج المساعد ، يمكنني بعد ذلك استخدام Ctrl-V (بافتراض عدم استخدام تعيينات النوافذ أعلاه) لحظر مجموعة من الأرقام التي تم إنشاؤها ؛ :II ، ثم يزيد تلقائيًا عمود الأعداد هذا. وبالمثل ، مع YankRing ، يمكنني نسخ 10 خطوط (أو أكثر) واحدة تلو الأخرى ثم الصقها مرة أخرى تلو الأخرى.

بالنسبة للطريقة التي تجعلني بها Vim أكثر إنتاجية ، أود أن أقول إن ملف العلامات هو الشيء الوحيد الذي لم أستطع القيام به دون ذلك. عندما يكون المؤشر فوق علامة ، يمكنني الضغط على Ctrl-] للانتقال إلى الوظيفة (و Ctrl-T للعودة ، مثل العديد من المستويات التي أحبها) أو ,p لفتح الوظيفة أو تعريف الماكرو (أو أي شيء) في نافذة المعاينة ( والتي يمكن بعد ذلك إغلاقها بسرعة باستخدام: pcl) أو [i لإظهار تعريف ماكرو على شريط الحالة. للتنقل شفرة المصدر المعقدة ، هذه الأدوات لا تقدر بثمن.

نافذة المعاينة لا تعتمد على مناظرة في .vimrc ، ولكن:

:map ,p :ptag <C-R><C-W><CR>

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

7
DrAl

http://www.viemu.com/a-why-vi-vim.html مقال جيد عن الدعوة. وهذا ما يفسر قوة استخدام . أمر لتكرار التعديل الأخير.

نسخ/قص ولصق. أفعل ذلك طوال الوقت. مع كل المحررين الكلاسيكيين ، تضغط على Shift باليد اليسرى ، وتحرك المؤشر بيدك اليمنى لتحديد النص. ثم نسخ Ctrl + C ، يمكنك تحريك المؤشر ولصق Ctrl + V.

مع Vim إنه لأمر فظيع:

* yy to copy one line (you almost never want the whole line!)
* [number xx]yy to copy xx lines into the buffer. But you never know

بالضبط إذا كنت قد حددت ما تريد. غالبًا ما يتعين علي فعل [number xx] dd ثم u للتراجع!

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

6
Dan Olson

من أجل Copy/Cut and Paste على وجه التحديد ، فإن استخدام الوضع المرئي يجعل من الأسهل بكثير التكيف مع المحررين الآخرين. وبالتالي فإن الطريقة التي أقطعها ولصقها هي:

  • Esc - الخروج من وضع الإدراج (تخطي إذا كنت بالفعل في الوضع العادي)
  • v - تشغيل الوضع المرئي
  • تحرك حول الملف لتحديد النص الذي تريده - سيوضح لك الوضع المرئي ما هي الشخصيات التي تم اختيارها. لبضع كلمات w ، e و b مفيدة (نقل لبدء Word التالي ، نهاية Word التالي وبدء هذا Word/السابق على التوالي).
  • d - قص النص (استخدم y إذا كنت تريد نسخ النص)
  • انتقل إلى المكان الذي تريد أن يذهب فيه النص
  • p - الصق (هذا يلصق بعد الحرف الحالي ، P يلصق قبل الحرف الحالي.

من المفيد أيضًا استخدام V للانتقال إلى الوضع المرئي (السطر) الذي يحدد الأسطر بأكملها تلقائيًا ، حيث يكون المؤشر في أي وقت.

6
Hamish Downer

ماذا عن اختصارات أخرى؟


ضع في .vimrc الخاص بك:
nnoremap؛ :

بهذه الطريقة ، يكون إدخال commmandmode أسهل: ;q أو ;w work ، بدلاً من ذلك :q أو :w فقط.

ضربات المفاتيح اثنين بدلاً من ثلاثة ، وسوف تحتاج هذا في كثير من الأحيان.


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

ولكنضخمة تحسين للمبرمجين باستخدام السادس.

5
sjas

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

مثلا.

كا (ضع العلامة)

'ا،. ث! t (انسخ كل شيء من العلامة إلى الملف t)

.. حرك المؤشر حولك ..

: .r t (اقرأ في t إلى الموضع الحالي).

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

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

5
Larry Watanabe

يمكنك البحث في محتوى السجل.

افترض أن السجل الخاص بك x يحتوي على

سلسلة للبحث

للبحث في هذه السلسلة ، يجب عليك الكتابة في الوضع العادي
/CTRL-rxENTER

سيؤدي ذلك إلى لصق محتوى السجل x.

4
Luc M

بالإضافة إلى الرد الرائع حول grokking vi ، تجدر الإشارة إلى أن vim does / إضافة بعض الميزات الشبيهة بـ vi والتي تجعل استخدام أوامر vi أجمل. الكائن الذي يتبادر إلى الذهن أولاً هو كائنات نصية: بدلاً من {!}fmt لإعادة تهيئة الفقرة الحالية ، يقوم !apfmt بنفس الشيء. إنه يعمل أولاً عن طريق تحديد أننا نريد تحديد كائن نصي a ، وهو الحالي الفقرة . بشكل مشابه ، لتغيير السلسلة الحرفية الحالية (foo إلى bar للحصول على مثال) ، بدلاً من T"ct"bar (انتقل إلى ما بعد " السابق ، تغيير حتى قبل الرمز التالي " ، أدخل شريط ) ، يمكنك أن تقول ci"bar: تغيير داخل (الأعمق) علامات اقتباس ، وإدراج شريط .

التفكير من حيث الكائنات النصية بدلاً من أوامر الحركة أمر جيد جدًا.

4
wolverian

هناك الكثير من الحيل vim ولكن اعتبارا من الآن ، واحد أستمتع حقا هو Ctrl+A كما يحدث أن أتعامل مع بعض التعليمات البرمجية st ** d التي تحتوي على فهرس الصفيف الثابت.

3
lang2

سلسلة أوامر vim ggVGg? تطبق شفرات Rot13 على النص في وثيقتك الحالية.

Gung vf zl zbfg cebqhpgvir fubegphg fvapr V nyjnlf glcr va Ebg13.

3
cytinus

قص سريع والكتابة فوق جزء من الخط:

تتمثل المهمة الشائعة جدًا عند تحرير أحد الخطوط في قطع من موقع المؤشر الحالي إلى مكان معين والكتابة فوق المحتوى الجديد.

يمكنك استخدام الأوامر التالية:

ct<identifier> للقطع الأمامي.

cT<identifier> للقطع الخلفي.

أين هو الحرف في السطر الذي تريد قصه.

مثال: دعنا نقول هذا السطر الذي تريد تحريره ومؤشرك في I.

Hi There. I am a Coder and I code in : Python and R.

تريد القص حتى : والكتابة فوق I am a programmer ، اكتب: ct: ثم اكتب I am a programmer. سيؤدي هذا إلى: Hi There. I am a programmer: Python and R.

حذف سريع جزء من الخط:

تمامًا مثل الأوامر التالية ، احذف المحتوى من موقع المؤشر الحالي حتى "المعرّف"

dt<identifier> للأمام حذف

dT<identifier> للحذف الخلفي

آمل أن يكون هذا مفيدًا لك أيضًا.

2
dabsingh

علامة تبويب ذكية الانتهاء ^^

http://vim.wikia.com/wiki/Smart_mapping_for_tab_completion

1
David Lam

nnoremap q; q: في ملفي .vimrc ، يحتفظ بالتدفق عند صياغة بحث معقد واستبداله.

0
sjas