سؤال

أنا أحاول أن تحل محل بعضها , في الملف الحالي عن طريق سطر جديد:

:%s/,/\n/g 

ولكن إدراج ما يشبه ^@ بدلا من الفعلي السطر.الملف ليس في وضع ms-DOS أو أي شيء.

ماذا يجب أن أفعل ؟

إذا كنت غريبة مثلي التحقق من السؤال لماذا السطر على همة? وكذلك.

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

المحلول

استخدام \r بدلا من \n.

استبدال من قبل \n إدراج حرف فارغة في النص.للحصول على السطر, استخدام \r.عندما البحث على السطر, كنت لا تزال تستخدم \n, ومع ذلك.هذا التباين يرجع إلى حقيقة أن \n و \r تفعل أشياء مختلفة قليلا:

\n مباريات نهاية خط (سطر جديد) ، في حين \r مباريات حرف إرجاع.من ناحية أخرى, في التبديلات \n إدراج حرف null حين \r إدراج سطر جديد (أكثر تحديدا ، فهي تعامل كما الإدخال <CR>).وهنا صغيرة غير التفاعلية سبيل المثال لتوضيح هذه باستخدام همة سطر الأوامر ميزة (وبعبارة أخرى ، يمكنك نسخ و لصق التالية في الطرفية لتشغيله). xxd يظهر hexdump الملف الناتج.

echo bar > test
(echo 'Before:'; xxd test) > output.txt
vim test '+s/b/\n/' '+s/a/\r/' +wq
(echo 'After:'; xxd test) >> output.txt
more output.txt
Before:
0000000: 6261 720a                                bar.
After:
0000000: 000a 720a                                ..r.

وبعبارة أخرى ، \n وقد إدراج بايت 0x00 في النص ؛ \r وقد إدراج بايت 0x0a.

نصائح أخرى

هنا الخدعة:

يوفر السادس(م) الدورة للسماح نمط مطابقة مع أحرف خاصة (أي:السطر).ربما من المفيد وضع هذا الخط في .vimrc أو .exrc الملف.

:set magic

بعد ذلك ، قم:

:s/,/,^M/g

للحصول على ^M شخصية نوع التحكم-v وضرب أدخل.تحت ويندوز ، لا التحكم-س, أدخل.الطريقة الوحيدة التي أستطيع أن أتذكر هذه هي بتذكر كيف القليل من معنى:

A: ما يمكن أن يكون أسوأ السيطرة على حرف لاستخدام تمثل السطر?

ب: إما q (لأنه عادة ما يعني "إنهاء") أو v لأنه سيكون من السهل نوع التحكم-ج عن طريق الخطأ وقتل المحرر.

A: تجعل من ذلك.

في بناء الجملة s/foo/bar \r و \n لها معان مختلفة ، اعتمادا على السياق.


القصير:

بالنسبة foo:
= السطر (LF على لينكس/ماك ، CRLF على ويندوز)
= إرجاع (CR)

بالنسبة bar:
= هو السطر
= null byte.

أطول:(مع ascii أرقام)

NUL = 0x00 = 0 = CTRL@
LF = 0x0A = 10 = CTRLي
CR = مخطط الشفرة ست عشرية 0x0d = 13 = CTRLم

وهنا لائحة من ASCII أحرف التحكم, وإدراجها في vim عبر CTRLvCTRL---الرئيسية---.
في bash أو يونيكس/لينكس قذائف فقط اكتب CTRL---الرئيسية---.محاولة CTRLم في باش لها نفس ضرب أدخل, كما قذيفة يدرك ما هو المقصود ، على الرغم من أنظمة لينكس استخدام خط يغذي خط ترسيم.

لإدراج الحرفي في باش يتبع لهم CTRLv سوف تعمل أيضا.

في محاولة باش:

echo ^[[33;1mcolored.^[[0mnot colored.

يستخدم هذا تسلسل هروب ANSI, إدراج اثنين ^['s عن طريق CTRLvESC.

قد تحاول أيضا CTRLvCTRLمأدخل, والتي سوف تعطيك هذه:

bash: $'\r': command not found

تذكر \r من أعلاه ؟ :>

هذا ASCII أحرف التحكم قائمة مختلفة من الكامل ASCII رمز الجدول, في أن السيطرة على الشخصيات, التي يتم إدراجها في وحدة التحكم/pseudoterminal/همة عبر CTRL مفتاح (هاها) ، يمكن العثور عليها هناك.بينما في ج و معظم لغات أخرى يمكنك عادة استخدام ثماني رموز تمثل هذه الشخصيات.

إذا كنت تريد حقا أن تعرف أين كل هذا يأتي من: http://www.linusakesson.net/programming/tty/.
هذا هو أفضل رابط سوف تأتي عبر عن هذا الموضوع, ولكن حذار:يكون هناك التنين.


TL;DR

عادة foo = \n, ، bar = \r.

تحتاج إلى استخدام

:%s/,/^M/g

للحصول على ^M حرف ، اضغط على Ctrl v تليها أدخل

\r يمكن القيام بهذا العمل هنا بالنسبة لك.

مع همة على ويندوز تستخدم Ctrl+س في مكان Ctrl+V

هذا هو أفضل جواب على الطريقة أعتقد ولكن كان يمكن أن يكون أجمل في الجدول: https://stackoverflow.com/a/12389839/962394.

لذا صياغة:

تحتاج إلى استخدام \r استخدام تغذية الأسطر (ascii 0x0a, unix السطر) في regex استبدال ولكن هذا هو غريب إلى استبدال - يجب أن تستمر عادة أن نتوقع استخدام \n على خط تغذية ، \r من أجل إرجاع.

وهذا لأن همة المستخدمة \n في بديل يعني النيل حرف (ascii 0x00).قد يكون من المتوقع النيل قد \0 بدلا من ذلك, تحرير \n عن المعتاد استخدام تغذية الأسطر ، ولكن \0 بالفعل لها معنى في regex بدائل لذلك كان تحول إلى \n.ومن ثم الذهاب إلى أبعد من ذلك أيضا تحويل السطر من \n إلى \r (التي في regex النمط هو إرجاع حرف ascii 0x0d).

character                | ascii code | C representation | regex match | regex replacement
-------------------------+------------+------------------+-------------+------------------------
nil                      | 0x00       | \0               | \0          | \n
line feed (unix newline) | 0x0a       | \n               | \n          | \r
carriage return          | 0x0d       | \r               | \r          | <unknown>

ملحوظة:: ^M (Ctrl-V Ctrl-M على لينكس) إدراج سطر جديد عند استخدامها في regex استبدال بدلا من إرجاع الآخرين وقد نصح (حاولت فقط).

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

من الكسوف ، ^M شخصيات يمكن أن تكون جزءا لا يتجزأ في خط و تريد تحويلها إلى أسطر.

:s/\r/\r/g

ولكن إذا كان أحد لديه بديلا ثم بعد شيء يعمل

:%s/\n/\r\|\-\r/g

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

line1
line2
line3

تغيير

line1
|-
line2
|-
line3

إذا كنت بحاجة إلى القيام به من أجل ملف كامل, واقترح أيضا أن لي أنك يمكن أن محاولة من سطر الأوامر

sed 's/\\n/\n/g' file > newfile

ها هي الإجابة التي عملت بالنسبة لي.من هذا الرجل

----نقلا عن http://jaysonlorenzen.wordpress.com/2009/04/28/use-vi-editor-to-insert-newline-char-in-replace/


شيء آخر يجب القيام به و لا تذكر ومن ثم يجب أن ننظر.

في السادس لإدراج حرف السطر الجديد في البحث و استبدال القيام بما يلي:

:%s/look_for/replace_with^م/ز الأمر أعلاه استبدال كافة مثيلات "look_for" مع "replace_with " (مع معنى السطر)

للحصول على "^م" ، أدخل مفتاح تركيبة "ctl-V" ثم بعد ذلك (إطلاق سراح جميع مفاتيح) اضغط على مفتاح "enter".


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