ভিএম-তে বর্তমান লাইনের সাথে মিলিত রেখাগুলি কীভাবে অনুসন্ধান করবেন


11

আমি সাধারণত শব্দের দ্বারা শব্দগুলি অনুসন্ধান করি :/string, তবে যদি আমাকে পুরো বর্তমান লাইনটি অনুসন্ধান করতে হয় তবে এটি কীভাবে করব।

event: 1  beacon: 0x02              //line 1
event: 19 beacon: 0x02              //line 2
event: 1  beacon: 0x03              //line 3
event: 1  beacon: 0x02              //line 4
event: 8  beacon: 0x01              //line 5
event: 19 beacon: 0x02              //line 6
event: 1  beacon: 0x02              //line 7

উদাহরণস্বরূপ, যদি cursorবর্তমানে বিদ্যমান লাইনে থাকা পাঠ্যের জন্য line 1একইভাবে কীভাবে অনুসন্ধান করতে হয় :/। কার্সারটি পরে মিলবে line 4এবং আবার যাও shouldline 7

উত্তর:


7

আমি এটি কীভাবে করব তা এখানে:

  1. শেষে লাইনটি অন্তর্ভুক্ত না করে লাইনটি (নামবিহীন নিবন্ধে) ইয়াঙ্ক করুন: 0y$
  2. খুব যাযাবর অনুসন্ধান শুরু করুন :/\V
  3. ইয়াঙ্কড লাইন যুক্ত করুন: <c-r>"
  4. অনুসন্ধান বন্ধ করুন: <cr>

@EvergreenTree যেমন একটি মন্তব্যে উল্লেখ করেছে , আপনি অবশ্যই সমস্ত পদক্ষেপ এক সাথে সম্পাদন করতে ম্যাপিং তৈরি করতে পারেন:

nnoremap <leader>* 0y$/\V<c-r>"<cr>

প্রাসঙ্গিক সহায়তা বিষয়:

:help registers
:help /magic
:help c_CTRL-R

এনবি যদি আপনি যে লাইনটি অনুসন্ধান করছেন তাতে যদি ব্যাকস্ল্যাশ থাকে তবে আপনাকে এখনও খুব বিস্ময়কর অনুসন্ধানের পরেও সেগুলি ছেড়ে যেতে হবে (অন্য একটি ব্যাকস্ল্যাশ যোগ করে) escape


4
অবশ্যই, আপনি এটির জন্য একটি ম্যাপিংও তৈরি করতে পারেন: nnoremap {key} 0y$/\V<c-r>"<cr>
চিরসবুজ

9

বিশেষত ম্যাপিংয়ের উদ্দেশ্যে, আমি getline()নিজেকে ইয়াঙ্কিং করার চেয়ে আরও মার্জিত ব্যবহার করতে দেখি । getline()একটি স্ট্রিং দিয়ে কল '.'কর্সারের নিচে লাইনটি দেয়। এটি ব্যবহারের জন্য দুটি ভাল বিকল্প রয়েছে:

:exec '/' . getline('.')

যা স্ট্রিংগুলি পার্স করে '/'এবং কী getline()একসাথে থেকে ফিরে আসে এবং এটি একটি ভিএম কমান্ড হিসাবে কার্যকর করে।

অথবা

/<C-r>=getline('.')<CR>

যা এক্সপ্রেশন রেজিস্টার ব্যবহার করে @=। নিম্নলিখিতটি প্রকাশের =পরে মূল্যায়ন করা হয় <CR>এবং কমান্ড লাইনে স্থাপন করা হয়।


নিস! যখন লাইনে অক্ষর রয়েছে /বা 'এটি খুব ভাল কাজ করে না। যাইহোক, আমি আজ কিছু শিখি! আপনাকে ধন্যবাদ
লুচ এম

4

ব্যক্তিগতভাবে আমি একটি ভিজ্যুয়াল স্টার প্লাগইন পেতে পারি ( সেখানে খুব কম রয়েছে )। এটি সম্পর্কে একটি দুর্দান্ত ভিমকাস্ট রয়েছে: নির্বাচিত পাঠ্যের জন্য অনুসন্ধান করুন । এর অর্থ আপনি লাইনটি চাক্ষুষভাবে নির্বাচন করতে পারেন এবং তারপরে টিপুন *

যদি কোনও প্লাগইন আপনার জিনিস না হয় তবে আপনি নীচের ম্যাপিংটি এতে যুক্ত করতে পারেন vimrc:

xnoremap * :<c-u>let @/=@"<cr>gvy:let [@/,@"]=[@",@/]<cr>/\V<c-r>=substitute(escape(@/,'/\'),'\n','\\n','g')<cr><cr>

দ্রষ্টব্য: <c-v>এই ম্যাপিংয়ের জন্য ভিজ্যুয়াল-ব্লক ( ) সমর্থিত নয়।


আমি ম্যাপিংগুলি যুক্ত করেছি তবে আসলে এটি প্রথম মিলের শব্দে ঝাঁপিয়ে পড়েছে এবং পুরো লাইনটি নির্বাচন করছে না।
মানব এমএন

যদি এটি কোনও শব্দের সাথে মিলে যায় তবে আমি ধরে নিচ্ছি আপনি *সাধারণ মোড থেকে ব্যবহার করছেন বা ম্যাপিংটি সঠিকভাবে ইনস্টল করা নেই।
পিটার রিংকার

4

যদি আপনার লাইনে এমন কিছু আইটেম থাকে যা কোনও প্যাটার্নের অংশ হিসাবে ব্যাখ্যা করা থাকে তবে বিদ্যমান উত্তরগুলি সমস্তই ব্যর্থ হয়। \Vবিন্দু সেখানে অধিকাংশ পায় কিন্তু এখনও ব্যাকস্ল্যাশ আপ messes।

ব্যাকস্ল্যাশ থেকে বাঁচতে এটি চেষ্টা করুন ...

/\V<C-R>=escape(getline('.'), '\')

এবং তারপরে আপনি যদি এটিকে কোনও ম্যাপিংয়ে ব্যবহার করছেন তবে আপনি <Enter>কীভাবে এটি কাজ করতে চান তার উপর নির্ভর করে আপনার শেষে একটি বা দুটি গুলি দরকার ।


দুর্দান্ত উত্তর! লাইনে প্রায়শই উভয় ধরণের স্ল্যাশ থাকে যা অন্য উত্তরগুলিকে বিভ্রান্ত করে। পালানোর এই শেষ যুক্তিতে একটি ফরোয়ার্ড escape(…, '/\')
স্ল্যাশও

2

সঙ্গে তেজ-তারকাচিহ্ন শুধু ব্যবহার ইনস্টল V$*(অথবা 0v$*) এটির জন্য অনুসন্ধান বর্তমান লাইন নির্বাচন করতে হয়।

দ্বিতীয় কমান্ডে 0কার্সারটি ইতিমধ্যে লাইনের শুরুতে থাকলে প্রয়োজনীয় নয়।


1
না না *শুধুমাত্র কার্সার অধীনে শব্দ অনুসন্ধান, এবং বর্তমান চাক্ষুষ নির্বাচন?
চিরসবুজ

1
@ এভারগ্রিনট্রি আমি প্লাগইনটির কথা বলতে ভুলে যাইনি। বিজ্ঞপ্তির জন্য ধন্যবাদ
এডালার্স্ক

2

এটি করার আরও একটি উপায় হ'ল কমান্ড-লাইন উইন্ডোটি ব্যবহার করা: yy/<Ctrl-F>p<Enter>

  • আপনার প্রয়োজনীয় পুরো লাইনটি ইয়াঙ্ক করুন yy
  • /কমান্ড-লাইন উইন্ডোটি খুলতে Ctrl-F টিপুন এবং তারপরে টিপুন
  • pলাইনটি পেস্ট করতে টিপুন
  • অনুসন্ধান শুরু করতে এন্টার টিপুন

5
আপনি q/একই প্রভাবটি পেতে ব্যবহার করতে পারেন/<c-f>
23:57

2

http://vim.wikia.com/wiki/Searching_for_expressions_Wich_incolve_slashes উল্লেখ করে যে অনুসন্ধানের নিবন্ধটি সরাসরি সেট করা যেতে পারে, এর মতো:

:let @/='/abc/def/ghi/'

এটি লাইনে অনুসন্ধানের অনুমতি দেয় এবং লাইনে স্ল্যাশ অন্তর্ভুক্ত থাকা সত্ত্বেও কাজ করে।

সুতরাং \*একটি লাইন অনুসন্ধানে মানচিত্র তৈরি করুন, বলুন :

nnoremap <leader>* :set hlsearch<cr>:let @/=getline('.')<cr>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.