ভিম রেজেেক্স ক্যাপচার গ্রুপগুলি [বাউ -> বাইউ: সিউ -> সিউই]


132

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

bau
ceu
diu
fou
gau

আমি সেই তালিকাটিতে রূপান্তর করতে চাই:

byau
cyeu
dyiu
fyou
gyau

আমি ব্যর্থ কমান্ডটি চেষ্টা করেছিলাম:

:%s/(\w)(\w\w)/\1y\2/g

প্রদত্ত যে এটি কাজ করে না, রেগেক্স ক্যাপচার গ্রুপগুলি ভিমে কাজ করতে আমাকে কী পরিবর্তন করতে হবে?



4
এটি কিছুটা অফ-টপিক তাই আমি এটিকে মন্তব্য হিসাবে এখানে রেখেছি তবে… আমি করব :%norm ay<CR>
রোমেনেল

2
আপনার যদি (যদি এটি ঠিক বর্ণনা মত), এটা করার জন্য একটি বিকল্প আছে: সঙ্গে 2nd কলামে যান l, সঙ্গে ভিসুয়াল ব্লক মোডে প্রবেশ Ctrl+v, পুরো কলাম চিহ্ন দিয়ে Shift+gদ্বারা অনুসরণ l, তারপর সঙ্গে মোড সন্নিবেশ লিখুন Shift+iএবং ইনপুট 'Y'। Escসন্নিবেশ মোড থেকে বেরিয়ে আসা সমাপ্ত সহ 7 টি কীস্ট্রোক kes উত্তর হিসাবে পোস্ট করা হচ্ছে না কারণ এটি ক্যাপচার গ্রুপগুলি সম্পর্কে সত্যই নয় (এটি আমি খুঁজে পেয়েছিলাম তখনই এটি খুঁজে পেয়েছিল)। :-)
ল্যাফকে মনিকা পুনরায় ইনস্টল করুন

উত্তর:


224

এটিকে ঠিক করার একটি উপায় হ'ল প্যাটার্নটি পালানো বন্ধনী দ্বারা আবদ্ধ হওয়া নিশ্চিত করা :

:%s/\(\w\)\(\w\w\)/\1y\2/g

সামান্য খাটো (এবং আরো জাদু -al) ব্যবহার করতে হয় \v, যার মানে হল পরে প্যাটার্ন সমস্ত ASCII অক্ষর ছাড়া '0'-'9', 'a'-'z', 'A'-'Z'এবং '_'একটি বিশেষ অর্থ আছে:

:%s/\v(\w)(\w\w)/\1y\2/g

দেখা:


41

আপনি যদি ব্যাকস্ল্যাশগুলি সহ ক্যাপচারিং গ্রুপগুলি থেকে পালাতে না চান (এটিই আপনি যা মিস করেছেন), ভিমের \vনিয়মিত এক্সপ্রেশন ইঞ্জিনটিকে খুব যাদু মোডে পরিণত করার জন্য প্রস্তুত করুন:

:%s/\v(\w)(\w\w)/\1y\2/g

ইনগো, ভুল জায়গায় একটি প্রশ্ন রাখার জন্য দুঃখিত: এটি সন্ধান করে :exmode; gvim এ এটি করার কোনও উপায় কি সংলাপ বাক্সটি সন্ধান / প্রতিস্থাপন করতে পারে?
জাজাও

3
@ জাজোয়া: না, সন্ধান / প্রতিস্থাপন বাক্সটি কেবল আক্ষরিক অনুসন্ধান এবং প্রতিস্থাপনের জন্য। আপনি যেভাবেই হোক না কেন এটি ব্যবহার করা উচিত নয়; এটি কেবল নোটপ্যাড ব্যবহারকারীদের জন্য প্রশিক্ষণের চাকা।
ইনগো কারকাত

ইনগো, আপনাকে ধন্যবাদ (এটি আমার পক্ষে নয়: আমি এক্সমোডে খুশি, তবে একটি অভিধান প্রকল্পে ভাষাতত্ত্ববিদ সহকারীদের জন্য): এটি প্রায় কাজ করে - রিজ এক্সপ্যাকের কাজের সন্ধানের সাথে \v...; প্রতিস্থাপনের স্ট্রিংয়ে, &কাজ করে তবে \ সুরক্ষিত হয় ( \1\rহারিয়ে যায়)
জাজাও

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

ইনগো: আপনাকে আবারও ধন্যবাদ; আমি আপনার সংশয়বাদী মতামতের সাথে একমত ইনপুটডায়ালগ +: এস + উইমস্ক্রিপ্ট সম্ভবত gvim এর অনুসন্ধান প্রতিস্থাপনটি যেভাবে নির্মিত হয়েছে তা is আমার জন্য \1 \r চিকিত্সা একটি gvim বাগ। আমি এটি কিছু ভিএম নির্দিষ্ট তালিকায় পোস্ট করার চেষ্টা করব। এর মধ্যে আমি আমার একটি ভার্সস্ক্রিপ্ট-ইনপুটডায়ালগ চেষ্টা করব।
জাজাও

34

আপনি এই প্যাটার্নটিও কম ব্যবহার করতে পারেন:

:%s/^./&y
  • %s পুরো ফাইলটিতে প্যাটার্ন প্রয়োগ করে।
  • ^. লাইনের প্রথম অক্ষরের সাথে মেলে।
  • &yyপ্যাটার্ন পরে যোগ করুন ।

13

আপনাকে গ্রুপিং প্যারান্থেসিস থেকেও বাঁচতে হবে:

:%s/\(\w\)\(\w\w\)/\1y\2/g

কৌতুকটি করে

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