ভিআইএমের মধ্যে সামান্য পার্থক্য সহ পুনরাবৃত্তিমূলক পাঠ্য কীভাবে সন্নিবেশ করবেন?


11

আমি এই জাতীয় পাঠ্য সন্নিবেশ করতে চাই:

similar text wordA similar text ...
similar text wordB similar text ...
similar text wordC similar text ...

আমি জানি আমি পাঠ্যটি বহুবার আটকানোতে পারি তবে প্রতি লাইনের একক শব্দ পরিবর্তনের জন্য বিকল্পটি ব্যবহার করতে পারি, তবে আমি এখনও এই পদ্ধতিটিকে খুব অসুবিধে করি find

"ভেরিয়েবল" এর মধ্যে কোনও শব্দ বা শব্দের তালিকা সংরক্ষণ করার কোনও উপায় আছে কি তাহলে অনুরূপ পাঠ্য উত্পন্ন করতে এই ভেরিয়েবলটি ব্যবহার করুন?


সম্পাদনা করুন আমি আসল প্রশ্নে কিছু অস্পষ্ট করেছিলাম, আসলে আমি কয়েকটি খুব একই ধরণের ফাংশন সংজ্ঞা তৈরি করার চেষ্টা করছি, তাই wordA wordB... পাঠ্যের প্রতিটি ক্লোনে বহুবার উপস্থিত হতে পারে এবং পাঠ্যে অনেকগুলি লাইন থাকতে পারে। প্যাটার্নটি ঠিক এর মতো:

similar_text1 wordA similar_text2 wordA similar_text3 ...
similar_text1 wordB similar_text2 wordB similar_text3 ...
similar_text1 wordC similar_text2 wordC similar_text3 ...

(পাঠ্যে নতুন লাইন এবং ওয়ার্ডএ, ওয়ার্ড বি থাকতে পারে ... অনেক সময় থাকতে পারে)


২ য় সম্পাদনা "অনুরূপ_পাঠন" অংশগুলি প্রতিবার আমি যখন এই জাতীয় কাজ করি তখন বিভিন্ন রকম হয়, সুতরাং এই কাজের সমাধানটি পুনরায় ব্যবহারযোগ্য হওয়া ভাল। কারণ আমি খুব একই ধরণের ফাংশন সংজ্ঞা তৈরি করার চেষ্টা করছি, বা ম্যাপিং টেবিলের কাজ করার জন্য একটি স্ট্রিং।

উত্তর এবং কিছু অনুশীলন পড়ার পরে, আমি দেখতে পেলাম যে এই চাকরিটি একধরণের বিকল্প হিসাবে বিবেচনা করা আরও সুবিধাজনক, কারণ পৃথক "পার্ট 1", "পার্ট 2" ... "পার্টএন" যার মধ্যে নিউলাইনগুলি থাকতে পারে এটি লিখতে শক্ত, তাই লিখুন প্রথম একটি টেম্পলেট:

similar_text1 $WORD similar_text2 $WORD similar_text3 ...
(text may contain <ENTER>, make sure $WORD not exist in "similar_text" parts )

তারপরে পাঠ্যের ক্লোনগুলি রাখার চেষ্টা করছেন তবে শব্দের একটি তালিকার সাথে ORD ডাব্লু ওয়ার্ডের প্রতিস্থাপন করা আরও সোজা চিন্তাভাবনা।

সুতরাং মনে হচ্ছে আমার সমস্যাটি "কীভাবে বহু বার টেক্সট ব্লক ক্লোন করতে হয়, তবে প্রতিবারই কোনও তালিকাতে একটি শব্দ দিয়ে একটি কীওয়ার্ড প্রতিস্থাপন করে?"


এজন্য রেজিস্টারগুলি ব্যবহার করা হয়। আপনি কোনও নিবন্ধকে পাঠ্যটি অনুলিপি (অনুলিপি) করতে পারেন এবং তারপরে সেই নিবন্ধটি ব্যবহার করতে পারেন। ম্যাক্রোস একই কাজ একইসাথে পুনরাবৃত্তিমূলক কাজেও ব্যবহৃত হতে পারে।
সিবিকোডার

উত্তর:


7

আপনি নিম্নলিখিত ফাংশন ব্যবহার করতে পারেন:

