মূল শব্দটি টাইপ না করে কীভাবে ভিমে খুঁজে পাবেন এবং প্রতিস্থাপন করবেন?


53

আমি আমার ভিমে আমার "অনুসন্ধান এবং প্রতিস্থাপন" কর্মপ্রবাহকে অনুকূলিত করতে চাই। এটি আমি প্রায়শই করি, কারণ আমি নিশ্চিত যে আপনার বেশিরভাগই এটি করেন। সাধারণত এর লাইনের সাথে কিছু - একটি ব্লক অনুলিপি করুন এবং কয়েকটি স্থানে একটি ভেরিয়েবলের নাম পরিবর্তন করুন। আমি জানি, আমি জানি, এটি সম্ভবত আপনার "কেন আপনি অনুলিপি করছেন এবং কোডটি আটকে দিচ্ছেন" রিফ্লেক্সকে ট্রিগার করে, তবে আসুন আমরা সেই রাস্তায় নামি না ... প্রচুর বৈধ ব্যবহারের মামলা রয়েছে :)

আমি অনুসন্ধান সম্পর্কে ভালভাবে অবহিত এবং আদেশগুলি প্রতিস্থাপন: :sবা :%sআমি তাদের পছন্দ করি না। এটি আমাকে অনুসন্ধান করছে এমন পুরো ভেরিয়েবলের নাম এবং এটিতে আমি কী পরিবর্তন করছি তা উভয়ই টাইপ করতে বাধ্য করে। টাইপিংয়ের পরিমাণ ঠিক করার জন্য আরও ভাল কোনও উপায় থাকতে পারে :%s? আমি প্রায়শই দীর্ঘ বর্ণনামূলক ভেরিয়েবলের নাম ব্যবহার করি, তাই এটি আমার পক্ষে সত্যিকার অর্থে একটি চুক্তি ভঙ্গকারী। আমি এও পছন্দ করি না যে স্ক্র্যাচ থেকে কোনও পরিবর্তনশীল নাম টাইপ করা টাইপো প্রবণ এবং টাইপসগুলিতে শিকার করতে সময় এবং ব্রেণ শক্তি প্রয়োগ করতে পারে। আমি একবার এটি টাইপ করতে পছন্দ করি এবং তারপরে অনুলিপি করা ও পাস্ট করা সম্ভব যদি সম্ভব হয় তবে এটি সম্পূর্ণ এড়ানো যায়।

আমার বর্তমান ওয়ার্কফ্লোটি ফাইলের চারপাশে সরানোর জন্য এবং একের পর এক প্রতিস্থাপনের জন্য কিছু আন্দোলন / ইয়াঙ্ক / নির্বাচন / অনুসন্ধান / পুটের সংমিশ্রণ ব্যবহার করে। এটি দুর্দান্ত নয় তবে সম্পূর্ণ ভেরিয়েবলের নাম টাইপ করা এড়িয়ে যাওয়ার সুবিধা রয়েছে। আমার কেবল প্রথম কয়েকটি অক্ষর টাইপ করতে হবে /বা অন্য মুভমেন্ট কমান্ডটি ব্যবহার করতে হবে (উদাহরণস্বরূপ fx) যা কিছু রয়েছে তার উপর নির্ভর করে এবং পরে veপুরো শব্দটি নির্বাচন করতে আঘাত করুন। আমি এও মনে করি না যে প্রতিবারের জন্য আমাকে পুনরাবৃত্তি করতে হবে। আমি প্রতিটি পরিবর্তন নিশ্চিত না করে একটি সম্পূর্ণ অনুসন্ধান প্রতিস্থাপন করি না। তবে আমি একক কী-স্ট্রোক (যা আমি এই পদ্ধতিতে করতে পারি না) এর মাধ্যমে প্রতিস্থাপনের ক্রিয়াটি পুনরাবৃত্তি করতে পারলে এটি অনেক বেশি পছন্দনীয়। প্রতিটি প্রতিস্থাপন সাধারণত ভালো কিছু হয় nতারপর veতারপর p(অথবা এমনকি খারাপ "0p)

একটি দ্রুত উপায় আছে কি?


1
.সর্বশেষ "কমান্ড ব্লক" পুনরাবৃত্তি করে (সঠিক শব্দটির বিষয়ে নিশ্চিত নন example উদাহরণস্বরূপ: সরান + ক্রিয়া + পাঠ্য। উদাহরণ হিসাবে: cwtoto<Esc>("টোটো" দিয়ে শব্দের শেষে কার্সার থেকে পরিবর্তন করুন)), c/foo<enter>bar<Esc>(কার্সার থেকে ঠিক আগে পরিবর্তন করুন " foo ", এবং" বার "এর সাথে প্রতিস্থাপন করুন) আপনি তারপরে (কার্সার, hjkl, বা একটি সংখ্যা + hjkl দিয়ে (এটি n বার করে)), জি (ফাইলের শেষে যেতে পারেন), / কিছু (সামান্য আগে যেতে" কিছু ") ইত্যাদি) এবং তারপরে .একই" কমান্ড ব্লক "পুনরায় করতে টিপুন
অলিভিয়ার ডুলাক

