يحذف cc السطر الحالي ويضع المؤشر في وضع الإدراج (يحدد خيار "Autoindent" موضعه).
لا تضع VsVim المؤشر دائمًا في الموضع الصحيح. الحالة الوحيدة التي تمكنت من إعادة إنتاجها باستمرار هي إذا قمت بنسخها في سطر فارغ ، فستضع المؤشر في العمود الأول بدلاً من المسافة البادئة.
ضع في اعتبارك كود البدء C # التالي ([] هو المؤشر ، | رمز الإيكورس):
class Foo {
public void Bar()
[{]
}
}
اضغط على o
لفتح السطر أدناه:
class Foo {
public void Bar()
{
|
}
}
الآن اضغط على Esc
:
class Foo {
public void Bar()
{
[ ]
}
}
الآن اضغط على cc
. هذا هو المكان الذي يختلف فيه Vim و VsVim: سيضع Vim المؤشر بمسافة بادئة داخل الشريط:
class Foo {
public void Bar()
{
|
}
}
بينما سيضعه VsVim في السطر 0:
class Foo {
public void Bar()
{
|
}
}
بدلاً من ذلك ، استخدم هذا الرمز:
class Foo {
public void Bar()
{
throw new NotImplementedException()[;]
}
}
في كل من Vim و VsVim ، سيضع cc
المؤشر في الموضع ذي المسافة البادئة ، لكن cc<Esc>cc
سيضع المؤشر في العمود 0 في VsVim (بينما يضعه Vim عند المسافة البادئة اليمنى).
يعكس السلوك الذي أراه في VsVim ما أراه في gVim.
أعتقد أن لدينا وضع تبديل مختلف. أرى بالفعل اختلافًا في السلوك بعد الخطوة "o" في الأعلى. سيظهر مؤشري في نفس العمود مثل {
ولن يكون به مسافة بادئة كما كان.
هل يمكنك تشغيل :set
ولصق الناتج؟
يبدو أن autoindent
هو أحد تلك الخيارات التي قمت بتعيينها في vimrc الخاص بي ، والذي أستخدمه بعد ذلك source
في vsvimrc.
hlsearch
ignorecase
incsearch
scrolloff=5
smartcase
vimrc="C:\Users\pmateescu\_vsvimrc"
vimrcpaths="C:\Users\pmateescu;C:\Users\pmateescu"
autoindent
number
tabstop=4
هل تحسب VsVim إعدادات المسافة البادئة في VS؟ إذا كان الأمر كذلك ، فإليك لي (ضمن خيارات -> محرر النصوص -> C # -> تنسيق):
class MyClass
{
public void Method()
{
goto MyLabel;
MyLabel:
return;
}
}
لا أعرف ما إذا كان هذا مهمًا أيضًا ، لكنني قمت بتعيين المسافة البادئة على Smart ، الحجم 4 ، Keep علامات التبويب.
HTH
نعم ، يبدو أن ميزة البحث التلقائي هي الفرق. بمجرد تعيين هذا + حفظه كملف .c ، يمكنني الحصول على السلوك الذي كنت تراه.
ألقوا نظرة سريعة على الكود ويبدو أنه مشكلة في الأسطر الفارغة. الرمز لا يحترم autoindent
عندما كان السطر المحذوف فارغًا وهو ما يجب أن يكون كذلك
بشكل عام ، تفضل VsVim المسافة البادئة لـ Visual Studio على المسافة البادئة لـ Vim. يمكن تجاوز ذلك عن طريق تعطيل الخيار vsvim_useeditorindent
.
هذا ينجح في الغالب. لسوء الحظ في عام 2010 على الرغم من أن جميع اللغات لا توفر واجهات برمجة تطبيقات جيدة لخدمات الطعن. C # لديها الأفضل ، و VB ليس لديها أي شيء عمليًا و C ++ هي لفة النرد. أعتقد أنه يتحسن في VS11 ولكن لم يتم اللعب بما يكفي حتى الآن لمعرفة المقدار.
سنحاول الضغط على هذا الإصلاح في 1.3
تم اللعب أكثر قليلاً وهذا السلوك تم إيقافه بالفعل من cindent
وليس autoindent
. هذا هو أحد الأسباب التي جعلتني استغرقت وقتًا طويلاً في معالجة المشكلة. كنت أجرب الملفات النصية حيث تم تمكين autoindent
. هذا فقط في ملفات C مع cindent
.
أنت على حق ، لقد تمكنت من إعادة إنتاجه أيضًا بعد أن ذكرته بـ vim -U NONE -u NONE -cmd 'set cindent' index.cs
في الإعدادات العادية ، يبدو أن Vim يقوم تلقائيًا بتعيين cindent
عندما يكون في ملفات تشبه C (تظهر في :setl
في كل من C # و JS).
ومع ذلك ، يبدو أن السلوك نفسه - إزالة المسافة البادئة على <Esc>
، وإعادة المسافة البادئة على cc
- يحدث في ملفات بخلاف cindent
: ظهر لي في كل من CSS و HTML ، ولكن في هذه الحالات ، قد يكون هذا هو تأثير indentexpr
.
تضمين التغريدة
تضمين التغريدة
مرحبًا يا شباب ، لقد قابلت نفس المشكلة.
هل تم إصلاحه في الإصدار الأخير؟
الناتج بعد :set
backspace="indent,eol,start"
hlsearch
ignorecase
incsearch
autoindent
lookforit في الوقت الحالي لا. هذا السلوك هو في الواقع جزء من cindent
وهو غير مدعوم من قبل VsVim في هذا الوقت.
يعطيني هذا الحل البسيط السلوك الذي أتوقعه من vim:
nmap S ddO
nmap cc S
هذا لا يزال لطيفًا. إحساسي البديهي هو أن "cc" لمسح السطر والبدء في التحرير يجب أن يبدأ في نفس مستوى المسافة البادئة مثل إنشاء سطر جديد. هل هناك منطق Vim / VS داخلي مفاده أن هذا لا ينبغي أن يكون كذلك؟ قد أتعامل معه باعتباره تقدمًا في العمل مع المشروع.
لم يكن حل هذه المشكلة ظاهريًا أكثر من "القيام مقابل cc
مهما كان o
كان يفعله بالفعل" (وهذا هو سبب نجاح حل رائعًا عمل أكثر قليلا.
كان VsVim يقوم بالفعل بالشيء الصحيح لما يسمى بـ "vim indent" ، وهو نوع المسافة البادئة التي يستخدمها VsVim عندما لا تتوفر خدمة لغة. من أجل إضافة اختبارات لهذه المشكلة ، كان علي إضافة بنية أساسية للاختبارات لمحاكاة خدمة اللغة. لذلك كان قطع الاتصال هو أن جميع الاختبارات الحالية تستخدم "مسافة بادئة vim" ولكن 99٪ من المستخدمين يستخدمون "مسافة بادئة للمضيف" ، أي أنهم يحررون الملفات حيث يوفر Visual Studio خدمة المسافة البادئة.
لمزيد من تعقيد المشكلة ، كان هناك خطأ لم يبلغ عنه أحد من قبل باستخدام "vim indent" حيث لم يعمل بشكل صحيح عندما لم يتم توسيع علامات التبويب (راجع العدد رقم 2302). مرة أخرى ، من وجهة نظر عملية ، لا أحد يستخدم "vim indent" لذلك عند التفكير ، هذا ليس مفاجئًا.
التعليق الأكثر فائدة
يعطيني هذا الحل البسيط السلوك الذي أتوقعه من vim: