ভিমের নতুন লাইনে কোনও চরিত্রকে কীভাবে প্রতিস্থাপন করবেন


1967

আমি ,বর্তমান ফাইলে প্রতিটি একটি নতুন লাইনের মাধ্যমে প্রতিস্থাপন করার চেষ্টা করছি :

:%s/,/\n/g 

তবে এটি ^@আসল নিউলাইনের পরিবর্তে দেখতে দেখতে কী সন্নিবেশ করায় । ফাইলটি ডস মোড বা কোনও কিছুর মধ্যে নেই।

আমার কি করা উচিৎ?

আপনি যদি কৌতূহলী হন তবে আমার মতো, প্রশ্নটি পরীক্ষা করে দেখুন কেন ভিমের জন্য নতুন লাইন? যেমন.


2
স্ট্যাক ওভারফ্লো প্রোগ্রামিং এবং বিকাশের প্রশ্নের জন্য একটি সাইট। এই প্রশ্নটি অফ-টপিক হিসাবে উপস্থিত বলে মনে হচ্ছে কারণ এটি প্রোগ্রামিং বা উন্নয়ন সম্পর্কিত নয়। সহায়তা কেন্দ্রে আমি এখানে কোন বিষয় সম্পর্কে জিজ্ঞাসা করতে পারি তা দেখুন । সম্ভবত সুপার ইউজার বা ইউনিক্স ও লিনাক্স স্ট্যাক এক্সচেঞ্জ জিজ্ঞাসা করতে একটি ভাল জায়গা হবে।
jww 20'18

5
@jww এই প্রশ্নটি 10 ​​বছরের পুরানো ... মনে হচ্ছে স্থানান্তরিত হওয়ার বয়স খুব বেশি। ভালো প্রশ্ন প্রচুর উদাহরণস্বরূপ, আছে: stackoverflow.com/questions/10175812/...
Vinko Vrsalovic

14
@jww vim হ'ল একটি সরঞ্জাম যা সাধারণত প্রোগ্রামারদের জন্য ব্যবহৃত হয় এবং প্রোগ্রামারগুলির জন্য সাধারণত ব্যবহৃত সরঞ্জামগুলি সম্পর্কিত প্রশ্নগুলি স্ট্যাক ওভারফ্লোতে মূল বিষয় রয়েছে । যদিও স্পষ্টতই এটি ভি এবং ভিমের জন্য আরও উপযুক্ত ।
ব্যবহারকারী 202729

উত্তর:


2564

\rপরিবর্তে ব্যবহার করুন \n

\nপাঠ্যে একটি নাল অক্ষর সন্নিবেশ করানো দ্বারা প্রতিস্থাপন । একটি নতুন লাইন পেতে, ব্যবহার করুন \r। একটি নতুন লাইন অনুসন্ধান করার সময় , আপনি এখনও ব্যবহার করতে চাইবেন \n। এই অসামঞ্জস্য যে কারণে \nএবং \r কিছুটা ভিন্ন কিছু করার :

\nলাইনের শেষের সাথে (নিউলাইন) \rমেলে , যেখানে ক্যারিজ রিটার্নের সাথে মেলে। অন্যদিকে, বিকল্পগুলিতে \nএকটি নাল চরিত্র \rসন্নিবেশ করানো হয় যেখানে একটি নতুন লাইন সন্নিবেশ করা হয় (আরও স্পষ্টতই, এটি ইনপুট হিসাবে বিবেচিত হয় <CR>)। এটি বর্ণনা করার জন্য এখানে একটি ছোট, অ-ইন্টারেক্টিভ উদাহরণ রয়েছে যা ভিম কমান্ড লাইন বৈশিষ্ট্যটি ব্যবহার করে (অন্য কথায়, আপনি এটি চালনার জন্য নিম্নলিখিতটি অনুলিপি করে অনুলিপি করতে পারেন)। xxdফলাফলের ফাইলের একটি হ্যাক্সডাম্প দেখায়।

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 প্রবেশ করিয়েছে।


127
/ r এন্টার / রিটার্ন কী টিপুন হিসাবে বিবেচনা করা হয়। এটি সমস্ত প্ল্যাটফর্মে কাজ করে।
লুকা মেরিনকো


14
আমি আশা করি এটি ক্লাসিক vi এর জন্য কাজ করেছে। এআইএক্স ভি .1.১-তে, এর \rমতো কাজ করে না। তবে আপনি Ctrl-V Enterটাইপিংয়ের জায়গায় টিপতে পারেন \rএবং এটি কার্যকর হয়।
একসোর্টসো

3
আমি পার্টিতে দেরি করছি। যদি একটি নাল সন্নিবেশ \rকরানো হয় <CR>এবং \nসন্নিবেশ করানো হয়, তবে আমি কীভাবে কোনও গাড়ীর ফেরতের সাথে কিছু প্রতিস্থাপন করব?
মিঃ লালমা

2
@ সানিরাজ কি সিআর এবং এলএফ-এর ইতিহাস সম্পর্কে নিশ্চিত? আমি ছাপে ছিলাম যে মূলত এলএফ কাগজটিকে এক সারি এগিয়ে নিয়েছে তবে প্রিন্টহেড সরানো হয়নি, এবং সিআর প্রিন্টহেড সরিয়ে নিয়েছে তবে কাগজটি সরল না। ফলস্বরূপ, যদি আপনার ওএস মুদ্রণের আগে ইনপুটটিকে রূপান্তর না করে তবে সঠিক আউটপুট পেতে আপনি কেবল এলএফ বা সিআর ব্যবহার করতে পারবেন না। এমএস ডস টেক্সট ফাইল ফর্ম্যাট হিসাবে কাঁচা প্রিন্টার ডেটা ব্যবহার করে, ম্যাক ওএস সিআর ব্যবহার করেছিল এবং সে থেকে প্রিন্টারের কাঁচা বিন্যাসে রূপান্তরিত করেছিল এবং ইউএনআইএক্স এলএফ ব্যবহার করেছিল এবং সে থেকে মুদ্রকের কাঁচা বিন্যাসে রূপান্তরিত করেছিল।
মিক্কো রেন্টালাইনেন

210

কৌশলটি এখানে:

প্রথমে বিশেষ অক্ষরের (যেমন: নিউলাইন) সাথে প্যাটার্ন মিলের অনুমতি দেওয়ার জন্য আপনার ভাই (মি) সেশনটি সেট করুন। আপনার .vimrc বা .exrc ফাইলটিতে সম্ভবত এই লাইনটি রাখা উপযুক্ত:

:set magic

এরপরে, করুন:

:s/,/,^M/g

^Mচরিত্রটি পেতে Ctrl+ টাইপ করুন Vএবং হিট করুন Enter। উইন্ডোজ এর অধীনে, Ctrl+ Q, করুন Enter। এগুলি মনে রাখার একমাত্র উপায় হ'ল তারা কতটা অল্প বুদ্ধি বোধ করে তা স্মরণ করে:

উত্তর: একটি নতুন লাইনের প্রতিনিধিত্ব করতে সবচেয়ে খারাপ নিয়ন্ত্রণ-চরিত্রটি কী হবে?

বি: হয় q(কারণ এটি সাধারণত "প্রস্থান" এর অর্থ হয় ) অথবা vকারণ এটি ভুল করে Ctrl+ টাইপ Cকরে সম্পাদকটিকে মেরে ফেলা খুব সহজ হবে ।

উত্তর: এটি তৈরি করুন।


9
আমি Windows এ GVim ব্যবহার করছি, এবং আমি প্রয়োজন তন্ন তন্ন :set magicবা (এটা আমার ~ / _vimrc পারেন না) ctrl-qctrl-vপ্রবেশের পরে কেবল একটি সাধারণ ^Mআমার জন্য অক্ষরটি তৈরি করে ।
ক্রিস ফিলিপস

5
সিভি কোনও নতুন লাইনের প্রতিনিধিত্ব করে না; এটি "পরবর্তী আক্ষরিক চরিত্রের হাতছাড়া" কমান্ড। সিভি কোনটির জন্য স্মৃতিবিজ্ঞান কী তা আমি জানি না, তবে মানসিকভাবে নতুন লাইনে ম্যাপ না দেওয়ার একটি কারণ রয়েছে।
জিম স্টুয়ার্ট

