আমি 'অনুসন্ধান' শুরু করলেও কীভাবে আমি 'এন' এগিয়ে যেতে পারি? ' বা '#'?


19

ভিমের (কমপক্ষে) দুটি সেট কমান্ড রয়েছে যা বিপরীত দিকে অনুসন্ধান করে। টাইপিং /এবং তারপরে একটি প্যাটার্ন প্যাটার্নটির জন্য দস্তাবেজের মাধ্যমে অনুসন্ধান করবে; টাইপিং ?এবং তারপরে একটি প্যাটার্ন পিছনে সন্ধান করবে। আদেশ *এবং #আদেশের মধ্যে একই সম্পর্ক বিদ্যমান ।

আমি যা পছন্দ করি না তা হ'ল এই কমান্ডগুলি আদেশ nএবং Nকমান্ডগুলির জন্য অনুসন্ধানের দিকনির্দেশও করে। ব্যবহারের পরে /, nনথির মাধ্যমে এগিয়ে Nযায় এবং পিছনে যায়; ব্যবহারের পরে ?, nপিছনে Nযায় এবং এগিয়ে যায়। (অন্য কথায়, nসর্বদা মূল অনুসন্ধানের মতো একই দিকে Nচলে যায় এবং সর্বদা অন্য দিকে চলে যায়))

আমি কীভাবে nদস্তাবেজটির মাধ্যমে এগিয়ে যেতে এবং Nপিছনে যেতে পারি, আমি কোন দিকে অনুসন্ধান শুরু করেছি তা বিবেচনা না করেই?

উত্তর:


29

নিম্নলিখিত ব্যবহার করে আপনি ধারাবাহিকভাবে নীচের দিকে / উপরের দিকে nএবং এর আচরণ পরিবর্তন করতে পারেন N:

nnoremap <expr> n 'Nn'[v:searchforward]
nnoremap <expr> N 'nN'[v:searchforward]

আপডেট: এটি কিভাবে কাজ করে?

এটি এক্সপ্রেশন-মানচিত্র ব্যবহার করে, যা মানচিত্রের lh মানচিত্রকে এমন একটি অভিব্যক্তিতে ম্যাপ করে যা মূল্যায়ন করা হবে, প্রতিবার lhs এর মুখোমুখি হওয়ার পরে। দেখুন :h map-expressionসহায়তায়।

যা ঘটে তা হ'ল, v: সার্চফওয়ার্ড ভেরিয়েবল (যা অভ্যন্তরীণ অবস্থা নির্ধারণ করে যে শেষ সন্ধানটি কোন দিকে ছিল, দেখুন :h v:searchforward) এর সামনে স্ট্রিংয়ের সূচক হিসাবে ব্যবহৃত হয়। সুতরাং প্রথম মানচিত্রের ক্ষেত্রে যদি সর্বশেষ অনুসন্ধানের দিকটি এগিয়ে থাকে তবে n 'n' তে ম্যাপ করা হবে (1 এর সূচক, দ্বিতীয় অক্ষরটি ফেরৎ বোঝায়) এবং যদি এটি পিছনে থাকে তবে 'এন' এ ম্যাপ করা হবে 'এন' (কারণ ভি: সার্চফরওয়ার্ড ভেরিয়েবল 0 এবং সুতরাং 'এন' ফিরিয়ে দেওয়া হবে)।

এই মানচিত্রগুলি লেখার বিকল্প উপায় হ'ল (যা আরও পরিষ্কার হতে পারে):

nnoremap <expr> n (v:searchforward ? 'n' : 'N')
nnoremap <expr> N (v:searchforward ? 'N' : 'n')

কিছু প্লাগইনও রয়েছে, যা সেগুলি করে (যেমন সার্চরেপিট প্লাগইন এবং সম্ভবত অন্যরাও)।


আমার প্লাগইন উল্লেখ করার জন্য ধন্যবাদ; আমি কেবলমাত্র বিকল্প হিসাবে পরামর্শ দেওয়ার জন্য ছিলাম :-)
ইনগো কারকাত

2
সাবস্ক্রিপশনের চালাক ব্যবহার!
wchargin

6
আপনি দয়া করে একটি ব্যাখ্যা যোগ করতে পারেন? আমি এই সিনট্যাক্সটি আগে দেখিনি, এবং এটি কীভাবে কাজ করে তা আমি জানতে চাই।
চিরসবুজ


2
এই টুইটটি আমার পছন্দ নয় আমি আপনাকে কখনই v:searchforwardসূচক হিসাবে ব্যবহার করার কথা ভাবিনি ।
চিরসবুজ

1

খ্রিস্টান ব্র্যাব্যান্ডের সমাধানের ভিত্তিতে আমি সামনে এলাম

nnoremap <expr> n 'Nn'[v:searchforward].(&fdo=~'search\\|all'?'zv':'')
nnoremap <expr> N 'nN'[v:searchforward].(&fdo=~'search\\|all'?'zv':'')

এই ম্যাপিংগুলি foldopenসেটিংটি মান্য করে


0

আমি সার্চ ইন্ডেক্স প্লাগইন ব্যবহার করছি । খ্রিস্টান ব্র্যাব্যান্ডের উত্তরটি ব্যবহার করতে তবে প্রতিবার আমি টাইপ করলে nবা ম্যাচ নম্বর প্রদর্শন করার জন্য প্লাগইনটির কার্যকারিতা রাখি বা N, আমি এটি আমার ভিএমআরসিতে রেখেছি:

nnoremap <silent><expr> n (v:searchforward ? 'n' : 'N') . ":SearchIndex<CR>"
nnoremap <silent><expr> N (v:searchforward ? 'N' : 'n') . ":SearchIndex<CR>"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.