খারাপভাবে ইন্টেন্ট করা কোডটি পুনরায় যুক্ত করা ing


39

আমি ভিমের স্মার্ট-ইনডেন্ট বৈশিষ্ট্যটি পছন্দ করি, এটি আমাকে ভাল-ইনডেন্ট কোড ব্লক তৈরি করতে দেয়।

আমি নিয়মিত বাফারে কোড কপি / পেস্ট করি তবে সেই কোডটি প্রায়শই খারাপভাবে ফর্ম্যাট হয়।

আদর্শটি কী হবে তা হ'ল স্মার্ট-ইনডেন্ট সিস্টেমের মাধ্যমে কোডটি "পুনরায় প্রক্রিয়াজাতকরণ"।

এমন কি সম্ভব?

উদাহরণস্বরূপ, আপনি কীভাবে নীচের কোডটি 'ঠিক' করবেন (বৃহত্তর ব্লক থেকে নিষ্কাশন - আমি প্রতিটি লাইন নিজেই ঠিক করতে চাই না ...):

    else 
                {
                        m[c] = 5;
                Finished = true;
std::cout<<"(ID,R,E)"<<"-->"<<"("<<g[c]<<","<<r[c]<<","<<E1 <<")"<< std::endl;
std::cout << "\n"<<"finish-->" << r[c] << "\t" <<"E1-->"<< E1 <<"\n" ;
                }
        }

1
আপনি কি ভিমটিতে পেস্ট করার সময় পরিবর্তিত কোডটি যা মূলত দুর্বল ইন্টেন্টেড বা সঠিকভাবে ইন্টেন্টেড কোডের কথা বলছেন?
জামেসান

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

উত্তর:


48

আমি এটি দুটি উপায়ে একটি করি।

ইনডেন্ট অ্যাডজাস্ট করা পেস্ট

প্রথমত, যদি বাফার কোডটি ফর্ম্যাট করা হয় তবে আমি আলাদা আলাদা ইন্ডেন্টেশনের ]pপরিবর্তে ব্যবহার করি p, যা কোডটি যেমনটি আটকে দেয় তবে ইন্ডেন্টেশনটি এমনভাবে স্থানান্তরিত হয় যে প্রথম লাইনটি আটকানো হয়েছে লাইন I এর মতোই গভীরতা is আমি চালু

ইজি উত্সটি বাফারে অনুলিপি করা হয়েছে

while (1) {
    dostuff();
}

এটি দিয়ে আটকানোর ইজি ফলাফল ]p

int myfunc() {
    int i = 5; /* Cursor on this line before paste */
    while (1) {
        dostuff();
    }
 }

ভিএম কিছুটা একই ইন্ডেন্টেশন পর্যায়ে রাখে int i। এটি দ্রুত, তবে অনুলিপি কোডটি নিজের মধ্যে যথাযথভাবে ইন্টেন্ট করা থাকলে কেবল কাজ করে।

পেস্টের পরে পুনরায় ফর্ম্যাট করুন

=তেজ reformats মধ্যে অপারেটরের কোড কনফিগার ফর্ম্যাটিং বিধিগুলি উপর ভিত্তি করে। আটকানোর সংক্ষিপ্ত স্নিপেটগুলির জন্য, আমি সাথে ভিজ্যুয়াল মোডে যাব, আমি সন্নিবেশ করানো vলাইনগুলি নির্বাচন করব এবং তারপরে =পুনরায় ফর্ম্যাট করতে টিপব।

বৃহত্তর পেস্টগুলির জন্য, আমি এই সুবিধাটি গ্রহণ করি যে কার্সারটি প্রথম আটকানো লাইনে যায় এবং সেই ভিম "84 টি আরও লাইন" এর মতো কিছু বলে। তারপরে আমি 84==সেই ৮৮ টি লাইনগুলি রিফ্লো করতে প্রবেশ করতে পারি (অবশ্যই, আপনি যে লাইনের লাইনে আসলে পেস্ট করেন তার সংখ্যার সাথে 84 বিকল্প)।

তথ্যসূত্র

:help ]p সমন্বিত ইনডেন্ট পেস্ট জন্য

:help =কভার ={motion}, [count]==এবং {Visual}=কাস্টম বা অন্তর্নির্মিত ইনডেন্ট বিধিগুলির মাধ্যমে ফিল্টারিংয়ের জন্য


6
আপনি ভিজ্যুয়াল মোডে ted [v`]
ক্রেগ্প

1
@ ব্যাজার কেবল স্পষ্ট করে বলতে গেলে, সেটাই কি ব্যাকটিক-বন্ধনী-ভি-ব্যাকটিক-বন্ধনী?
ফটস্কট

1
হ্যাঁ ..
টেক্সারিয়া

ভিএম-তে অপারেটর কনফিগার করা বিন্যাসের নিয়মের ভিত্তিতে কোডটি পুনরায় ফর্ম্যাট করে আমি +100 দিতে পারতাম যদি। আমি দিন বাঁচাতে পারে।
ওয়াসনাম

1
আমি পেস্ট করতে <নিয়ন্ত্রণ + আর> "ব্যবহার করি, যাতে আমাকে সন্নিবেশ মোডটি ছাড়তে না হয় <<নিয়ন্ত্রণ + আর>" এর জন্য পি সমতুল্য কী?
এ --- বি

15

=কমান্ড reindent ব্যবহার করা যেতে পারে।

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

= ভিজ্যুয়াল মোড থেকেও ব্যবহার করা যেতে পারে।

আর একটি দরকারী কমান্ড হ'ল ]p, যা বর্তমান লাইনের মতো একই ইনডেন্ট স্তরে আটকায়। এটি আশেপাশের পাঠ্য অনুসারে আলাদা ইনডেন্ট গভীরতায় সঠিকভাবে ইন্ডেন্ট করা পাঠ্যকে সহায়তা করতে পারে।


7

=ap (স্মৃতিচক্রটি 'একটি অনুচ্ছেদে ফর্ম্যাট করা হয়') ব্যবহার করে বর্তমান অনুচ্ছেদে অটোফর্ম্যাট করার বিম প্রচেষ্টা থাকবে।

কি আপনি আপনি সম্ভাব্য পুনরায় ফর্ম্যাট করছি সতর্কতা অবলম্বন মনোযোগ দিতে চান, আপনি এটা saner এবং ব্যবহার করা দ্রুততর পেতে পারে vapচাক্ষুষরূপে বর্তমান অনুচ্ছেদের (আপনি কি ফরম্যাট হচ্ছে এর দৃশ্যমান ইঙ্গিত দান), দ্বারা অনুসরণ নির্বাচন =। আমি এই ফাইলগুলিতে এটি দরকারী খুঁজে পেয়েছি যেখানে আমি জানি যে ভিএম ভুলভাবে পুনরায় ফর্ম্যাট করবে এবং আমি ভুলভাবে অন্য লাইনগুলি ভুলভাবে ফর্ম্যাট করতে চাই না।


4

বাফারে ইতিমধ্যে একটি ফাইল পুনরায় পাঠাতে, ব্যবহার করুন gg=G: ফিক্স ইনডেন্টেশন দেখুন

কোনও ফাইলের একটি অংশ পুনরায় পাঠানোর জন্য, ফিল্টারটিতে বিভিন্ন সীমা প্রয়োগ করা যেতে পারে =(উদাহরণস্বরূপ, ==কেবলমাত্র বর্তমান লাইনটি স্থির করে)।

:set pasteবাফারে পাঠ্য আটকানোর আগে পাঠ্যটি আটকানোর সময় ইন্ডেন্টেশনটি অপরিবর্তিত রাখতে, এটি সবেমাত্র আপনি আটকানো টেক্সটটি স্বয়ংক্রিয়-ইনডেন্টিং থেকে প্রতিরোধ করবে। স্টাফ পেস্ট করার পরে, আপনি set :nopasteযখন হয়ে যাবেন তখন ব্যবহার করে ফিরে যেতে পারেন । ভিমডক এখানে দেখুন ।

আপনি যদি নিজেকে ঘন ঘন স্টাফ পেস্ট করে দেখতে পান তবে এই টিপটি ভিমউইকিটিতে ব্যবহার করা ভাল এবং আপনার এই লাইনগুলিকে যুক্ত করে "পেস্ট-মোড" টগল করার জন্য একটি কী সেটআপ করা ভাল ধারণা হবে .vimrc:

nnoremap <F2> :set invpaste paste?<CR>
set pastetoggle=<F2>
set showmode

তারপরে <F2>আপনি টগল পেস্ট-মোডে আঘাত করতে পারেন । পেস্ট মোড সক্রিয় থাকাকালীন ভিআইএম স্ট্যাটাস লাইনে "পাস" শব্দটি দেখায়।


2
এই প্রশ্নটি ইনডেন্টেশনের সাথে কোড পেস্ট করার বিষয়ে নয়, এটি খারাপভাবে ইনডেন্ট কোড ঠিক করার বিষয়ে।
রলফ্ল

4
আপনার পোস্ট করা মন্তব্যটি আমি দেখতে পাইনি। তবে, আপনি এখনও gg=Gপুরো ফাইলটি পুনরায় পাঠাতে ব্যবহার করতে পারেন ।
ভরগব ভাট

@rolfl এখান থেকে আমি সাধারণত এইরকম ক্ষেত্রে শুরু করি:, gg=Gতারপর যে অংশগুলি vimভুল হয়েছে সেগুলি দেখুন ।
মারু

যদি আপনি আরও নিয়ন্ত্রণ চান (বা পুনরাবৃত্তি ঝামেলা হ্রাস করুন) astyleআপনি কোনও বাফার সংরক্ষণ করার মতো কোড-ফর্ম্যাটিং সরঞ্জামটি চালানোর জন্য একটি অটো-কমান্ড যুক্ত করার বিষয়টি বিবেচনা করুন । বিশদটির জন্য এসও-তে এই প্রশ্নটি দেখুন ।
ভড়গব ভাট

2

ব্র্যাকড বা বন্ধনীযুক্ত ব্লকের পুরো ব্লকটি স্বয়ংক্রিয়ভাবে পুনরায় প্রবেশ করতে, আপনার কার্সারটিকে একই লাইনে যেখানে বন্ধনী রয়েছে সেখানে রাখুন এবং চেষ্টা করুন =%। আপনার শিফটের প্রস্থ পরিবর্তন করতে, উদাহরণস্বরূপ ব্যবহার করুন :set sw=2

যদি এটি প্রত্যাশার মতো কাজ না করে তবে ম্যানুয়ালি ইনডেন্ট হ্রাস করতে ( আউটডেন্ট ), চেষ্টা করুন <%এবং .(যদি প্রয়োজন হয়) দিয়ে পুনরাবৃত্তি করুন । >%বিপরীতে জন্য ব্যবহার করুন ।

তাই:

else
       {
         // some code
       }

হয়ে:

else
{
  // some code
}

নির্দিষ্ট কোডের জন্য, স্বয়ংক্রিয়ভাবে একটি লাইন বা কয়েকটি লাইন পুনরায় প্রবেশ করতে, চেষ্টা করুন:

  • == বর্তমান লাইনে পুনরায় প্রবেশ করতে to
  • 5== 5 লাইন পুনরায় প্রবেশ করতে

এক লাইন বা কয়েকটি লাইনের জন্য ম্যানুয়ালি ইনডেন্ট বাড়াতে / হ্রাস করতে চেষ্টা করুন:

  • << শিফটউইথ স্পেস দ্বারা বর্তমান লাইনটি ডি-ইনডেন্ট করতে
  • 5<< শিফটউইথ স্পেস দ্বারা 5 লাইন ডি-ইনডেন্ট করতে
  • >> শিফটউইথ স্পেস দ্বারা বর্তমান লাইন যুক্ত করতে
  • 5>> শিফটউইথ স্পেস দ্বারা 5 লাইন যুক্ত করতে
  • . প্রয়োজনে পুনরাবৃত্তি

আপনি ভিজ্যুয়াল মোডে ( v) পাঠ্য নির্বাচন করে এবং =(অটো-ইনডেন্ট), <(ডি-ইনডেন্ট) বা >(ইনডেন্ট) টিপে ইন্ডেন্টেশনও করতে পারেন।

আর একটি কৌশলটি হ'ল: দ্বারা সম্পূর্ণ ফাইলের ইনডেন্টেশনটি সংশোধন করা gg=G

যদি আপনার ফাঁকা জায়গাগুলির পরিবর্তে ট্যাব থাকে তবে ব্যবহার করুন: :retabযা সমস্ত ট্যাবগুলিকে ফাঁকা স্থানের সাথে প্রতিস্থাপন করবে (দেখুন: স্পেসগুলির সাথে ট্যাবগুলি কীভাবে প্রতিস্থাপন করবেন? )


বাহ্যিক পদ্ধতির জন্য, আপনি চেষ্টা করতে পারেন:


সম্পর্কিত:


1

আমি সম্প্রতি ভিম-পাস্তা ইনস্টল করেছি ( https://github.com/sickill/vim-pasta ) এবং এটি পেস্ট করার সময় কোডের ইনডেন্টেশনটি উন্নত করে বলে মনে হচ্ছে। README এ বিভিন্ন কোড পেস্টিং কৌশল সম্পর্কে কিছুটা ভাল আলোচনাও রয়েছে।


1

ইতিমধ্যে বিদ্যমান উত্তরের মধ্যে প্রচুর জিনিস coveredাকা রয়েছে। আমি কেবল একটি ম্যাপিং যুক্ত করতে চাই যা আমি প্রায়শই ইনডেন্টেশনের জন্য ব্যবহার করি।

nnoremap <Leader>i  mzgg=G`z

আমি এই ম্যাপযুক্ত সাথে কিছু vimrc দেখেছি ===

যে কোনও উপায়ে এটি দুর্দান্ত ম্যাপিং এবং আমি প্রায় প্রতিটি সময়েই এটি ব্যবহার করি বিশেষত অন্য কোথাও থেকে কোড অনুলিপি করার সময়।

বা আরও ভাল autocmdএটিকে এটি রাখুন যাতে আপনি ডিস্কে পরিবর্তনগুলি লেখার ঠিক আগে ভিম এটিতে প্রবেশ করে।

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