আমি এটি বেশ খানিকটা ব্যবহার করি! যাইহোক, আপনি কোনও শব্দ ইঁকতে চান এবং তারপরে একাধিক জায়গায় এর সাথে অন্য একটি শব্দ প্রতিস্থাপন করতে চান তা কার্যকর হয় না। এটিই মূল ব্যবহারের ক্ষেত্রে আমার সমস্যা হয় এবং এর মতোই কিছু ঘটে n ve "0p। দুর্ভাগ্যক্রমে যা কেবল একটি দিয়ে প্রতিলিপি করা যায় না.
জোয়েল

5
n ce ctrl-r 0 <esc> n.n.n.n.n.n.
ধনী

@ জোয়েল আপনি একটি ম্যাক্রোও রেকর্ড করতে পারেন (কিউএর পরে আপনি যা চান তার সবকিছুর পরে Q: ম্যাক্রো এ তৈরি করে) এবং তারপরে ব্যবহার করুন: @ এ এটি পুনরায় খেলতে (এবং, যথারীতি, 134 বার এটি করতে 134 বার)। ম্যাক্রো যেমন প্রয়োজন তেমন বিস্তৃত হতে পারে (উদাহরণস্বরূপ: কিছু সন্ধান করুন, যথাস্থানে চলে যান, তারপরে শব্দটি পরিবর্তন করুন, তারপরে আরও ভাল অবস্থানে পুনরায় ডাক পেতে সক্ষম হওয়ার জন্য যথাযথ জায়গায় চলে যান)
অলিভিয়ার ডুলাক

1
আমি সাইটের অন্য কোনও প্রশ্নের চেয়ে এই প্রশ্নটি থেকে আরও দরকারী ভিআইএম ট্রিকস শিখেছি। ধন্যবাদ!
dotancohen

উত্তর:


81

আমার আসলে আপনার কাছে বেশ একইরকম একটি ওয়ার্কফ্লো আছে, (একইরকম ব্লকগুলি অনুলিপি করে আটকানো, তারপরে :sভেরিয়েবলের নাম পরিবর্তন করতে ব্যবহার করে ) বিশেষত যখন আমি প্রচুর লাইন লিখি যা তারা ব্যবহার করে তবে এই পরিবর্তনশীলটি বাদে similar তবে আমি কয়েকটি জিনিস করেছি যা আপনি দরকারী মনে করতে পারেন।

