Vim sözcük aramayı öğrenmeye başladım *ve #imleç geçerli sözcüğün üzerindeyken. Ancak bu arama, geçerli dosya arabelleği ile sınırlıdır.
Bu aramayı genişletmek için bir komut veya kısayol var mı:
- tüm açık sekmeler?
- tüm açık arabellekler?
Vim sözcük aramayı öğrenmeye başladım *ve #imleç geçerli sözcüğün üzerindeyken. Ancak bu arama, geçerli dosya arabelleği ile sınırlıdır.
Bu aramayı genişletmek için bir komut veya kısayol var mı:
Yanıtlar:
Sorununuz için kesin bir çözümüm yok, umarım benimkinden daha iyi bir cevap gelir. Ancak tüm arabelleklerde bir kelime bulma sorununu bu şekilde ele aldım.
" 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
İlk satır Search, sonuçları bir hızlı düzeltme listesine yazan argüman olarak arama deseni ile bir komut oluşturur . Diğer iki çizgi (en azından benim için) işe yaramaz ok tuşlarını yararlı bir şeyle eşleştirir; bir sonraki / önceki aramaya veya bir sonraki / önceki derleme hatasına vb. atlamak için eşlenirler, sadece hızlı düzeltme listesine adım atarlar. Bunu aşağıdaki gibi kullanabilirsiniz:
:Search foobar
<right>
<right>
…
:cnveya yazabilirsiniz :cp.
Fark edilmesi zor olsa da aslında varsayılan davranıştır: *daha sonra başka bir sekmeye geçin ve arama isabetleri arasında ileri ve geri atlamak için komut modunda nans kullanın N.
Öncelikle tüm isabetler için vurgulamayı açarsanız, bu daha anlamlı olabilir:
:set hlsearch
hlsearchbu yüzden bilmiyordum ve hangi bir gün ya da başka bir arama olurdu :-). Ancak, varsayılan olarak * #, n ve N'yi denedim ve diğer dosya tamponlarına atlamıyor ...
nve Narabellekleri atlamazlar (etrafına sarılırlar), ancak hedefledikleri terim tüm sekmelerde aranır; isabet *Sekmelerinizin aracılığıyla sonra döngüsünde vurgu bulunan - kullanabilirsiniz yüzden hepsi aynı terimle vurgulanır nve Ntaze bir arama olmadan yerel orada.
hlsearchayarlamadıysanız olmayabilir .
Kendimi sık sık bunu yaparken buldum gibi (geliştirilebilir) bir komut dosyası ezilmiş.
Siz veya bir başkası faydalı olabilir.
Temel olarak arabellek listesini arar ve sonucu quickfix penceresinde gösterir.
İki temel komut eklenir.
Search <pattern> : Tüm arabellekleri ara <pattern>.Search1 <pattern>: Tüm arabellekleri ara <pattern>, ancak her arabellek için yalnızca ilk sonucu göster. Genellikle işlev, değişkenin fookullanıldığı (veya ne olursa olsun) tüm arabellekleri listelemek için kullanışlıdır .:Search! fooSonuçlara eklemek için bang ( ) kullanın .
Ek olarak GSearchve komut dosyası GSearch1ile Searchregex sınırlayıcı ekleyin, örneğin:
foo -> /foo/
Nereye eklenirse GSearchbeklenir.
jBayrak hep atlamayı önlemek için eklenir.
Hata listelemesini önlemek ve aynı zamanda kodu kısa tutmak için bazı hack'ler vardır. try / catchbiraz hantal 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)