function! GenerateLines()
    let firstpart="similar text part 1"
    let secondpart="similar text part 2"

    let words=["wordA","wordB","wordC","wordD","wordE"]

    for word in words
        let line = firstpart . word . secondpart
        call append(line('.')+1, line)
        normal j
    endfor
endfunction

ভেরিয়েবলগুলিতে firstpartএবং secondpartশব্দের আগে এবং পরে পুনরাবৃত্তি করতে পাঠ্যটি রাখুন এবং তালিকায় wordsশব্দের পরিবর্তন করুন put

তারপরে লুপ তালিকার প্রতিটি শব্দের জন্য লাইনটির সামগ্রী তৈরি করবে, বাফারে লাইনটি সন্নিবেশ করিয়ে এই নতুন লাইনে যাবে।

এর পরে আপনি কেবল ফাংশন কল করতে পারেন: call GenerateLines()


সম্পাদনা সহজভাবে পরিচালনা করার জন্য আপনি বিভিন্ন অংশকে যুক্তি হিসাবেও পাস করতে পারেন, ফাংশনটি দেখতে এইরকম হওয়া উচিত:

function! GenerateLines(firstpart, secondpart, words)
    for word in a:words
        call append(line('.')+1, a:firstpart . word . a:secondpart)
        normal j
    endfor
endfunction

এবং আপনি এটিকে কল করতে পারেন:

call GenerateLines("first part", "second part", ["wordA","wordB","wordC","wordD","wordE"])

আপনি call map(a:words, 'a:firstpart . v:val . a:secondpart')এবং এর সাথে লুপ এড়াতে পারেন call append(line('.'), a:words)
অ্যান্টনি

যেহেতু আমি প্রায়শই খুব দীর্ঘ "ফার্স্ট পার্ট" এবং "সেকেন্ড পার্ট" এমনকি "থার্ড পার্ট" দিয়েও এ জাতীয় সম্পাদনা করি এবং এই অংশগুলিতে নতুন লাইন থাকতে পারে, তাই কমান্ড মোডে এটি টাইপ করতে খুব বেশি দীর্ঘ বলে মনে হয়, তাই সম্ভবত এটি আরও দৃin়প্রত্যয়ী নিবন্ধগুলিতে পাঠ্য ইঙ্ক করতে, তারপরে নিবন্ধ থেকে পাঠ্য উত্পন্ন করতে ফাংশন ব্যবহার করবেন?
social_loser

আমি প্রশ্নটি সম্পাদনা করেছি, এতে অনেক পরিবর্তন হয়েছে, অসুবিধার জন্য দুঃখিত।
social_loser

5

এই জাতীয় ক্ষেত্রে আমার কৌশলটি ভিন্ন হবে তবে এটি প্রায়শই নিম্নলিখিত পদক্ষেপগুলি অনুসরণ করে:

  1. অনন্য শব্দ (গুলি) লিখুন, উদাঃ

    wordA
    wordB
    ...
    wordK
    
  2. উভয় ক্ষেত্রেই

    ক) অনুসন্ধান করুন এবং প্রতিস্থাপন করুন, যেমন

    :%s/\w\+/similar text \0 similar text .../
    

    খ) বা ভিজ্যুয়াল ব্লক মোড ব্যবহার করুন, দেখুন :h blockwise-visual। বিশেষত, আমি শব্দগুলি নির্বাচন করব Iএবং সামনে অনুরূপ পাঠ্য সন্নিবেশ করানোর জন্য, বা Aপরে অনুরূপ পাঠ্য সংযোজন করতে ব্যবহার করব।

আমি যুক্তি দিয়ে বলব যে আপনি যখন এই ধরনের সম্পাদনার কাজ তুলনামূলকভাবে খুব কমই করেন তখন এই কৌশলটি বোধগম্য হয়। তবে, যদি আপনার মনে হয় এটি প্রায়শই করা প্রয়োজন, তবে আপনার @ স্টাটক্সের পরামর্শটি এমন একটি ফাংশন সহ অনুসরণ করা উচিত যা শব্দের তালিকাকে প্রসারিত করে।


আমি মনে করি শব্দটি তালিকাটি কোথা থেকে আসছে তার উপর সমাধান নির্ভর করে। যদি এটি কোনও ফাইল থেকে আসে, তবে :readআপনার প্রতিস্থাপনের পরে তা বোঝা যায়।
অ্যান্টনি