27
Ctrl-v হ'ল "ভার্ব্যাটিম" - এর অর্থ হ'ল পরবর্তী কীটি তার "ভার্ব্যাটিম" কীকোড / চরিত্রটিতে চাপানো escape উইন্ডোজে এটি পেস্ট করা হয়েছে: জিনিসগুলিকে পরিচিত রাখতে। Ctrl-Q সম্ভবত "(আন) এর উদ্ধৃতি" এর জন্য। বেশ বোকা, যাইহোক - তবে আপনি এটি বাইনারি ফাইলগুলিতে ব্যবহার করতে পারেন - উদাহরণস্বরূপ Ctrl-A এর জন্য Ctrl-Z এর মাধ্যমে অনুসন্ধান করতে (Ascii 1-26 আমার ধারণা)।
টমাসজ গ্যান্ডার

1
Ctrl-Cআসলে সম্পাদককে হত্যা করে না, যদিও এটি আপনাকে সাধারণ মোডে ফিরে যেতে পারে। Ctrl-Vভারব্যাটিম, এবং এর Ctrl-Qঅর্থ কেউ $VIMRUNTIME/mswin.vimকনফিগারেশন ফাইলটি লোড করার ভুল করেছে । আপনার এমসউইনের দরকার নেই। পরিবর্তে কেবল নিজের নিজস্ব vimrc ব্যবহার করুন।
00dani

বাহ ---- এটি আশ্চর্যজনক। আমি sed -n l এখন অবধি করতাম জেনে রাখা ভাল যে Ctrl-vভিএম দিয়ে একই অর্জন করা যায়।
আরপিট

98

সিনট্যাক্সে s/foo/bar, \rএবং \nপ্রসঙ্গের উপর নির্ভর করে বিভিন্ন অর্থ রয়েছে।


ছোটগল্প ঃ

এর জন্য foo:

\ n = নিউলাইন (লিনাক্স / ম্যাকের উপর এলএফ, উইন্ডোজে সিআর + এলএফ)
\ r = ক্যারেজ রিটার্ন (সিআর)

এর জন্য bar:

\ r = নিউলাইন line
n = নাল বাইট।

দীর্ঘ (এএসসিআইআই নম্বর সহ):

NUL= 0x00 = 0 = Ctrl+ @
LF= 0x0A = 10 = Ctrl+ J
CR= 0x0D = 13 = Ctrl+M

এখানে ASCII নিয়ন্ত্রণ অক্ষরের একটি তালিকা রয়েছে । এগুলিকে Ctrl+ V, Ctrl+ এর মাধ্যমে ভিমে .োকান ---key---

বাশ বা অন্যান্য ইউনিক্স / লিনাক্স শেলগুলিতে, কেবল Ctrl+ টাইপ করুন ---key---

বাশ-এ Ctrl+ চেষ্টা করুন M। এটি হিট করার মতোই Enter, যেমন শেল বুঝতে পারে তার অর্থ কী, যদিও লিনাক্স সিস্টেমগুলি লাইন সীমানার জন্য লাইন ফিড ব্যবহার করে।

আক্ষরিক বাশে প্রবেশ করতে, এগুলি Ctrl+ সহ প্রিপেন্ড Vকরাও কাজ করবে।

ব্যাশে চেষ্টা করুন:

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

