satır aralarında vim arama


12

Vim'de bir LaTeX belgesini düzenlerken, çoğu zaman bir cümle aramak istiyorum. Satırları sarmak için LaTeX kurulumum olduğu için, bazen öbeğin yarısı bir satırda, diğer yarısı bir sonraki satırda olacak. Böyle bir durumda, arama aradığım şeyi bulamaz. Yani mesela

blah blah blah hello
world blah blah blah

kullanarak arama yaparken /hello world, aradığımı bulamıyorum. Beni istediğim yere götürmek için bu aramayı değiştirmenin hızlı ve kolay bir yolu var mı? Ya da daha iyisi, vim'e herhangi bir beyaz boşluğu (boşluk, sekme, yeni satır) arama dizesindeki bir boşlukla eşleştirmesini söylemenin bir yolu mu?

Yanıtlar:


15

Daha fazla arama yaptıktan sonra, bunu yapmanın en kolay yolu gibi görünüyor \_s. Yani mesela:

/hello\_sworld

4
hello\_s\+worldElbette aralarında birden fazla boşluk karakteri olup olmadığını isteyebilirsiniz .
Wodin

5

Bu sorun http://vim.wikia.com/wiki/Search_across_multiple_lines adresinde giderildi . İhtiyacım olanı yapabilen bir işlev dahil.

function! SearchMultiLine(bang, ...)
  if a:0 > 0
    let sep = (a:bang) ? '\_W\+' : '\_s\+'
    let @/ = join(a:000, sep)
  endif
endfunction
command! -bang -nargs=* -complete=tag S call SearchMultiLine(<bang>0, <f-args>)|normal! /<C-R>/<CR>

Sonra kullanarak çok satırlı arama yapabilirsiniz :S hello worldve bunu dönüştürecek hello\s\+worldve arayacaktır. Bir başka güzel özellik de, bu yeni aramayı arama geçmişine de ekleyecek olmasıdır. Bu, q/gerektiğinde kullanarak geri dönmenizi ve aramayı değiştirmenizi sağlar . İle ikame yapmak için de kullanılabilir :%s//new thing/g. Bunun dezavantajı, incsearchetkinleştirdiyseniz kullanmamasıdır.


3

Bildiğim yol zor değil, ama biraz sıkıcı. Arama sorgunuzdaki her alanı aşağıdakiyle değiştirin:

[ \t\n]\+

(. İşaretinden sonraki boşluğa dikkat edin [.) Bu, düzenli ifade eşleştirme sözdizimidir. Bozuldu, şu anlama gelir:

  • [...] köşeli ayraç içindeki karakter listelerinden herhangi biriyle eşleşmek anlamına gelir.
  • \t Sekme
  • \n Newline
  • ...\+ "Bir" terimi, öncekilerden bir veya daha fazlasıyla eşleşir.

Normal ifadeler hakkında daha fazla bilgi için vim'e sorabilirsiniz:

:help regexp
:help usr_27

1

[ \t\n]*Boşluk yerine şahsen kullanırım . Bu, '', sekme ve yeni satırın sıfırında veya daha fazlasında eşleşir. Bu şekilde, arama deseninizin bir örneği satır kesmesine yayılır, ancak diğeri eşleşmezse her ikisi de eşleştirilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.