मैंने Vim शब्द-खोज का उपयोग सीखना शुरू कर दिया है *
और #
जबकि कर्सर वर्तमान शब्द से अधिक है। लेकिन यह खोज वर्तमान फ़ाइल बफर तक सीमित है।
क्या इस खोज को बढ़ाने के लिए कोई कमांड या शॉर्टकट है:
- सभी खुले हुए टैब?
- सभी खोले गए बफ़र्स?
मैंने Vim शब्द-खोज का उपयोग सीखना शुरू कर दिया है *
और #
जबकि कर्सर वर्तमान शब्द से अधिक है। लेकिन यह खोज वर्तमान फ़ाइल बफर तक सीमित है।
क्या इस खोज को बढ़ाने के लिए कोई कमांड या शॉर्टकट है:
जवाबों:
मेरे पास आपकी समस्या का सटीक हल नहीं है, उम्मीद है कि मेरा इससे बेहतर जवाब आएगा। लेकिन इस तरह मैंने सभी बफ़र्स में एक शब्द खोजने की समस्या से निपटा।
" enables to search in all open buffers with :Search <pattern>
command! -nargs=1 Search call setqflist([]) | silent bufdo grepadd! <args> %
nnoremap <left> :cprev<cr>zvzz
nnoremap <right> :cnext<cr>zvzz
पहली पंक्ति Search
तर्क के रूप में खोज पैटर्न के साथ एक कमांड बनाती है , जो परिणाम को एक उपसर्ग सूची में लिखती है। दो अन्य पंक्तियाँ (कम से कम मेरे लिए) बेकार तीर कुंजियों को कुछ उपयोगी बनाती हैं; उन्हें अगली / पिछली खोज में या अगले / पिछले संकलन त्रुटि आदि के लिए कूदने के लिए मैप किया जाता है, वे बस क्विकफिक्स सूची में कदम रखते हैं। आप इसका उपयोग इस प्रकार कर सकते हैं:
:Search foobar
<right>
<right>
…
:cn
या :cp
अगले दस्तावेज़ पर जा सकते हैं।
यह वास्तव में डिफ़ॉल्ट व्यवहार है, हालांकि यह नोटिस करना मुश्किल हो सकता है: *
फिर दूसरे टैब में बदलें और खोज हिट के बीच आगे और पीछे कूदने के लिए कमांड मोड में n
ans N
का उपयोग करें।
यदि आप पहले सभी हिट के लिए हाइलाइटिंग चालू करते हैं तो यह और अधिक समझ में आता है:
:set hlsearch
hlsearch
कि मुझे पता नहीं था, और जिसे मैं एक दिन या किसी और :-) के लिए खोज रहा होगा। हालाँकि, डिफ़ॉल्ट रूप से मैंने * #, n और N को आज़माया है, और यह अन्य फ़ाइल बफ़र्स पर नहीं जाता है ...
n
और N
बफ़र्स कूदो नहीं (वे चारों ओर लपेटते हैं), लेकिन उनके द्वारा लक्षित शब्द को सभी टैब में खोजा जाता है; हिट *
अपने टैब के माध्यम से फिर चक्र पर प्रकाश डाला साथ - वे सभी, एक ही शब्द के साथ प्रकाश डाला जाएगा, ताकि आप उपयोग कर सकते हैं n
और N
एक नई खोज के बिना स्थानीय स्तर पर वहाँ।
hlsearch
सेट नहीं किया है।
जैसा कि मैंने खुद को अक्सर पाया है कि मैं एक (कामचलाऊ) स्क्रिप्ट को मैश कर चुका हूं।
आपको या किसी और को यह उपयोगी लग सकता है।
मूल रूप से यह बफर सूची खोजता है और क्विकफिक्स-विंडो में परिणाम दिखाता है।
दो बुनियादी कमांड जोड़े जाते हैं।
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)