إعادة التنسيق في vim للحصول على تخطيط عمود جميل
سؤال
لدي مجموعة البيانات هذه في ملف 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 الخالصة مثل هذا:
- اختر فاصلاً.في منشور OP، هذه فاصلة، وفي مثالي هذه هي
=
. - أضف مسافات قبل/بعده.أنا أستعمل
s/=/= ...spaces... /
في الاختيار البصري لهذا. - حدد موقع أطول كلمة ثم ضع المؤشر بعدها.
- قم بإزالة كافة المسافات البيضاء الإضافية باستخدام
dw
والحركة العمودية.
مثال على هذه التقنية موضح أدناه:
لا أجد نفسي بحاجة إلى محاذاة الأشياء في كثير من الأحيان بما يكفي لتثبيت مكون إضافي آخر، لذلك كانت هذه طريقتي المفضلة لإنجاز ذلك - خاصة أنها لا تتطلب الكثير من التفكير.
وكما اقترح sunny256، الأمر column
هو وسيلة رائعة للقيام بذلك على أجهزة يونيكس / لينكس، ولكن إذا كنت تريد أن تفعل ذلك في فيم النقي (بحيث يمكن استخدامه في ويندوز كذلك)، وأسهل طريقة هي لتثبيت محاذاة المساعد ومن ثم القيام به:
:%Align ,
:%s/\(\s\+\),\s/,\1/g
والسطر الأول محاذاة الإدخالات على الفواصل والثاني يتحرك فاصلة بحيث انها مطاردة مع القيمة السابقة. قد تكون قادرا على استخدام AlignCtrl
لتحديد رسم الخرائط المخصصة التي يفعل الكثير كله دفعة واحدة، ولكن أنا لا يمكن أبدا أن تذكر كيفية استخدامه ...
تعديل
إذا كنت لا تمانع في مسافتين بين مداخل وتريد أن تفعل هذا في أمر واحد، كما يمكنك القيام به:
:%Align ,\zs
وكما هو Tabularize http://vimcasts.org/episodes / محاذاة النص-مع-جدولي همة /
وهذا هو الجواب كبيرة باستخدام وحدات الماكرو همة: 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.
وأيضا إذا كان لديك أعمدة طويلة جدا يمكن أن تكون في متناول اليد لتعطيل التفاف الافتراضي
:set nowrap :%!column -t
و(لاحظ في ديبيان لديك أيضا خيار آخر لعمود -n التي إذا كنت تريد تقسيم متعددة المحددات المجاورة)
والسؤال القديم جدا، ولكني استفاد مؤخرا من نفسي المساعد همة الممتاز الذي تمكن تنسيق الجدول إما على الطاير أو بعد أن الحقائق (كما تتطلب حالة استخدامك):
ولقد كتب tablign لهذا الغرض. تثبيت مع
[sudo -H] pip3 install tablign
وبعد ذلك ببساطة بمناسبة الجدول في همة والقيام
:'<,'>:!tablign
وكتبت السيناريو الثعبان الذي يتيح للمستخدمين basicly columize أي نوع من النص أيضا خارج همة. لست متأكدا اذا كان هذا العمل للنوافذ أو مستخدمي أجهزة ماكنتوش.
والاستخدام عندما تكون في همة.
:'<,'>!columnice =
وهذا سوف تستخدم علامة يساوي باسم delimeter. لا يتم طرح delimeter بعيدا بالرغم من ذلك.
وهنا محض فيم الجواب النصي، أي ملحقات، لا وحدات الماكرو:
قد يكون أكثر واضحة لتبدأ مع حل مشكلتي كمثال. اخترت خطوط من التعليمات البرمجية أردت أن تؤثر، ثم استخدم الأمر التالي (أذكر أن الدخول في وضع الأوامر من وضع البصرية بإلحاق تلقائيا " '<،'>"، لذلك يعمل على المدى البصري):
:'<,'>g``normal / "value<0d>D70|P`
وإلا لم أكن اكتب في الواقع "<0D>". يمكنك إدخال الأحرف ليست للطباعة على سطر الأوامر عن طريق الضغط على CTRL-V، ثم اضغط على مفتاح تريد الكتابة. "<0D>" هو ما يتم تقديمها على سطر الأوامر بعد أن كتبته "CTRL-V أدخل '. هنا، هو تحليل من قبل الأمر "عادي"، كما الخروج من "/" وضع البحث. المؤشر ثم يقفز إلى "قيمة" في السطر الحالي.
وبعد ذلك يمكننا ببساطة [D] ذف بقية خط، والقفز إلى العمود 70 (أو كل ما تحتاجه في قضيتك)، و [P] التحرير ما حذفنا فقط. هذا لا يعني أننا يجب أن تحديد عرض أوسع الخط، حتى بحثنا. إذا لم تكن قد وضع تلك المعلومات في statusline الخاص بك، يمكنك ان ترى عمود المؤشر وذلك بإدخال الأمر الوضع العادي "ز ز السيطرة". لاحظ أيضا أن القفز إلى العمود الذي لا وجود له يتطلب الإعداد "virtualedit '!
وتركت المدى بحث عن: ز (lobal) قيادة فارغة، منذ كنا كتلة البصرية وأراد أن تؤثر على كل خط، ولكن يمكنك ترك قبالة باستخدام مجموعة البصرية (و" '<،'>" ) ووضع مصطلح البحث هناك بدلا من ذلك. أو الجمع بين مجموعة مختارة البصرية ومصطلح البحث لتضييق أشياء أكثر دقة / بسهولة.
وهنا شيء تعلمت مؤخرا: إذا كنت لخبط على أمر وضع الأمر تعقيدا، التراجع مع 'ش' (إذا كان يتأثر المخزن المؤقت)، ثم اضغط على "س" لدخول منطقة عازلة التاريخ القيادة الخاصة التي تعمل يشبه إلى حد كبير منطقة عازلة التقليدية. تحرير أي خط واضغط مفتاح الإدخال، ويتم إدخال الأمر تغير كما أمر جديد. لا غنى عنها إذا كنت لا تريد أن يكون للإجهاد على صياغة كل شيء تماما في المرة الأولى.