إعادة التنسيق في vim للحصول على تخطيط عمود جميل

StackOverflow https://stackoverflow.com/questions/1229900

  •  22-07-2019
  •  | 
  •  

سؤال

لدي مجموعة البيانات هذه في ملف CSV

1.33570301776, 3.61194e-06, 7.24503e-06, -9.91572e-06, 1.25098e-05, 0.0102828, 0.010352, 0.0102677, 0.0103789, 0.00161604, 0.00167978, 0.00159998, 0.00182596, 0.0019804, 0.0133687, 0.010329, 0.00163437, 0.00191202, 0.0134425 
1.34538754675, 3.3689e-06, 9.86066e-06, -9.12075e-06, 1.18058e-05, 0.00334344, 0.00342207, 0.00332897, 0.00345504, 0.00165532, 0.00170412, 0.00164234, 0.00441903, 0.00459294, 0.00449357, 0.00339737, 0.00166596, 0.00451926, 0.00455153
1.34808186291, -1.99011e-06, 6.53026e-06, -1.18909e-05, 9.52337e-06, 0.00158065, 0.00166529, 0.0015657, 0.0017022, 0.000740644, 0.00078635, 0.000730052, 0.00219736, 0.00238191, 0.00212762, 0.00163783, 0.000750669, 0.00230171, 0.00217917

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

1.33570301776,  3.61194e-06, 7.24503e-06, -9.91572e-06, 1.25098e-05, 0.0102828,  0.010352,   0.0102677,  0.0103789, 0.00161604, 0.00167978, 0.00159998, 0.00182596, 0.0019804,  0.0133687,  0.010329,   0.00163437, 0.00191202, 0.0134425 
1.34538754675,  3.3689e-06,  9.86066e-06, -9.12075e-06, 1.18058e-05, 0.00334344, 0.00342207, 0.00332897, 0.00345504,0.00165532, 0.00170412, 0.00164234, 0.00441903, 0.00459294, 0.00449357, 0.00339737, 0.00166596, 0.00451926, 0.00455153
1.34808186291, -1.99011e-06, 6.53026e-06, -1.18909e-05, 9.52337e-06, 0.00158065, 0.00166529, 0.0015657,  0.0017022, 0.000740644,0.00078635, 0.000730052,0.00219736, 0.00238191, 0.00212762, 0.00163783, 0.000750669,0.00230171, 0.00217917

سيكون من الرائع نسخ الأقسام ولصقها باستخدام ctrl-v.أي تلميحات؟

هل كانت مفيدة؟

المحلول

إذا كنت على نوع من UNIX (لينكس، الخ)، ويمكنك خداع وتصفية من خلال العمود (1) الأوامر.

:%!column -t

ما سبق وتحليل على المحددات داخل سلسلة حرفية وهذا خطأ، لذلك سوف تحتاج على الأرجح خطوات ما قبل المعالجة وتحديد محدد لهذا الملف على سبيل المثال:

%!sed 's/","/\&/' | column -t -s '&'

نصائح أخرى

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

  1. اختر فاصلاً.في منشور OP، هذه فاصلة، وفي مثالي هذه هي =.
  2. أضف مسافات قبل/بعده.أنا أستعمل s/=/= ...spaces... / في الاختيار البصري لهذا.
  3. حدد موقع أطول كلمة ثم ضع المؤشر بعدها.
  4. قم بإزالة كافة المسافات البيضاء الإضافية باستخدام dw والحركة العمودية.

مثال على هذه التقنية موضح أدناه:

Example

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

وكما اقترح sunny256، الأمر column هو وسيلة رائعة للقيام بذلك على أجهزة يونيكس / لينكس، ولكن إذا كنت تريد أن تفعل ذلك في فيم النقي (بحيث يمكن استخدامه في ويندوز كذلك)، وأسهل طريقة هي لتثبيت محاذاة المساعد ومن ثم القيام به:

:%Align ,
:%s/\(\s\+\),\s/,\1/g

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

تعديل

إذا كنت لا تمانع في مسافتين بين مداخل وتريد أن تفعل هذا في أمر واحد، كما يمكنك القيام به:

:%Align ,\zs

وهذا هو الجواب كبيرة باستخدام وحدات الماكرو همة: https://stackoverflow.com/a/8363786/59384 - في الأساس، يمكنك بدء تسجيل ماكرو تنسيق العمود الأول، ووقف تسجيل ثم كرر الماكرو لجميع خطوط المتبقية.

ونسخ / لصق من هذا الجواب:

qa0f:w100i <Esc>19|dwjq4@a