সাধারণ ভিম জিনিস

  1. প্রথম জিনিস আপনি সাহায্য করবে বুঝতে হয় যে :s//foo/gযাই হোক না কেন অনুসন্ধান শব্দ আপনি শেষ ব্যবহার পূরণ করুন এবং প্রতিস্থাপন যে সঙ্গে হবে foo বিন্যাস । এটি একা অনেক সময় সাশ্রয় করতে পারে তবে আপনি যখন এটিটি অ্যাসিস্টিক কমান্ডের সাথে যুক্ত করেন (বর্তমান কার্সারের নীচে শব্দটির সন্ধান করুন) এটি প্রচুর সময় সাশ্রয় করে। উদাহরণ হিসেবে বলা যায়, সব পরিবর্তন করতে fooকরতে spamপরিবর্তে করছেন

    :%s/foo/spam/g
    

    যার জন্য আপনাকে ফু এবং স্প্যাম উভয়ই টাইপ করতে হবে (যা দীর্ঘ পরিবর্তনশীল হতে পারে), আপনি কেবল foo এ নেভিগেট করতে পারেন এবং করুন:

    *:%s//spam/g
    

    এইভাবে, আপনি অনুসন্ধানের মাধ্যমে আপনি যে পরিবর্তনশীলটি পরিবর্তন করছেন তার নামটি আপনি দ্রুত খুঁজে পেতে পারেন, তারপরে আপনাকে এটিকে টাইপ করার প্রয়োজন হবে না। এটি আপনার nপ্রচুর ব্যবহারের কার্যপ্রবাহের সাথেও দুর্দান্তভাবে কাজ করবে । এটি hlsearchচালিয়ে যাওয়াও সহায়ক , কারণ এরপরে আপনি ভেরিয়েবলগুলি প্রতিস্থাপন করছেন কোথায় তা আপনি দৃষ্টি দিয়ে দিতে পারেন।

    (সাইড নোট: তারকাচিহ্ন কমান্ড শব্দ সীমানা যোগ হবে, যে হয় \<এবং \>কার্সার অধীনে শব্দ প্রায় এই না চান তাহলে, ব্যবহার করুন। g*পরিবর্তে।)

  2. আমি একক কীস্ট্রোক দিয়ে প্রতিস্থাপনের ক্রিয়াটি পুনরাবৃত্তি করতে পারলে এটি অনেক ভাল fe

    আপনি @:সর্বশেষ বিকল্প কমান্ডটি পুনরায় করতে ব্যবহার করতে পারেন । এটি বেশ ভাল যদি আপনি :sপ্রচুর লাইনে একটি কমান্ড করতে চান তবে তাদের সমস্তটি কার্যকর হয় :%sনা। আর একটি বিকল্প হল নিশ্চিতকরণ পতাকা, অর্থাত্‍ :%s///gc। এটি আপনাকে টাইপ করতে yবা nপ্রতিটি ঘটনায় সিদ্ধান্ত নিতে অনুমতি দেবে আপনি এটি প্রতিস্থাপন করতে চান কিনা।

    ডাস্টি যেমন উল্লেখ করেছেন , আপনি &সর্বশেষ বিকল্প কমান্ডটি পুনরায় চালাতেও করতে পারেন , তবে মনে রাখবেন যে এটি আপনার পতাকাগুলি রাখবে না (যেমন globalবা confirm)। তা ভাল বা খারাপ আপনার ব্যক্তিগত মতামতের উপর নির্ভর করে। আপনি যদি এটি ব্যবহার করতে চান তবে এটি আপনার পতাকাও রাখে, আপনি করতে পারেন

    nnoremap & :&&<cr>
    
  3. আপনি যদি কোনও ব্লকের প্রতিটি উপস্থিতি পরিবর্তন করতে চান তবে ফাইলের প্রতিটি ম্যাচ নয়, আপনি সর্বদা ব্লকের একটি ভিজ্যুয়াল নির্বাচন ব্যবহার করতে পারেন যা পূরণ করবে

    :'<,'>
    

    আপনার বিকল্পের জন্য, যা এটি আপনার নির্বাচিত লাইনে সীমাবদ্ধ করে। যখন তারকাচিহ্ন পদ্ধতির সাথে একত্রিত হয়, আমি এটি অত্যন্ত কার্যকর বলে মনে করি। তদ্ব্যতীত, যদি আপনি একই লাইনগুলির একই ব্লকে একাধিক বিকল্প কমান্ড তৈরি করে থাকেন তবে আপনি gvঅন্য কমান্ডটি করতে একই লাইনগুলি পুনরায় নির্ধারণ করতে ব্যবহার করতে পারেন । (এটি কোনও :substituteবা সাধারণ আদেশ হোক)

    আপনি যদি অন্য একটি বিকল্প কমান্ড করেন তবে আপনাকে একই রেখাগুলি পুনরায় নির্ধারণের প্রয়োজন হবে না , কারণ :'<,'> এখনও একই লাইনে কাজ করবে। তবে এটি টাইপ করা আরও সুবিধাজনক

    gv:s
    

    বরং

    :'<,'>s
    

প্লাগিনগুলি / ম্যাপিংগুলি আমি পছন্দ করি

  1. আমার নীচে নীচের ম্যাপিং রয়েছে .vimrcযা তারকাচিহ্ন পদ্ধতির প্রসারিত করে যাতে আমাকে কেবল নতুন পছন্দসই নামটি টাইপ করতে হয়:

    "(R)eplace all
    nnoremap <leader>r yiw:%s/\<<C-r>"\>//g<left><left>
    

    এটি ব্যবহার করার জন্য, আপনি যে শব্দটি পরিবর্তন করতে চান তাতে আপনার কার্সারটি লিখুন <leader>rNewVarName<cr>এবং টাইপ করুন এবং আপনার কাজ শেষ। নোট করুন যে এটি আপনাকে নিশ্চিত করার জন্য একটি বিকল্প না দিয়ে সমস্ত মিলকে প্রতিস্থাপন করবে, তাই আপনি এটি এতটা পছন্দ করতে পারেন না। অবশ্যই, আপনি কেবল এটিতে পরিবর্তন করতে পারেন

    nnoremap <leader>r yiw:%s/\<<C-r>"\>//gc<left><left><left>
    

    কনফার্ম অপশনের অনুমতি দেওয়ার জন্য।

    সম্পাদনা : উভয় গণের উত্তর এবং rcorre মন্তব্য অনুসরণ করে , আপনি এই হিসাবে লিখতে পারে

    nnoremap <leader>r :%s/\<<C-r><C-w>\>//g<left><left>
    

    আপনার নামবিহীন নিবন্ধটিকে একই রাখার সুবিধা রয়েছে।

  2. যদি আপনি একই সময়ে একই ধরণের ভেরিয়েবলগুলির গোষ্ঠীগুলির নামকরণ করেন, উদাহরণস্বরূপ, পরিবর্তন করা

    fooSuffix
    PrefixFoo
    foo1
    SHOUTINGFOO
    

    প্রতি

    barSuffix
    PrefixBar
    bar1
    SHOUTINGBAR
    

    স্বতন্ত্রভাবে তাদের সকলকে বিকল্প হিসাবে নেওয়া ব্যথা হতে পারে। এখানেই টিপোপ / ভিম-বিলোশ কার্যকর হয়। আপনি এই সমস্তগুলি একটি কমান্ডের সাথে প্রতিস্থাপন করতে পারেন:

    :%S/foo/bar/g
    

    এবং এটি আপনার জন্য মূলধনের যত্ন নেয়।

