আমি কি একটি ইন্টারেক্টিভ করতে পারি: বিকল্প (অনুসন্ধান এবং প্রতিস্থাপন)?


17

কখনও কখনও আমি :sএকটি জটিল রেজিএক্সএক্স ব্যবহার করি যা সঠিক হতে পারে বা নাও হতে পারে, বা আমি সমস্ত ম্যাচ প্রতিস্থাপন করতে চাই কিনা তা নিশ্চিত নই ।

পাঠ্যটি প্রতিস্থাপনের আগে এটি খুঁজে পাওয়া প্রতিটি ম্যাচ নিশ্চিত করার জন্য আমি কি কোনও উপায় ভিমকে বলতে পারি?

উত্তর:


20

হ্যাঁ! এর cজন্য পতাকা ব্যবহার করুন :substitute। থেকে:help substitute :

[c]     Confirm each substitution.  Vim highlights the matching string (with
        hl-IncSearch).  You can type:                           :s_c
            'y'     to substitute this match
            'l'     to substitute this match and then quit ("last")
            'n'     to skip this match
            <Esc>   to quit substituting
            'a'     to substitute this and all remaining matches {not in Vi}
            'q'     to quit substituting {not in Vi}
            CTRL-E  to scroll the screen up {not in Vi, not available when
                        compiled without the +insert_expand feature}
            CTRL-Y  to scroll the screen down {not in Vi, not available when
                        compiled without the +insert_expand feature}

পাই হিসাবে উদাহরণ ব্যবহার সহজ:

%s/old/new/c

এটি খুব দরকারী, তবে এটি সম্পর্কে 2 সপ্তাহ আগে পর্যন্ত জানা ছিল না :-) এবং এটি এমনকি 'ভিআই :-) এ উপলব্ধ

বোনাস টিপ: আপনি ব্যবহার করতে পারেন :set nowrapscan; এটি নীচে আঘাত করলে ভিমকে শীর্ষে মোড়ানো থেকে বাধা দেয়। আমি পতাকাটি ব্যবহার করার সময় এটি বিশেষভাবে কার্যকর বলে মনে করেছি c


19

কার্পেটস্মোকার যা বলেছেন তা ছাড়াও:

&incsearch(set incsearch ) তেজ সেটিং সত্যিই দরকারী। আপনি এটি একটি দরকারী এবং অল্প জ্ঞাত কৌশল দ্বারা একসাথে ব্যবহার করতে পারেন।

কৌশলটি হ'ল কেবলমাত্র আদেশ /বা ?কমান্ড ব্যবহার করে আপনার জটিল রেজেক্স চেষ্টা করে দেখানো । ভিমটি &incsearchইন্টারেক্টিভভাবে ম্যাচগুলি প্রদর্শন করতে সেটিংটি ব্যবহার করবে । একবার আপনি রেজেক্সে খুশি হয়ে গেলে, আপনি :%s//replacementআগের সন্ধানটি ভিএম ব্যবহার করতে পারবেন ।

অংশটি কীভাবে //ফাঁকা রয়েছে তা লক্ষ্য করুন (এটি আপনি অনুসন্ধানের জন্য পাঠ্যটি রেখেছিলেন)। যদি আপনি এটি খালি ছেড়ে রাখেন তবে আপনি ভিমকে পূর্ববর্তী অনুসন্ধানের রেজিগ্সটি ব্যবহার করতে বলছেন। এটির সাহায্যে আপনি একটি জটিল রেজেক্স টাইপ করতে পারেন /এবং এর সমস্ত সুবিধা পেতে set incsearchপারেন এবং তারপরে এটি ব্যবহার করতে পারেন%s//replacement অনুসন্ধানটি কার্যকর করতে এবং প্রতিস্থাপন করতে কমান্ডটি ।

আপনি যদি :sআদেশগুলি সন্ধানের অনুরূপ কিছু চান তবে ভিম -ওভারটি দেখুন , তবে আমি কেবল দেশী ভিম উপায় ব্যবহার করতে পছন্দ করি।


আমি এর একটি বৈকল্পিক ব্যবহার করতাম: কেবল ব্যবহার করুন :%s/pattern/replace/এবং তারপরে uপূর্বাবস্থার জন্য টিপুন , আপনি hlsearchসক্ষম করে থাকলে ভিম যে অংশগুলি পরিবর্তিত হয়েছে তা আপনি দেখতে পাবেন । এবং আপনি আবার এই পাঠ্যটি প্রতিস্থাপন করতে পারেন ^R
মার্টিন টর্নয়েজ

7

আমার প্রিয় ইন্টারেক্টিভ প্রতিস্থাপনটি হ'ল ব্যবহার করে অনুসন্ধান করা /এবং ম্যাচগুলি ব্যবহার করে যাওয়াn

তারপরে ম্যাচটি নির্বাচন করে নির্বাচন করুনgn এবং তারপর sথেকে প্রতিস্থাপন পাঠ্য যাই হোক না কেন আমি চাই।

এবং পরবর্তী ম্যাচে চলে এসে টিপে পুনরাবৃত্তি করুন.


এটি একটি খুব সুন্দর কৌশল, কারণ এটি হ'ল: (১) ইন্টারেক্টিভ, (২) আপনি যদি ভুলবশত এটিকে এড়িয়ে যান (এমন কিছু যা আপনি ব্যবহার করতে পারবেন না :s/old/new/gc) তবে আপনি আগের ম্যাচটিতে যেতে পারেন ।
আইরাত

3

নিওভিমে 'inccommand'অপশনটি রয়েছে যা :sআপনাকে টাইপ করার সময় কমান্ডের ফলাফলের পূর্বরূপ দেখতে দেয় ।


1

প্রত্যেকের সুবিধার জন্য, incsearchপ্যাটার্নটি টাইপ করার সাথে সাথে পূর্বরূপ প্রদর্শন করতে vim8 এ আপডেট করা হয়েছিল

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