আপনার সমাধানটি করা সহজ এবং সমস্যাটি আমি মূল প্রশ্নে খুব সহজেই জিজ্ঞাসা করেছি solve তবে আমার মূল পোস্টে কিছু ভুল রয়েছে, আমি ২ টি সম্পাদনা করেছি এবং এটি অনেক পরিবর্তন হয়েছে, উত্তরের জন্য আপনাকে ধন্যবাদ, আমার পরিবর্তিত এবং খারাপ
ইংরেজিটির

@ সোসিয়াল_ল্লোজার আপনি বিকল্পটির প্রতিস্থাপন অংশে একটি নতুন লাইন দাঁড়ানোর জন্য "\ r" ব্যবহার করে এই সমাধানটি মানিয়ে নিতে পারেন
ফ্রেঙ্গিও

2

আমি যুক্তি দেব যে এটি ভিজ্যুয়াল ব্লকের ( Ctrl+ v) কাজ। প্রথমে আমি সমস্ত স্বতন্ত্র শব্দ লিখব:

wordA
wordB
wordC
wordD
wordE

প্রথমে কার্সার দিয়ে শুরু করে wআমি সম্পাদন করব:

<c-v>5j$yA <esc>pA <esc>p

আমি A <esc>pযতবার চাই তারপরে কয়টি কলামের প্রয়োজন তা আমি নিয়ন্ত্রণ করতে পারি। আসুন ধরে নেওয়া যাক উপরের শো অনুসারে ঠিক তিনটি কলামের দরকার ছিল। এখন আমাদের এটি আছে:

wordA wordA wordA
wordB wordB wordB
wordC wordC wordC
wordD wordD wordD
wordE wordE wordE

এবং কার্সারটি wordAপ্রথম লাইনে তৃতীয়টির শুরুতে । এরপরে আমি কলামগুলি পিছনে চলে যাওয়া এবং এর মাঝে পাঠ্যটি যোগ করার মধ্যবর্তী সাদা স্থানের কলামটি ব্লক করব। বর্তমান কার্সার অবস্থান থেকে:

h<c-v>5jI similar text 3<esc>

এর ফলাফল (% কার্সার অবস্থান চিহ্নিত করে):

wordA wordA%similar text 3 wordA
wordB wordB similar text 3 wordB
wordC wordC similar text 3 wordC
wordD wordD similar text 3 wordD
wordE wordE similar text 3 wordE

পরবর্তী কলামের জন্য পুনরাবৃত্তি:

bh<c-v>5jI similar text 2<esc>

এবং সর্বশেষ / প্রথম (বাম দিকে একটি) কলাম:

b<c-v>5jIsimilar text 1 <esc>

শেষ অবধি:

similar text 1 wordA similar text 2 wordA similar text 3 wordA
similar text 1 wordB similar text 2 wordB similar text 3 wordB
similar text 1 wordC similar text 2 wordC similar text 3 wordC
similar text 1 wordD similar text 2 wordD similar text 3 wordD
similar text 1 wordE similar text 2 wordE similar text 3 wordE

আপডেট: একটি স্ক্রিনকাস্ট যুক্ত হয়েছে

এখানে চিত্র বর্ণনা লিখুন


এটি অনেকগুলি টাইপিং বলে মনে হয় তবে এটি অভ্যস্ত হওয়া খুব সহজ। এটি আপনাকে শব্দের সংখ্যা, কলামগুলির সংখ্যা এবং এমনকি কলামগুলির মধ্যে ব্যবধানের পরিবর্তন করার স্বাধীনতা সরবরাহ করে।

অপূর্ণতাটি হ'ল আপনার ব্যবহার করা স্বতন্ত্র শব্দের সংখ্যা জানতে হবে । আমার 5উপরের সমস্ত কমান্ডগুলিতে একটি হার্ডকোড রয়েছে কারণ এটি কমান্ডগুলি সারি করে এমন সারিগুলির সংখ্যা।

ডিবাগিং নোট: সমস্ত কমান্ডগুলি স্বাভাবিক মোডে শুরু হয় এবং শেষ হয়, আপনি যদি কোনও আদেশের শেষে নিজেকে ভিজ্যুয়াল বা সন্নিবেশ মোডে খুঁজে পান তবে আপনি কিছু ভুল করছেন।

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