এগুলি আপনাকে অনেক সহায়তা করতে পারে তবে এই পদ্ধতির কোনও পছন্দ নেই যা আপনি পছন্দ করেন না বা অনুভব করছেন না সে সম্পর্কে কিছু আছে কিনা তা আমাকে জানান। আমি আরও পন্থা সম্পর্কে কথা বলতে খুশি। :)


প্রস্তাবিত পঠন:


ওহ আমি এখানে বেশ কয়েকটি জিনিস শিখেছি। নিস! আপনি নিতে পারেন এমন বিকল্প পদ্ধতি <leader>rc(বা cr) /cশেষে এটি যুক্ত করা। এছাড়াও, আমি set gdefaultসেট করে রেখেছি , কারণ আমি কখনই কোনও একক ফলাফল প্রতিস্থাপন করতে চাই না, তাই এটি ঠিক হবে yiw:%s/\<<C-r>"\>//<left><left>
ওয়েন ওয়ার্নার

2
কি দুর্দান্ত উত্তর!
স্কট লুন্ডবার্গ

2
আপনি যদি ctrl+r-ctrl+wম্যাপিংটিতে ব্যবহার করেন (@ ম্যাসের পরামর্শ অনুসারে) এটি একই কাজ করা উচিত তবে আপনার ইয়ঙ্ক রেজিস্টার (যা কাঙ্ক্ষিত হতে পারে বা নাও হতে পারে) নিয়ে
গোলমাল করবেন

1
আপনি হাইলাইট করা টেক্সটগুলির ব্লকগুলির সাথে কাজ করার সময় একটি জিনিস মনে রাখবেন (কাটিং / ইয়াঙ্কিং ইত্যাদির আগে) আপনি সর্বশেষ হাইলাইট করা পাঠকে পুনরায় হাইলাইট করতে সাধারণ মোডে জিভি প্রবেশ করতে পারবেন।

1
আমি github.com/hauleth/sad.vim প্লাগইন লিখেছি যা পদ্ধতি 2 এর অনুরূপ কাজ করে h হোভওয়ার আপনাকে .আরও বিকল্পগুলি সম্পাদন করতে অনুমতি দেয় ।
হাউলেথ

20

c_CTRL-Rমানচিত্রগুলি পরিবার আপনার কর্মপ্রবাহ বেশ একটু উন্নত করতে পারবেন:

  1. :s/ব্যবহার CTRL-R CTRL-Wকরার সময় আপনার পরিবর্তনশীল নামগুলি লিখতে হবে না , কেবলমাত্র কমান্ড লাইনে কার্সারের নীচে শব্দটি সন্নিবেশ করানোর জন্য ব্যবহার করুন (ক্যাভিয়েট: এটি বিশেষ অক্ষরগুলি যেমন এড়িয়ে যায় না *) does

  2. ব্যবহার করে একটি ছোট পরিবর্তন করার পরে ce, আপনি ব্যবহার করে পুরানো শব্দটি অনুসন্ধান করতে পারেন / CTRL-R -। তারপরে .পরিবর্তনের পুনরাবৃত্তি করতে ব্যবহার করুন ।

  3. আপনার যদি অনুসন্ধানের প্যাটার্নে পরিবর্তন করতে CTRL-R /হবে তবে বিদ্যমান অনুসন্ধানটি কমান্ড লাইনে স্থাপন করবে।

  4. অবশেষে, আপনি ব্যবহার করে যে কোনও নিবন্ধের বিষয়বস্তু রাখতে পারেন CTRL-R {register}


ভাল যুক্তি! আমি সবসময় সিটিআরএল আর সম্পর্কে ভুলে যাই I'll আমি এটিও কাজ করতে পারি কিনা তা আমি দেখতে পাচ্ছি।
জোয়েল

2
বিশেষভাবে উল্লেখযোগ্য Ctrl-R /? আমি প্রায়শই :sকমান্ডগুলিতে এটি ব্যবহার করি যদি আমি কোনও অনুসন্ধান শব্দটি ব্যবহার করতে চাই যা প্রায় তবে আগেরটির মতো পুরোপুরি ঠিক একইরকম না হয়।
ধনী

12

আরও কয়েকটি পদ্ধতি রয়েছে যা (আমার আশ্চর্য!) এখনও উল্লেখ করা হয়নি।

gnকমান্ড ব্যবহার করে

gnnকমান্ডের মতো কাজ করে , ম্যাচে ঝাঁপ দেওয়া ছাড়াও এটি পুরো ম্যাচটি বাছাই করে ভিজ্যুয়াল মোডে প্রবেশ করে।