এটি এএনএসআই অব্যাহতি ক্রম ব্যবহার করে । সন্নিবেশ দুই ^['মাধ্যমে গুলি Ctrl+ + V, Esc

এছাড়াও আপনি চেষ্টা করতে পারে Ctrl+ + V, Ctrl+ + M, Enter, যা আপনি দিতে হবে:

bash: $'\r': command not found

\rউপরে থেকে মনে আছে ? :>

এই এএসসিআইআই কন্ট্রোল অক্ষর তালিকা সম্পূর্ণ ASCII প্রতীক টেবিলের থেকে পৃথক , কন্টোল / সিউডোটারমিনাল / ভিমে Ctrlকী (হাহা) এর মাধ্যমে theোকানো কন্ট্রোল অক্ষরগুলি সেখানে পাওয়া যাবে।

অন্যদিকে সি এবং অন্যান্য ভাষায়, আপনি সাধারণত এই 'অক্ষরগুলি' উপস্থাপন করতে অষ্টাল কোড ব্যবহার করেন।

আপনি যদি সত্যিই জানতে চান যে এগুলি কোথা থেকে এসেছে: টিটিওয়াই ক্ষুব্ধ । এটি এই লিঙ্কটি আপনি এই বিষয়টি নিয়ে আসতে পারেন তবে সাবধান হন: ড্রাগন থাকবে।


টি এল; ডিআর

সাধারণত foo= \n, এবং bar= \r


1
সুতরাং আমি কৌতূহল বোধ করছি আপনি কীভাবে কোনও ক্যারেজ রিটার্নের সাথে একটি চরিত্রকে প্রতিস্থাপন করবেন
কোডশট

2
@ কোডশটটি করা :s/x/^M/gউচিত। ঢোকান ^Mমাধ্যমে ctrl-vঅনুসরণ ctrl-m
sjas

3
ধন্যবাদ sjas, আপনি জানেন যে এই প্রশ্নটি সর্বকালের সবচেয়ে অদ্ভুত এক। উত্তরের জন্য ১০০৮ ভোট দেয় যা মূলত "ভিম আপনি যা খুঁজে পেয়েছেন তা করে than কারণ এর কারণ ভিম যা পেয়েছেন তা করে। কখনও ভুলে যাবেন না যে ভিম আপনি যা পেয়েছেন তা করে does" আমি প্যাটার্নে আকর্ষণীয় চরিত্রগুলির জন্য কোডগুলির একটি শর্টলিস্ট, প্রতিস্থাপন এবং অদ্ভুততার কারণ খুঁজে পাব তাই অন্যান্য অনুরূপ অদ্ভুততার কথা মনে রাখা এবং ভবিষ্যদ্বাণী করা সহজ hoped যে আমার ভোট পেয়েছে।
কোডশট

@ কোডেশট এএসসিআই নিয়ন্ত্রণ অক্ষরের একটি তালিকা আপনাকে সাহায্য করতে পারে। আরও রেফারেন্সের জন্য cs.tut.fi/~jkorpela/chars/c0.html দেখুন । আমি দুটি লিঙ্ক অন্তর্ভুক্ত করার জন্য আমার উত্তর আপডেট করব।
sjas

55

আপনার ব্যবহার করা দরকার:

:%s/,/^M/g

^Mচরিত্রটি পেতে , তারপরে Ctrl+ টিপুন ।vEnter


4
^ এম অক্ষর পেতে আমাকে <Cv> <Cm> করতে হবে।
জেজেন টমাস

39

\r আপনার জন্য এখানে কাজ করতে পারেন।


24

তেজ উইন্ডোস, ব্যবহারের উপর দিয়ে Ctrl+ + Qস্থানে Ctrl+ + V


16

আমি যেভাবে মনে করি তার পক্ষে এটি সেরা উত্তর, তবে এটি কোনও টেবিলে আরও ভাল লাগত:

ভিমের জন্য \ রা নিউলাইন কেন?

সুতরাং, পুনর্নির্মাণ:

রেজেক্স রিপ্লেসমেন্টে \rআপনাকে একটি লাইন ফিড (এএসসিআইআই 0x0A, ইউনিক্স নিউলাইন) ব্যবহার করতে হবে তবে এটি প্রতিস্থাপনের জন্য অদ্ভুত - আপনার সাধারণত \nলাইন ফিড এবং \rক্যারেজ রিটার্নের জন্য ব্যবহারের প্রত্যাশা চালিয়ে যাওয়া উচিত ।

এটি কারণ হ'ল ভিম \nএকটি প্রতিস্থাপনে NIL অক্ষর (ASCII 0x00) বোঝাতে ব্যবহৃত হয়েছিল । আপনি লাইন ফিডের জন্য সাধারণ ব্যবহারের জন্য বিনামূল্যে ব্যবহারের \0পরিবর্তে এনআইএল হতে পারে বলে আশা করেছিলেন \n, তবে \0ইতিমধ্যে রেজেক্স প্রতিস্থাপনের একটি অর্থ রয়েছে, তাই এটি স্থানান্তরিত হয়েছিল \n। অত: পর তারপর যাচ্ছে আরো থেকেও সম্পর্কে newline নামান \nথেকে \r(যা একটি Regex প্যাটার্ন গাড়ি ফেরত চরিত্র, হওয়া ASCII হয় 0x0D)।

চরিত্র | এএসসিআইআই কোড | সি উপস্থাপনা | রেজেক্স ম্যাচ | রেজেক্স রিপ্লেসমেন্ট
------------------------- + + ------------ + + ----------- ------- + + ------------- + + ------------------------
শূন্য | 0x00 | \ 0 | \ 0 | \ N
লাইন ফিড (ইউনিক্স নিউলাইন) | 0x0a | । n | । n | পান \ r
গাড়ী ফেরত | 0x0d | \ r | \ r | <অজানা>

এনবি: ^M( Ctrl+ V Ctrl+ Mলিনাক্সে) অন্যরা যেমন পরামর্শ দেয় (যেমন আমি এটি চেষ্টা করেছি) পরিবর্তে ক্যারিজ রিটার্নের পরিবর্তে রিজেক্স রিপ্লেসমেন্টে ব্যবহার করার সময় একটি নতুন লাইন সন্নিবেশ করায়।

এছাড়াও নোট করুন যে ভিম যখন এটির ফাইল ফর্ম্যাট সেটিংসের উপর ভিত্তি করে ফাইল সংরক্ষণ করে তখন লাইন ফিডের অক্ষরটি অনুবাদ করবে এবং এটি বিষয়গুলিকে বিভ্রান্ত করে।


11

Eclipse থেকে , ^Mঅক্ষরগুলি একটি লাইনে এম্বেড করা যেতে পারে এবং আপনি এগুলিকে নতুন লাইনে রূপান্তর করতে চান।

:s/\r/\r/g

8

তবে যদি কোনওটির বিকল্প নিতে হয়, তবে নিম্নলিখিত জিনিসটি কাজ করে:

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

উপরের অংশে, প্রতিটি পরবর্তী লাইন পরবর্তী লাইনের সাথে প্রতিস্থাপিত হয় এবং তারপরে |-আবার একটি নতুন লাইন থাকে। এটি উইকি টেবিলগুলিতে ব্যবহৃত হয়।

পাঠ্যটি যদি নিম্নরূপ থাকে:

line1
line2
line3

এটি পরিবর্তন করা হয়

line1
|-
line2
|-
line3

7

আপনার যদি পুরো ফাইলটির জন্য এটি করার দরকার হয় তবে আমার কাছে এটিও পরামর্শ দেওয়া হয়েছিল যে আপনি কমান্ড লাইন থেকে চেষ্টা করতে পারেন:

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

1
নোট করুন যে এর জন্য GNU সেড প্রয়োজন। printf 'foo\\nbar\n' | sed 's/\\n/\n/g'এটি আপনার সিস্টেমে কার্যকর হবে কিনা তা দেখার চেষ্টা করুন । (এই পরামর্শের জন্য ফ্রাইনোডে # ব্যাশের ভাল লোকদের কৃতিত্ব))
ইভান

হ্যাঁ, তবে প্রশ্নটি ছিল ভিমকে নিয়ে। স্ট্যাক ওভারফ্লো প্রশ্ন রয়েছে কীভাবে আমি সেড ব্যবহার করে একটি নতুন লাইন () n) প্রতিস্থাপন করতে পারি?
পিটার মর্টেনসেন

5

উত্তরটি আমার পক্ষে কাজ করেছিল তা এখানে। এই লোকটির কাছ থেকে:

---- উদ্ধৃতি প্রতিস্থাপনে একটি নতুন লাইন চর সন্নিবেশ করতে vi সম্পাদক ব্যবহার করুন Use


আমাকে অন্য কিছু করতে হবে এবং মনে রাখতে পারছে না এবং তারপরে সন্ধান করতে হবে।

Vi তে, অনুসন্ধানে একটি নতুন লাইন অক্ষর সন্নিবেশ করতে এবং প্রতিস্থাপন করতে, নিম্নলিখিতটি করুন:

:%s/look_for/replace_with^M/g

উপরের কমান্ডটি "look_for" এর সমস্ত দৃষ্টান্তকে "প্রতিস্থাপন_দ্বীপ with n" (\ n অর্থ নিউলাইন সহ) দিয়ে প্রতিস্থাপন করবে।

"^ এম" পেতে, কী সংমিশ্রণটি লিখুন Ctrl+ Vএবং তারপরে (সমস্ত কী ছেড়ে দিন) Enterকী টিপুন।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.