من خلال تكرار نتائج البحث عن طريق عمود
سؤال
هل هناك طريقة في همة (أو المساعد) إلى البحث عن مصطلح و تكرار من خلال نتائج البحث (كما في n
في همة), العمود, بدلا من الصف ؟ حتى لو كان الملف هذا:
foo1 bar bar
baz baz foo3
baz baz foo4
foo2 bar bar
إذا كنت تبحث عن foo
أريد أن تكرار من خلال النتائج في 1,2,3,4.عادة n
قد نقل لي من خلال لهم في 1,3,4,2.
أريد هذا على سبيل المثال من خلال تصفح نتائج البحث في ضخم ثابت-عرض ملف البيانات أو ملف CSV ، حيث الأعمدة تمثل المجالات.
(أنا أيضا تسوية طريقة للقيام بذلك في Emacs بدلا من ذلك.:)
المحلول
بعد رؤية هذا السؤال قررت أن أحاول كتابة همة المساعد التعامل معها.إنه أول همة المساعد, لذلك فمن المحتمل جدا سيئة.ومع ذلك ، فإنه عمل على سبيل المثال الذي أعطيته.
يمكنك تحميل البرنامج المساعد من vim.org: SearchCols.همة
ملاحظة أنه يتطلب أيضا multvals المساعد من نفس الموقع: multvals.همة
فإنه يخلق الأوامر :SearchCols <string>
, التي يمكن استخدامها للبحث عن <string>
في عرض ثابت من الأعمدة بحيث يبدو البحث في العمود الأول أولا ثم العمود الثاني ، إلخ.بدلا من صف على حدة الصف البحث الذي هو معيار همة.كرر الأمر عن طريق @:
ثم @@
لأنه القولون القيادة.
الافتراضات:
- يفترض أن الملف بتنسيق مع فاصل محدد ثابت عرض الأعمدة ، أيهناك فراغات داخل بنود البيانات فقط بينهما.
- يفترض أن السطر الأول من الملف مهيأ لذلك أن الأعمدة يمكن استخلاصه من ذلك.
التحسينات الواضحة التي أستطيع أن أفكر في جعل البحث عن البند التالي أسهل من استخدام @:
و @@
, ، بما في ذلك البحث تسليط الضوء على (رمز هناك لكنه علق بها لأنه يستخدم :match
و سيكون لديك لاستخدام :match none
إلى إيقاف) ، و القضاء على الاعتماد على multvals.همة.
نصائح أخرى
وتحرير: أنا فقط وجدت لمحة عامة عن استخدام التعابير العادية همة للجداول هنا أ >. هذا هو أنظف بكثير من بلدي محاولة للهواة (على الرغم من أن هذا يعمل أيضا؛)):
وتبحث عن ^foo
سوف ابحث في العمود الأول، في حين تبحث عن .*\ foo
سوف ابحث في العمود الثاني، وسوف .*\ .*\ foo
البحث في المركز الثالث.
وهذه ليست كاملة بالطبع لأنه يطابق كتلة كاملة من بداية السطر، لذلك سوف تجد foo3 وfoo4 لكن يضع المؤشر في موقف 0.
ولكن يمكنك أتمتة هذه مع وظيفة تسجيل. اكتب بالضبط ما يلي في الوضع العادي:
qa/.*\ .*\ foo
/foo
q
و(حيث ولقد استخدمت خطوط جديدة للإشارة يجب ان تضرب مفتاح العودة).
وهذا يضع اثنين من عمليات البحث تحت سجل (سؤال وجواب يبدأ تسجيل تحت، قب تحت ب، الخ). الآن ضرب @a
ويجب عليك البحث فقط العمود الثالث ....
وأنا متأكد من أنك يمكن أن تتحول هذه إلى الأوامر التي تأخذ رقم العمود، ولكن أنا خارج الآن، آسف:)