সুতরাং কোনও শব্দ পরিবর্তন করতে (বা কোনও কিছু যা আপনি নিয়মিত অভিব্যক্তির সাথে মিল করতে পারেন!) প্রথমে এটি অনুসন্ধান করুন 1 , এবং তারপরে cgnআপনি যে পাঠ্যটি ম্যাচটির সাথে প্রতিস্থাপন করতে চান এবং Escস্বাভাবিক মোডে ফিরে যেতে চান তারপরে টিপুন ।

(আপনি উল্লেখ করেছেন যে কখনও কখনও আপনি যে প্রতিস্থাপন পাঠ্যটি ব্যবহার করতে চান তা "0ইয়াঙ্ক রেজিস্টারে সংরক্ষিত থাকে - নোট করুন যে আপনি Ctrl+R0সন্নিবেশ মোডে টিপে পুনরায় টাইপ না করে দ্রুত এটিকে প্রবেশ করতে পারেন ।)

এর পরে আপনি কি আগামী ম্যাচে সুযোগ তিড়িং লাফ পারেন এবং একটি একক দিয়ে পরিবর্তন পুনরাবৃত্তি .কীস্ট্রোক!

যদি এমন কোনও জায়গা থাকে যেখানে আপনি প্রতিস্থাপন করতে চান না , কেবল unপরিবর্তনটি পূর্বাবস্থায় ফেলার জন্য চাপুন এবং পরবর্তী ম্যাচে ঝাঁপিয়ে পড়ুন।

1: দ্রুত, এই পৃষ্ঠায় অন্যান্য পরামর্শ ব্যবহার করে , ইত্যাদি ইত্যাদি ব্যবহার করে *, কীভাবে প্রাথমিকভাবে আপনার সন্ধানকে জনপ্রিয় করতে হবে সে সম্পর্কে আরও পরামর্শের জন্য পিটার রিনকারের মন্তব্যওCtrl+RCtrl+W দেখুন ।

নির্বাচন মোড ব্যবহার করে

(আমি থেকে এই শিখেছি romainl এর তেজ subreddit পোস্ট । আমি জানি না সে নিজে রচনা বা শুধু এটা ক্ষণস্থায়ী ছিল।)

নির্বাচন মোডটি কিছুটা ভিজ্যুয়াল মোডের মতো, আপনি যদি টাইপ করা শুরু করেন তবে আপনি যা টাইপ করেন তা সঙ্গে সঙ্গে প্রতিস্থাপন করা হয় (যেমন বেশিরভাগ অন্যান্য সম্পাদকদের মধ্যে নির্বাচন কীভাবে কাজ করে)।

আপনি ম্যাপিংয়ের এই ত্রয়ীটিকে খুব দ্রুত সন্ধান / প্রতিস্থাপন করতে ব্যবহার করতে পারেন, যা আপনি যদি প্রয়োজন হয় তবে মাঝের ফাইলটি পরিবর্তন করতে পারেন:

nnoremap § *``gn<C-g>
inoremap § <C-o>gn<C-g>
snoremap <expr> . @.

সাধারণ মোড ম্যাপিং : নির্বাচিত কার্সারটির নিকটবর্তী শব্দটি সহ নির্বাচন মোডে প্রবেশ করে।

তারপরে আপনি নির্বাচিত শব্দের জন্য আপনার প্রতিস্থাপনটি টাইপ করতে পারেন এবং ( টিপে না রেখে Esc) এটি ব্যবহার করতে পারেন:

মোড ম্যাপিং সন্নিবেশ করান : পরের ম্যাচে লাফ দেয় এবং নির্বাচন মোডে প্রবেশ করে।

তারপরে আপনি হয় নতুন প্রতিস্থাপন টাইপ .করতে পারেন বা ব্যবহার করতে টিপতে পারেন:

মোড ম্যাপিং নির্বাচন করুন : সর্বশেষ সন্নিবেশ করা পাঠ্যটি পুনরায় প্রবেশ করে - মূলত, সর্বশেষ সন্নিবেশ পুনরাবৃত্তি করে।


আমি gnআমার উত্তরটির শেষে পদ্ধতিটি উল্লেখ করেছি vi.stackexchange.com/a/13696/488 এর মূল্য কী! যদিও আপনার উত্তরের অনেক ভাল ফর্ম্যাটিং রয়েছে।
ট্যাঙ্কোরস্যামশ

1
@ ট্যাঙ্কোরস্যামশ তাই আপনি করেছেন! আমি কীভাবে এটি মিস করেছি তা নিশ্চিত করুন। নোট করুন যে আমি যে প্রকৃত পদ্ধতিটি ব্যবহার করছি তা আপনার থেকে আলাদা, যদিও (আমি কেবল gnএকবারই প্রার্থনা করি ), এবং এটি নির্দিষ্ট পদ্ধতি, (কেবলমাত্র gnকমান্ডের চেয়ে ) অবাক হয়েছিল যা এখনও অবধি উল্লেখ করা হয়নি।
ধনী

আমি থাকার পরামর্শ দিচ্ছি কিছু এর "চাক্ষুষ তারকা" প্লাগইন সঙ্গে ব্যবহার করার জন্য gn। আপনাকে আরও অনুসন্ধানের বিকল্প দেয়। দরিদ্র মানুষের চাক্ষুষ তারকা ম্যাপিং: xnoremap * :<c-u>let @/=@"<cr>gvy:let [@/,@"]=[@",@/]<cr>/\V<c-r>=substitute(escape(@/,'/\'),'\n','\\n','g')<cr><cr>। সম্পর্কিত ভিমকাস্ট পর্ব: জিএন ব্যবহার করে অনুসন্ধানের ম্যাচগুলিতে অপারেটিং
পিটার রিনকার

1
আমি প্লাগিন তৈরি করেছি sad.vim যা এই জাতীয় প্রবাহে সহায়তা করে।
হাউলেথ

7

প্লাগইন https://github.com/terryma/vim-m Multipleple- cursors বেশিরভাগ অংশের জন্য এই সমস্যার যত্ন নেয়।

আমার কর্মপ্রবাহ সাধারণত:

  1. কার্সারটি প্রতিস্থাপনের জন্য শব্দটিতে সরান।
  2. ctrl-nযতক্ষণ না সব কিছু নির্বাচিত হয় Hold
  3. টিপুন cএবং প্রতিস্থাপন টাইপ শুরু করুন।

এখানে সুবিধাজনক জিনিসটি হ'ল আপনি সন্ধান-প্রতিস্থাপনের চেয়ে আরও জটিল ক্রিয়াকলাপগুলি করতে পারেন, যদিও আমি দেখতে পেয়েছি যে আপনি যদি এটি খুব বেশি দূরে নিয়ে যান তবে প্লাগইনটি কিছু বিভ্রান্তি দেখাতে শুরু করে।


4

এখনও যে বিষয়গুলি উল্লেখ করা হয়নি সেগুলি করার আরেকটি উপায়: আপনি কমান্ড-লাইন উইন্ডোটি ব্যবহার করতে পারেন ( q:সাধারণ মোডে খোলা হয়েছে - :help q:আরও তথ্যের জন্য দেখুন), যাতে আপনার ভিমের স্বতঃপূরণ বৈশিষ্ট্যগুলিতে ( i_CTRL-N/ i_CTRL-Pএবং বিভিন্ন i_CTRL-Xঅনুক্রমের ) সম্পূর্ণ অ্যাক্সেস রয়েছে তাদের মধ্যে থাকা)।

