কীভাবে দক্ষতার সাথে কোনও লাইন একাধিক লাইনে বিভক্ত করবেন?


11

আমি একটি পাঠ্য ফাইলে লগ হওয়া ডেটা পেয়েছি যা প্রতিটি মানের সাথে একটি স্পেস দ্বারা পৃথক করে কেবল একটি দীর্ঘ লাইন। এমন একটি কমান্ড বা কমান্ডের সেট রয়েছে যা এক লাইনকে একাধিক লাইনে বিভক্ত করবে?

উত্তর:


21

আপনি কমান্ডটি ব্যবহার করে একটি নতুন লাইনের সাহায্যে লাইনের পর পরের যে কোনও স্থানটি প্রতিস্থাপন করতে পারেন :s/\s\+/\r/g\s\+এক বা একাধিক সাদা স্থানের অক্ষর বলতে বোঝায় এবং \rএটি একটি নতুন লাইন, দেখুন :help :substituteএবং বিশদর :help regexpজন্য। আপনি যদি একটি লাইনে কমান্ডটি চালনা করেন:

foo bar baz

তুমি পাও:

foo
bar
baz

আপনি যদি hlsearchসক্ষম করে থাকেন এবং আপনি যে কোনও জায়গায় হাইলাইট করা স্পেস দিয়ে আপনার স্ক্রিনটি বিশৃঙ্খলা করতে না চান, আপনি এড়াতে নীচের মতো একটি সামান্য ফাংশন লিখতে পারেন:

function! SplitLineNicely()
    " Save previous value of last search register
    let saved_last_search_pattern = @/

    " :substitute replaces the content of the search register with the `\s\+` 
    " pattern highlighting all whitespaces in the file
    substitute /\s\+/\r/g

    " Restore previous search register
    let @/ = saved_last_search_pattern
endfunction

"আপনি যদি সর্বত্র হাইলাইটেড স্পেস দিয়ে আপনার পর্দা বিশৃঙ্খলা করতে না চান" এটি ওপির সেটআপ সম্পর্কে খুব বেশি ধরে নেয়।
রোমেনেল

@ রোমেনেল বেটার?
toro2k

1
হ্যাঁ, এটি আরও ভাল আইএমও।
রোমেনেল

2
এটা \r, দেখুন :help s/\r। এটি একটি আক্ষরিক নতুন লাইনের টাইপ দ্বারা প্রতিস্থাপিত হতে পারে <c-v><cr>। এই প্রসঙ্গে \nএকটি নাল চরিত্র, দেখুন :help s/\n
toro2k

1
replaces the content of the register- কোন রেজিস্টার?
stillanoob

5

ব্যবহার vimএর প্রতিকল্পন সম্ভবত ভাল উপায় আপনার টাস্ক সম্পন্ন করার জন্য এক, কিন্তু আপনি ভাল হিসাবে একটি ম্যাক্রো ব্যবহার করতে পারেন। ধরুন আমাদের 1 লাইনে কোথাও কার্সার সহ নিম্নলিখিত তথ্য রয়েছে:

1 a b c d e f
~

স্বাভাবিক মোডে শুরু করে, হিটিংয়ের qqমাধ্যমে ম্যাক্রো কলযোগ্য রেকর্ডিং শুরু হবে @q। এর পরে qqযে কোনও কিছু টাইপ করা পূর্বোক্ত কলের মাধ্যমে পুনরাবৃত্তিযোগ্য হবে। আমাদের লক্ষ্যটি হ'ল সাধারণ আদেশগুলি রেকর্ড করা যা বিরামবিহীন পুনরাবৃত্তির অনুমতি দেওয়ার জন্য যথেষ্ট সাধারণ।

সুতরাং, আমরা টাইপ 0করতে পারি কার্সারটিকে লাইনের শুরুতে, তারপরে fspaceকার্সারটিকে প্রথম স্থানটিতে নিয়ে যেতে। এটি আমাদের তখন টাইপ করতে দেয় renter, ফলস্বরূপ:

1 a
2 b c d e f
~

qআমাদের পুনরায় ব্যবহারযোগ্য ম্যাক্রো পুনরাবৃত্তির জন্য প্রস্তুত হওয়ায় এখন হিট করা ভাল ধারণা। কিছুটা নির্বিচারে, আমরা নোট করি যে নতুন লাইনের সাথে প্রতিস্থাপনের জন্য 4 টি স্পেস রয়েছে। এইভাবে আঘাত করে, 4@qআমরা q4 বার ম্যাক্রোটির পুনরাবৃত্তি করি যার ফলস্বরূপ:

1 a
2 b
3 c
4 d
5 e
6 f
~

নোট যে কারণ উপায় আমরা ম্যাক্রো সেট আপ এটি নিরাপদ 9000 বারেরও বেশি কমান্ড পুনরাবৃত্তি, যেমন এটি শুধুমাত্র বর্তমান লাইন প্রভাবিত করবে হতো এবং যেহেতু সেখানে গত ডাটা এন্ট্রি ডানদিকে কোন শূন্যস্থান ছিল, fspaceহবে 'চমত্কারভাবে' ব্যর্থ, ডেটাগুলিকে নতুন লাইনের সাথে প্রতিস্থাপন হতে বাধা দেয়।

সুতরাং প্রথম থেকে পুনরাবৃত্তি:

qq0fspacerenterq9001@q

আমাদের ফলাফল সরবরাহ করে।


1
আমি পছন্দ করি যে 9001আপনার ব্যবহারকারীর নাম দ্রুত টাইপ করার জন্য আপনার কীবোর্ডে কী আছে ।
ধনী

4

ভিমের মধ্যে লাইনগুলি বিভক্ত করার সবচেয়ে সহজ উপায়টি হ'ল সাধারণ মোড কমান্ড gq(সাধারণ বা ভিজ্যুয়াল মোডে দ্রুত ধারাবাহিকতায় দুটি অক্ষর টাইপ করুন)।

ভিজ্যুয়াল মোডে, এটি নির্বাচিত যা কিছু বিভক্ত হবে, সাধারণ মোডে, আপনি gqএকটি গতিতে অনুসরণ করেন।

উদাহরণস্বরূপ, gqlবর্তমানে নির্ধারিত প্রস্থে একটি লাইন বিভক্ত হবে। আপনার বর্তমান সেটিং থেকে বিভক্ত লাইনের প্রস্থকে আলাদা করতে, আপনি ব্যবহার করতে পারেন :set textwidth=n, nএকটি লাইনে আপনি যে অক্ষরের সংখ্যা চান তা উদাহরণস্বরূপ, 10এবং আপনার কাজ শেষ হয়ে গেলে আপনার সাধারণ প্রস্থে ফিরে যেতে পারেন।

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

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