যেহেতু আমি নিজেকে প্রায়শই এই কাজটি করতে দেখলাম আমি একটি (অস্থাবর) স্ক্রিপ্টটি ছড়িয়ে দিয়েছি।
আপনি বা অন্য কেউ এটি দরকারী মনে হতে পারে।
সংক্ষিপ্ত ব্যাখ্যা:
মূলত এটি বাফার তালিকা অনুসন্ধান করে এবং কুইকফিক্স-উইন্ডোতে ফলাফল প্রদর্শন করে।
দুটি বেসিক কমান্ড যুক্ত করা হয়েছে।
Search <pattern>
: এর জন্য সমস্ত বাফার অনুসন্ধান করুন <pattern>
।
Search1 <pattern>
: এর জন্য সমস্ত বাফার অনুসন্ধান করুন <pattern>
তবে প্রতিটি বাফারের জন্য কেবল প্রথম ফলাফল দেখান। সাধারণত সমস্ত বাফার যেখানে ফাংশন, ভেরিয়েবল তালিকাবদ্ধ জন্য দরকারীfoo
ব্যবহৃত হয় (বা যা কখনও)।
ব্যাং ব্যবহার করুন (:Search! foo
ফলাফলগুলিতে সংযোজন করতে ) ।
উপরন্তু GSearch
এবং GSearch1
যোগ করা হয় যেখানে পার্থক্য সঙ্গে যে Search
স্ক্রিপ্ট অ্যাড Regex বিভেদক, যেমন:
foo -> /foo/
যেখানে হিসাবে GSearch
এটি আবদ্ধ আশা।
দ্য j
পতাকা সবসময় লাফ প্রতিরোধ যোগ করা হয়।
কোড:
একই সাথে কোডটি সংক্ষিপ্ত রাখার সময় ত্রুটি তালিকা রোধ করতে কিছু হ্যাক রয়েছে। try / catch
কিছুটা কষ্টকর ছিল bufdo
।
let s:not_idents = split("/!#$%&\"`´¨'¯()*+,-.:;<=>?¿@[\]^{|}µ¶·¸~±×÷®©«»¬ª°º¹²³¼½¾", '\zs')
" Create a delimited pattern. "
fun! s:Parse_pat(pat)
for c in s:not_idents
if stridx(a:pat, c) == -1
return c . a:pat . c
endif
endfor
echohl Error
echom "Could not delimit pattern '". a:pat ."'"
echohl None
return ''
endfun
fun! s:AllBufSearch(pat, bang, uno, isg)
if a:isg
let pat = a:pat
else
let pat = s:Parse_pat(a:pat)
endif
if pat == ''
return
endif
cclose
let [_buf, _view] = [bufnr("%"), winsaveview()]
let _foldenable = &foldenable
set nofoldenable
" Copy of current qflist. "
let qfc = getqflist()
" Hack to prevent error if no matches. "
call setqflist([{}])
silent execute "bufdo vimgrepadd! " . pat . "j %"
" Restore "
exec "buffer " . _buf
let &foldenable = _foldenable
call winrestview(_view)
" Fix "
let qf = getqflist()
call remove(qf, 0)
" Only one listing per buffer. "
if a:uno
let bn = {}
let i = 0
for m in qf
if has_key(bn, m["bufnr"])
call remove(qf, i)
else
let bn[m["bufnr"]] = 1
call remove(qf[i], "valid")
let i += 1
endif
endfor
endif
if a:bang == "!"
let qf = qfc + qf
endif
" If any matches, copen. "
if len(qf)
call setqflist(qf)
copen
endif
endfun
command! -nargs=1 -bang Search call s:AllBufSearch(<q-args>, "<bang>", 0, 0)
command! -nargs=1 -bang Search1 call s:AllBufSearch(<q-args>, "<bang>", 1, 0)
command! -nargs=1 -bang GSearch call s:AllBufSearch(<q-args>, "<bang>", 0, 1)
command! -nargs=1 -bang GSearch1 call s:AllBufSearch(<q-args>, "<bang>", 1, 1)