কমান্ড-লাইন উইন্ডোতে আপনি কমান্ড লাইনটি সম্পাদনা করতে নরমাল-মোড কমান্ডগুলিও ব্যবহার করতে পারেন, উদাহরণস্বরূপ, এর অর্থ হল আপনি আপনার কমান্ড-লাইনের ইতিহাসে পূর্ববর্তী কমান্ডের কিছু অংশগুলি ইয়াঙ্ক এবং পেস্ট করতে পারেন।

মনে রাখবেন যে আপনার কার্সারটি ব্যবহার করার সময় কমান্ড-লাইন উইন্ডোতে স্থানান্তরিত হবে, এর অর্থ CTRL-R CTRL-Wএবং একইরকম পদ্ধতিতে যা কার্সারের নীচে পাঠ্য সন্নিবেশ করা জড়িত সেখানে নিয়মিত কমান্ড লাইনের বিপরীতে কাজ করবে না।


1
আপনি ইতিমধ্যে আপনার :substituteকমান্ডটি প্রবেশ করার মধ্য দিয়ে <ctrl-f>
রিচ

2

আমার সমাধান অন্যান্য উত্তরগুলির মধ্যে এর সমাধান কিছুটা in

বলুন যে আপনি 6 টি অভিন্ন লাইন পেয়েছেন এবং আপনি মাঝের দুটিতে 'আপেল' প্রতিস্থাপন করতে চান:

I have apples for days
I have apples for days
I have apples for days
I have apples for days
I have apples for days
I have apples for days

আমি যা করি তা হ'ল:

  1. আমি যে পাঠ্যটি প্রতিস্থাপন করতে চাই তার শুরুতে পেয়েছি, 'অ্যাপল'
  2. vভিজ্যুয়াল মোডে পেতে হিট করুন
  3. আমি প্রতিস্থাপন করতে চান সর্বশেষ শব্দে যান, এই ক্ষেত্রে কয়েক লাইন তাই 2j
  4. :s/<C-R><C-W>/যা ভিজ্যুয়াল নির্বাচনটি এর ব্যাপ্তি হিসাবে ব্যবহার করে :sএবং তারপরে কার্সারের নীচে শব্দটি সন্নিবেশ করে
  5. আমি আঘাত করেছি <C-F>যা আপনাকে এমন একটি মোডে রাখে যেখানে আপনি নিজের আদেশটি সম্পাদন করতে পারবেন যেন এটি কোনও বাফার। সুতরাং আপনি প্রতিস্থাপন শব্দটি চয়ন করতে চান যা কিছু সমাপ্তি বা প্লাগইন ব্যবহার করতে পারেন এবং আপনি হয়ে গেছেন।