لاحظ مسافة واحدة بعد 100I، و<خروج> يعني "الهروب الصحافة" - لا اكتب "<خروج>" حرفيا

.

الترجمة:

qa         -- record macro in hotkey a
0          -- go to beginning of line
f:         -- go to first : symbol
w          -- go to next non-space character after the symbol
100i <Esc> -- insert 100 spaces
19|        -- go to 19th column (value 19 figured out manually)
dw         -- delete spaces until : symbol
j          -- go to next line
q          -- stop recording macro
4@a        -- run the macro 4 times (for the remaining 4 lines)

هل يمكن استخدام csv.vim المساعد.

:%ArrangeColumn

ولكن، هذا لن تفعل بالضبط ما كنت قد طلبت: سوف ضبط الحق محتويات الخلايا، في حين كان لديك قيمك الانحياز التي العشرية أو الرقم الأول

والبرنامج المساعد لديها العديد من الأوامر الأخرى المفيدة للعمل مع ملفات CSV.

ونحن الآن لدينا أيضا EasyAlign المساعد كتبها junegunn.

مظاهرة GIF من README بها:

وأيضا إذا كان لديك أعمدة طويلة جدا يمكن أن تكون في متناول اليد لتعطيل التفاف الافتراضي

:set nowrap
:%!column -t

و(لاحظ في ديبيان لديك أيضا خيار آخر لعمود -n التي إذا كنت تريد تقسيم متعددة المحددات المجاورة)

والسؤال القديم جدا، ولكني استفاد مؤخرا من نفسي المساعد همة الممتاز الذي تمكن تنسيق الجدول إما على الطاير أو بعد أن الحقائق (كما تتطلب حالة استخدامك):

https://github.com/dhruvasagar/vim-table-mode

ولقد كتب tablign لهذا الغرض. تثبيت مع

[sudo -H] pip3 install tablign

وبعد ذلك ببساطة بمناسبة الجدول في همة والقيام

:'<,'>:!tablign

وكتبت السيناريو الثعبان الذي يتيح للمستخدمين basicly columize أي نوع من النص أيضا خارج همة. لست متأكدا اذا كان هذا العمل للنوافذ أو مستخدمي أجهزة ماكنتوش.

columnice.py جوهر

والاستخدام عندما تكون في همة.

:'<,'>!columnice =

وهذا سوف تستخدم علامة يساوي باسم delimeter. لا يتم طرح delimeter بعيدا بالرغم من ذلك.

وهنا محض فيم الجواب النصي، أي ملحقات، لا وحدات الماكرو:

قد يكون أكثر واضحة لتبدأ مع حل مشكلتي كمثال. اخترت خطوط من التعليمات البرمجية أردت أن تؤثر، ثم استخدم الأمر التالي (أذكر أن الدخول في وضع الأوامر من وضع البصرية بإلحاق تلقائيا " '<،'>"، لذلك يعمل على المدى البصري):

:'<,'>g``normal / "value<0d>D70|P`

وإلا لم أكن اكتب في الواقع "<0D>". يمكنك إدخال الأحرف ليست للطباعة على سطر الأوامر عن طريق الضغط على CTRL-V، ثم اضغط على مفتاح تريد الكتابة. "<0D>" هو ما يتم تقديمها على سطر الأوامر بعد أن كتبته "CTRL-V أدخل '. هنا، هو تحليل من قبل الأمر "عادي"، كما الخروج من "/" وضع البحث. المؤشر ثم يقفز إلى "قيمة" في السطر الحالي.

وبعد ذلك يمكننا ببساطة [D] ذف بقية خط، والقفز إلى العمود 70 (أو كل ما تحتاجه في قضيتك)، و [P] التحرير ما حذفنا فقط. هذا لا يعني أننا يجب أن تحديد عرض أوسع الخط، حتى بحثنا. إذا لم تكن قد وضع تلك المعلومات في statusline الخاص بك، يمكنك ان ترى عمود المؤشر وذلك بإدخال الأمر الوضع العادي "ز ز السيطرة". لاحظ أيضا أن القفز إلى العمود الذي لا وجود له يتطلب الإعداد "virtualedit '!

وتركت المدى بحث عن: ز (lobal) قيادة فارغة، منذ كنا كتلة البصرية وأراد أن تؤثر على كل خط، ولكن يمكنك ترك قبالة باستخدام مجموعة البصرية (و" '<،'>" ) ووضع مصطلح البحث هناك بدلا من ذلك. أو الجمع بين مجموعة مختارة البصرية ومصطلح البحث لتضييق أشياء أكثر دقة / بسهولة.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top