কল করার পরে কী মিলছে স্ট্রিং পাওয়া সম্ভব: অনুসন্ধান ()


15

একটি উইমস্ক্রিপ্ট-ফাংশনে, l:matchedকল করার পরে search()আমার একটি ভেরিয়েবলের সাথে একটি ম্যাচিং স্ট্রিং অর্পণ করতে হবে এবং আমি ভাবছি যে আমি বর্তমানে যা করছি তার চেয়ে আরও ছোট উপায় আছে কিনা:

let l:pattern   = '\v^Foo: \zs.*'
let l:line      = search(l:pattern)
let l:line_text = getline(l:line)
let l:matched   = matchstr(l:line, l:pattern)

আদর্শভাবে, আমি কিছু চাই

let l:matched = search_text(l:pattern)

মুখোমুখি অবলম্বন getline()। এমন কোনও ভিম ​​ফাংশন আছে যা আমি খুঁজে পেতে অক্ষম বলে মনে করি?


1
দুঃখজনকভাবে, উত্তর নেই।
সাতো ক্যাটসুর

2
প্রতিলিপি: স্থানীয় ভেরিয়েবলগুলি ফাংশনগুলির ডিফল্ট অভ্যন্তর হয় তাই আপনি সম্ভবত l:নেমস্পেসের ঘোষণাটি বর্জন করতে পারেন ।
পিটার রিনকার

2
কোনও ফাংশনে আপনি সম্ভবত এটি করতে পারেন: :let @/="pattern" | norm! ygnএবং রেজিস্টার 0 তে সামগ্রী উপলব্ধ রয়েছে।
খ্রিস্টান ব্র্যাব্যান্ডটি

উত্তর:


7

যেহেতু কার্সারটি ম্যাচের প্রথম চিঠিতে রাখা হয়েছে, তাই আপনি সম্ভবত :normal! y$অনুসন্ধানের পরে কিছু করতে পারেন এবং আপনার স্থানীয় ভেরিয়েবলটিতে নিবন্ধের সামগ্রী পেতে পারেন।

আরেকটি পদ্ধতির, যা আমি এখানে খুব ভালভাবে কাজ করবে বলে মনে করি তা হ'ল পতাকাটির :substituteসাথে ব্যবহার করা n(অর্থাত্ প্রকৃত বিকল্প ছাড়াই ):

function! ActOn(match)
    " do something with the match
    echo a:match
    " [...]
endfunction

function! FindAndCall(regex, func_name)
    execute ':keeppatterns %s/' . a:regex . '/\=' . a:func_name. '(submatch(0))/gn'
endfunction

... এবং যাকে আপনি এরকম ডাকছেন:

:call FindAndCall('^Foo: \zs.*', 'ActOn')

এটি ব্যবহারিকভাবে ActOnএকটি কলব্যাক ফাংশন করে - এটি প্রতিটি ম্যাচের জন্য মূল্যায়ন করা হবে।


1
দ্রষ্টব্য: :sএকটি উপ-প্রতিস্থাপন-এক্সপ্রেশন সহ এবং nপতাকাটি কেবলমাত্র ভিম 7.3.627+ থেকে উপলভ্য। অন্যথায় আপনাকে একটি সত্যিকারের প্রতিস্থাপন করতে হবে (খোঁড়াটি এটি বাফারকে পরিবর্তিত হিসাবে চিহ্নিত করবে)। আপনি সম্ভবত অনুসন্ধানের নিবন্ধ সংরক্ষণ বা পুনরুদ্ধার করতে @/বা ব্যবহার করতে চান :keeppatterns
পিটার রিনকার

2
টাইপ ঠিক করুন: keeppaterns-> keeppatterns। এটি হ'ল E488: Trailing charactersকারণটি কারণটির পিছনে থাকা সন্ধান করা বরং জটিল। ধন্যবাদ!
artemave
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.