সমস্ত এক লাইনে, এর জন্য প্রবাহ হবে /apples<CR>2nv/apples<CR>nn:s/<C-R><C-W/oranges<CR>তবে এটি তার চেয়ে খারাপ দেখাচ্ছে।

আপনার ক্ষেত্রে, আপনি সংযুক্ত করতে পারবেন /cকরার :sকমান্ড বেশী কি আপনি চান না এড়িয়ে যেতে, যদি আপনার পরিসীমা কয়েক আপনি এড়িয়ে যেতে চান রয়েছে: :s/<C-R><C-W/orange/c

বিকল্পভাবে (এবং সম্ভবত কেবল), আপনি সমগ্র যে শব্দটি আপনি প্রতিস্থাপন করতে চান, জন্য অনুসন্ধান করতে পারে cএটি hange, তারপর gnএবং .অনুসন্ধান পুনরাবৃত্তি এবং একই পরিবর্তন আবার প্রযোজ্য হবে। এটি /\<apple\><CR>viwcorange<ESC>gn.gn.gn..ngn.এটি তিনটি পুনরাবৃত্তি করার মতো মনে হবে, তারপরে একটি উদাহরণ এড়িয়ে যান, তারপরে এটি শেষ বারে পুনরাবৃত্তি করুন।


আপনি শেষে যে পদ্ধতিটি বর্ণনা করেছেন তা আমার পক্ষে কার্যকর হয় না (ভিম .4.৪ এ, এর সাথে অনুরোধ করা হয়েছিল vim -Nu NONE)। আমি প্রথম টিপলে এটি কেবল বীপ্স হয় .। কোন ধারণা কেন? যাই হোক, এটি ব্যবহার করার জন্য সহজ হবে ciwপরিবর্তে viwএবং nপরিবর্তে gnএই ভাবে পরিবর্তন করতে।
ধনী

2

এটি পুরোপুরি প্রশ্নের সাথে সম্পর্কিত নয়, তবে প্রতিস্থাপনের জন্য শব্দটি নির্বাচন করতে এখনও সহায়তা করা উচিত।

বর্ধিত অনুসন্ধান ( set incsearch) আপনাকে যে শব্দটির সন্ধান করতে হবে তার উপসর্গটি টাইপ করতে দেয় এবং আপনি আরও বেশি টাইপ করার সাথে ভিম স্বয়ংক্রিয়ভাবে উপসর্গের প্রথম উপস্থিতিতে চলে যাবে। আপনি এন্টার টিপলে এবং এসসি-তে ফেলে দিলে অনুসন্ধানটি নিশ্চিত হয়ে যাবে (পরবর্তী ক্ষেত্রে কার্সারটি অনুসন্ধান শুরু হওয়ার আগে যেখানে ছিল সেখানে ফিরে যাবে)।

তবে, ইনক্রিমেন্টাল অনুসন্ধান আরও একটি দরকারী বৈশিষ্ট্য সরবরাহ করে। আপনি যখন ইতিমধ্যে একটি শব্দের উপসর্গটি টাইপ করেছেন এবং কার্সরটি সঠিক অবস্থানে রয়েছে <C-L>তখন কার্সারের নীচে শব্দটি থেকে অনুসন্ধানের স্ট্রিংয়ে অক্ষর যুক্ত করতে টিপুন । এটি আপনাকে প্রায় কোনও কীস্ট্রোক না দিয়ে প্রতিস্থাপিত স্ট্রিংয়ে প্রবেশ করতে দেয়।

সুতরাং, আমি যদি someOddVariableNameসাথে প্রতিস্থাপন করতে চান evenOdderVariableName, আমি

  1. টাইপ করুন /someOddVএবং উপস্থিতিতে উপস্থিত someOddVariableName;
  2. সম্পূর্ণভাবে অনুসন্ধান লাইনে উপস্থিত না <C-L>হওয়া পর্যন্ত টিপুন এবং ধরে রাখুন someOddVariableName;
  3. অনুসন্ধান নিশ্চিত করতে এন্টার টিপুন;
  4. :%s//evenOdderVariableName/gবা যে কোনও প্রয়োজন প্রতিস্থাপন কমান্ড; আপনি এখানে অন্যান্য উত্তর অনুসরণ করতে ইচ্ছুক হতে পারে।

2

আপনি পরিবর্তনশীল নামটি প্রথমে বাফারে রাখতে পারেন ( ywএকটি শব্দ অনুলিপি করতে), তারপরে :%sআঘাত করে এটি অনুলিপি করুন <C-r>"


2

আপনি যদি নতুন (আটকানো) ব্লকের মধ্যে কোনও ভেরিয়েবল প্রতিস্থাপন করতে চান তবে আমার কাছে দুটি পরামর্শ রয়েছে:

স্বয়ংক্রিয় প্রতিস্থাপন

  • নতুন ব্লকের প্রথম লাইনে যান, আঘাত করুন ma। এটি কোনও অবস্থান চিহ্নিত করে নামকরণ করছে a

  • নতুন ব্লকের শেষ লাইনে যান, আঘাত করুন mb। এখন আপনার দুটি নামকরণ করা অবস্থান রয়েছে।

  • এখন প্রতিস্থাপন মধ্যে তাই মত, দুই লাইন: :'a,'bs/oldVarName/newVarName/g

  • অর্থাৎ, প্রতিস্থাপনের সুযোগটি আপনার দুটি চিহ্নের মধ্যে।

ম্যানুয়াল উপায়

  • নতুন ব্লকের প্রথম লাইনে যান।

  • /oldVarNameএর প্রথম উদাহরণটি খুঁজে পেতে ব্যবহার করুন oldVarName

  • এটি এর মতো cwnewVarName<Esc>পরিবর্তন করুন newVarName:, যা শব্দটি এবং পাল্টা মারার পাল্টে দেবে ।

  • এর nপরবর্তী উদাহরণে যেতে ব্যবহার করুন oldVarName

  • .শেষ পরিবর্তনটির পুনরাবৃত্তি করতে ব্যবহার করুন (যেমন পুনরাবৃত্তি করে cw)।


2

এখানের অন্যান্য উত্তরগুলির মধ্যে অনেকগুলি ইতিমধ্যে বিল্ডটি কভার করে এবং প্রতিস্থাপনের কর্মপ্রবাহকে উন্নত করতে পারে তবে আমি টিম পোপের একটি প্লাগইন abolish.vim উল্লেখ করতে চেয়েছিলাম । এটি প্রতিস্থাপন করে যেখানে আপনি বিস্তৃত কেসগুলি কভার করতে চান যেখানে সাধারণত ক্ষেত্রে বিভিন্নতার কারণে ঘটে থাকে বা কারণ আপনাকে কোনও শব্দের একবচন এবং বহুবচন উভয়রই মোকাবেলা করতে হবে।

:S/child{,ren}/adult{,s}/gসঠিকভাবে পরিবর্তিত childকরতে adult, Childrenকরতে Adultsএবং CHILDকরতে ADULT

যদি আপনি উটের কেসযুক্ত শব্দগুলি নিয়ে কাজ করে থাকেন তবে আপনার মূল এবং প্রতিস্থাপন শব্দের ক্ষেত্রে আপনার যে রাজধানীগুলি প্রয়োজন তাদের অন্তর্ভুক্ত করতে হবে।

%:S/wordWrap/textBreak/gসঠিকভাবে উভয় wordWrapএবং পরিচালনা করে wordwrap


0

অন্যরা ইতিমধ্যে চিহ্নিত করেছে, আপনি যদি আপনার শব্দের উপরে আপনার কার্সারটি অবস্থান করে থাকেন তবে আপনি Ctrl + r পরিবার ব্যবহার করতে পারেন, সম্ভবত Ctrl + r Ctrl + w ব্যবহার করা সবচেয়ে উপযুক্ত।

এই পদ্ধতিটি কেবল একটি শব্দ সন্নিবেশ করানোর জন্য কাজ করে (কার্সারের ঠিক নীচে একটি শব্দ) তবে আমরা যদি ব্যবহার করতে চাই বাফারে পাঠ্যের বেশ কয়েকটি অংশ থাকে তবে কী হবে? আপনি কমান্ড লাইনে থাকার সময় আপনার কার্সারটি সরিয়ে ফেলতে পারবেন না। এটি করার সর্বোত্তম উপায় হ'ল পাঠ্যের অংশগুলি বিভিন্ন রেজিস্টারে অনুলিপি করা, যা আপনি কপি অপারেটরের কাছে "{reg_letter} (নিবন্ধ এবং রেজিস্ট্রারের চিঠি) উপস্থাপন করে করতে পারেন This এইভাবে এটি সম্ভব হবে কমান্ড লাইনে পরে Ctrl + r {reg_letter with দিয়ে বিভিন্ন শব্দ সন্নিবেশ করুন এটি কিছুটা বিশ্রী হলেও কাজ করে।

তবে পূর্ববর্তী ধারণায় ফিরে আসা, এটি দুর্দান্ত হবে যদি আমরা একটি প্যাটার্ন লেখার সময় বাফারের উপর দিয়ে কার্সারের অবস্থানটি সরিয়ে ফেলি। এইভাবে আমরা Ctrl + r Ctrl + w এর সাথে বিভিন্ন অবস্থান থেকে পাঠ্য "বাছাই" করতে পারি, তাই আমি একটি প্লাগইন তৈরি করেছি যা কেবল এটি করে: এক্সটেন্ড.ভিম প্লাগইনে বিকল্প প্রতিস্থাপনের জন্য আরও অনেকগুলি বৈশিষ্ট্য রয়েছে।

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