আমি কীভাবে শব্দগুলিকে একটি ম্যাক্রোতে উটকেসে রূপান্তর করতে পারি?


14

আমার কাছে শব্দের একটি তালিকা রয়েছে:

these are
some
words that I want
to convert to
camel case

আমি উদাহরণস্বরূপ ঘুরে, একটি উপায় প্রয়োজন camel caseমধ্যে camelCaseএকটি ম্যাক্রো (অথবা একটি উপায় উট ক্ষেত্রে মধ্যে একটি চাক্ষুষ লাইন নির্বাচন প্রতিটি লাইন চালু করতে) মধ্যে।

আমি wgUlhxপ্রয়োজনীয় হিসাবে বহুবারের মতো কিছু ব্যবহার করতে পারি , তবে সমস্যাটি হ'ল এটি বিভিন্ন দৈর্ঘ্যের শব্দের জন্য কাজ করে না (সুতরাং, উদাহরণস্বরূপ, wgUlhxwgUlhxএতে কাজ করবে convert this pleaseতবে এর জন্য নয় convert these pretty please)।

উপরের লাইনের জন্য পছন্দসই আউটপুট হবে

theseAre
some
wordsThatIWant
toConvertTo
camelCase

এটি স্বয়ংক্রিয় করার কোনও উপায় আছে?

উত্তর:


16

একটি ওয়ান লাইনার

আমি একটি সাধারণ নিয়মিত প্রকাশের প্রতিস্থাপন পেয়েছি (ধরে নিলাম 'যাদু' সেট করা আছে):

:s/ \([a-zA-Z]\)/\u\1/g

এটি কোনও স্থানের পরে কোনও একক অক্ষরের সাথে মেলে, চিঠিটি সংরক্ষণ করে। তারপরে, এটি লাইনের প্রতিটি ম্যাচের জন্য সংরক্ষণ করা চিঠিটি বড় হাতের অক্ষরের ( \u= বড় ক্ষেত্রে, \1= প্রথম সংরক্ষিত ম্যাচ) তৈরি করে with

একটি রেখে পুরো ফাইলটি প্রয়োগ করুন %:এবং এর মধ্যেs

এই সমাধানটির নেতিবাচক দিকটি এটি লাইনওয়াইজ (যা আপনার উদাহরণগুলির জন্য কাজ করে) তবে আপনি যদি কেবলমাত্র একটি লাইনের মধ্যে অনেকের মধ্যেই উট কেস করতে চান তবে তা ছোট হয়ে যাবে।

একটি পূর্ণ সমাধান

map <leader>g~ :set opfunc=MyCamelCase<CR>g@
function! MyCamelCase(type, ...)
  let searchsave=@/
    silent s/\%>'\[ \([a-zA-Z]\)\%<']/\u\1/g
  let @/=searchsave
 endfunction

এটি একটি নতুন অপারেটর তৈরি করে যা একটি গতিতে পরিচালনা করতে পারে। যদি আপনার <leader>মতো \হয় তবে নিম্নলিখিত পাঠ্যটি দেওয়া হয়েছে ( |কার্সার হিসাবে):

This is some |example text to work with.

টাইপিং \g~3wদেয়

This is some exampleTextTo work with.

তা হল, আমরা উটটি 3 টি শব্দের উপরে কেস করলাম।

এই প্রতিস্থাপনের বর্ণনা:

s/প্রতিস্থাপন শুরু।
\%>'\[কিছুটা বেদনাদায়ক। \%>'mএকটি চিহ্ন ডানদিকে মেলে বলেছেন। আমরা চিহ্ন চাই [, কিন্তু এটিও এই প্যাটার্নে পালাতে হবে। সুতরাং, এটি অপারেটরকে দেওয়া গতির পরে ম্যাচটি শুরু করে।
\([a-zA-Z\)উপরের ওয়ান-লাইনারের মতোই।
\%<']এটি অন্য প্রান্তটি, গতির সমাপ্তির আগে মিলছে।
/\u\1/gউপরের ওয়ান-লাইনার থেকে প্রতিস্থাপন।


আসলে এটি কোনও ম্যাক্রোর মতো নয় এটি এটি একটি লাইনারের মতো, তবে আপনি এটি কোনও মূল সংমিশ্রণে মানচিত্র করতে পারেন।
জন ও'ম।

এটি করার জন্য একটি অপারেটর সংস্করণ যুক্ত করা হয়েছে। কিছুটা ভাল পরিচালনা করে।
জন ও'ম।

আমি মনে করি ঠিক আছে যদি আপনার উত্তরটি নির্দিষ্টভাবে ম্যাক্রো ব্যবহার না করে; প্রশ্নকারী আমার মতে একটি এক্সওয়াই সমস্যা উপস্থাপন করলেন ।
tommcdo

@ টমমকডো হ্যাঁ, আপনি ঠিক বলেছেন; এটি একটি আসল ম্যাক্রো হতে হবে না। এটি কেবল এক ধরণের স্বয়ংক্রিয় পদ্ধতি হওয়া দরকার।
ডুরকনব

12

একটি বিকল্পের জন্য আমি ভিম-বিলোপ প্লাগইন ব্যবহার করি যা একটি জোর করে বৈশিষ্ট্য সরবরাহ করে:

চালু করতে চান fooBarমধ্যে foo_bar? টিপে crs(স্নেপকেস করতে বাধ্য করা)। মিক্সডকেস ( crm), উট কেস ( crc), স্নেপকেস ( crs), এবং ইউপিপিআইসিএসিএসই ( cru) সমস্ত মাত্র 3 টি কীস্ট্রোক দূরে রয়েছে। এই কমান্ড সমর্থন repeat.vim


2
+1 কারণ সর্বদা একটি টিম পোপের প্লাগইন আমি জানতাম না।
চিড়িয়াখানা

5

আপনি একটি পুনরাবৃত্ত ম্যাক্রো তৈরি করতে পারেন যা নিম্নলিখিত কীস্ট্রোকগুলির সাথে একক লাইনের জন্য এটি করে:

qqqqqf xgUl@qq

(উল্লেখ্য যে মধ্যে স্থান fএবংx থেকে spacebar একটি টোকা, একটি বিরতি নয়)

বিস্তারিত:

  1. কিউ রেজিস্টার সাফ করুন। এটি প্রয়োজনীয় কারণ আমরা একটি পুনরাবৃত্ত ম্যাক্রো তৈরি করছি। (5 ধাপ দেখুন):qqq

  2. প্রশ্ন রেজিষ্টারে ম্যাক্রো রেকর্ডিং শুরু করুন: qq

  3. আপনি wএখানে গতিটি ব্যবহার করতে পারবেন না , কারণ আপনি পরবর্তী লাইনে ঝাঁপিয়ে পড়ার পরিবর্তে লাইনটির শেষে গেলে ম্যাক্রোটি বাতিল করতে চান। পরিবর্তে, fস্পেসবারের পরে কীটি টিপে লাইনের পরবর্তী স্পেস অক্ষরটিতে ঝাঁপুন:f<space>

  4. স্থান এবং উপরের অক্ষরটি নিম্নলিখিত চিঠিটি মুছুন: xgUl

  5. Recurse। যেহেতু আমরা নিবন্ধটি q1 ধাপে সাফ করে দিয়েছি , এখনও এতে কিছুই নেই, সুতরাং এটি কিছুই করবে না:@q

  6. ম্যাক্রো সংরক্ষণ করুন: q

তারপরে আপনি একটি ব্যাপ্তি ব্যবহার করে একাধিক লাইনে এই ম্যাক্রো প্রয়োগ করতে পারেন:

ফাইলের প্রতিটি লাইনে ম্যাক্রো প্রয়োগ করুন:

:%normal @q

2-25 সমেত লাইনে ম্যাক্রো প্রয়োগ করুন:

:2,5normal @q

একটি চাক্ষুষ নির্বাচন করুন এবং তারপরে টাইপ করুন :normal @q। আপনি :কী টিপলে এটি কমান্ড লাইনটিকে প্রাক-জনপৃষ্ঠে আনবে , ফলস্বরূপ একটি কমান্ড যা নির্বাচনের প্রতিটি লাইনে ম্যাক্রো প্রয়োগ করে:

:'<,'>normal @a

কীস্ট্রোক রেকর্ডিং শুরু করার আগে qযেমন qqএটি করা হয় তেমন রেজিস্টারটি সাফ করা অপ্রয়োজনীয় । আসলে, এই কারণেই qqqq
নিবন্ধটি

অবশ্যই, আপনি যদি এমন কিছু করছেন যা নিবন্ধকে সংযোজন করা প্রয়োজন q(অর্থাত্ ব্যবহার করে qQ) তবে প্রথমে এটি সাফ করা সম্ভবত প্রয়োজনীয় হবে।
tommcdo

2
@ টমমকডো এটি আমার ভিমের অনুলিপিটিতে অবশ্যই সত্য নয়। (ভিম 7.3.87, এর সাথে অনুরোধ করা হয়েছে vim -u NONE)। আপনি যখন নিবন্ধটি সংরক্ষণ করবেন তখনই বিদ্যমান বিষয়বস্তুগুলি সাফ হয়ে যাবে step ধাপে you
সমৃদ্ধ

@ টমমকডো এই পদক্ষেপটি কেন প্রয়োজনীয় তা আরও পরিষ্কার করার জন্য আমি উত্তর আপডেট করেছি।
ধনী

আমার ভুল, আমি সেখানে বন্দুক লাফিয়েছিলাম। দুর্দান্ত ব্যাখ্যা!
tommcdo

1

Http://vim.wikia.com/wiki/Changing_case_with_regular_expressions দেখুন এটি clearly U, \ L, \ u,! L সংশোধনকারীকে পুরোপুরি স্পষ্ট এবং সংক্ষিপ্তভাবে ব্যাখ্যা করেছে!

এর সারমর্মটি নিম্নলিখিত:

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

আপনি পশ্চাদগমনের ক্ষেত্রে want U বা \ L স্থাপন করার মতোই সহজ যা আপনি এর ক্ষেত্রে পরিবর্তন করতে চান এবং শেষে \ E। ভিম পাঠ্যটি বড় ব্যাকেরফারেন্স বা ছোট হাতের অক্ষরে (যথাক্রমে) তৈরি করবে। পশ্চাদপসরণে খুব প্রথম অক্ষরের ক্ষেত্রে পরিবর্তন করতে \ u এবং \ l (শেষে \ E ছাড়া) ব্যবহার করুন।

(একটি "ব্যাকরিফারেন্স" হ'ল একটি নিয়মিত প্রকাশের একটি অংশ যা নিয়মিত প্রকাশের পূর্ববর্তী অংশকে বোঝায় The

এই কৌশলটির শক্তি প্রদর্শন করে এমন কয়েকটি উদাহরণ:

পুরো ফাইলটি ছোট করে নিন

হয়েছে:% s /.*/ \ এল & / ছ

(এবং ম্যাচের সম্পূর্ণ পাঠ্যকে বোঝায় এমন একটি সহজলভ্য প্রতিস্থাপন))

একটি <(অর্থাত্ এইচটিএমএল ট্যাগের নাম খোলার) দ্বারা পূর্ববর্তী সমস্ত শব্দের বড় হাতের অক্ষর:

:%s/<\(\w*\)/<\U\1/g

গু এবং জিইউ কমান্ডগুলিও নোট করুন।

উদাহরণস্বরূপ, ggguG পুরো ফাইলটি ছোট করে ফেলবে। (জিজি = শীর্ষে যান, গু = লোয়ারকেস, জি = ইওফে যান)।

নামের পরিবর্তে back 0 জেনারেল ব্যাকরেফ ব্যবহার করে (\ 1, \ 2 ইত্যাদি) আপনি কিছু টাইপিং সংরক্ষণ করতে পারবেন রেজেক্সের স্ট্যান্ডা প্রতিস্থাপনের জন্য।

এই রেজেক্স উপরের কেসগুলিতে একটি ফাইলের বড় হাতের অক্ষরের একটি স্পষ্ট সেট:

:%s/\(select\)\|\(order)\|\(by\)\|\(from\)\|\(where\)/\U\0/g

রকেট বিজ্ঞান নয়, তবে অন্যথায় আপনাকে এটি করতে হবে:

:%s/\(select\)\|\(order)\|\(by\)\|\(from\)\|\(where\)/\U\1\U\2\U\3\U\4\U\5/g

1
আপনি দয়া করে আপনার উত্তরে উল্লিখিত নিবন্ধটির সংক্ষিপ্ত বিবরণ দিতে পারেন?
চিরসবুজ

দেখা হবে? এটি অত্যন্ত গুরুত্বপূর্ণ, যদি একক-লিঙ্কের উত্তরগুলি ঠিক থাকে তবে কয়েক বছর পরে এই সাইটটি মুছে ফেলা লিঙ্কগুলিতে পূর্ণ হবে। তবে আপনি যদি লিঙ্কটি উল্লেখ করেছেন কেবল তারই একটি গুরুত্বপূর্ণ অংশটি অনুলিপি করেন এবং ওপি আরও ইনফস পেতে পারে এমন লিঙ্কটি দেয় তবে তা ঠিক।
পিটারহ - মনিকা পুনরায় ইনস্টল করুন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.