改行の周りのvim検索


12

vimでLaTeXドキュメントを編集しているとき、しばしばフレーズを検索したいことがあります。私はLaTeXで行を折り返すように設定しているので、フレーズの半分が1行にあり、残りの半分が次の行にあることがあります。このような場合、検索では探しているものが見つかりません。例えば

blah blah blah hello
world blah blah blah

を使用して検索すると/hello world、探しているものが見つかりません。この検索をすばやく簡単に変更して、目的の場所に移動する方法はありますか?それとも、vimに空白(スペース、タブ、改行)を検索文字列のスペースと一致させるように指示する方法ですか?

回答:


14

さらに検索した後、これを行う最も簡単な方法はのよう\_sです。たとえば、次のとおりです。

/hello\_sworld

4
あなたは欲しいかもしれないhello\_s\+worldもちろん、それらの間に複数の空白文字、があることができれば。
-Wodin

5

この問題はhttp://vim.wikia.com/wiki/Search_across_multiple_linesで対処されました。必要なことを実行できる機能が含まれています。

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>

次に、を使用して複数行の検索を実行できます。これ:S hello worldによりhello\s\+world、変換されて検索されます。もう1つの優れた機能は、これによりこの新しい検索が検索履歴に追加されることです。これにより、q/必要に応じて戻って検索を変更できます。また、で置換を行うためにも使用でき:%s//new thing/gます。これの欠点incsearchは、有効にしている場合は使用しないことです。


3

私が知っている方法は難しくありませんが、それは少し退屈です。検索クエリのすべてのスペースを次のものに置き換えます。

[ \t\n]\+

[。の後のスペースに注意してください。)これは、構文に一致する正規表現です。分解すると、次のことを意味します。

  • [...] は、括弧内の文字のリストのいずれかに一致することを意味します。
  • \t タブです
  • \n 改行です
  • ...\+ 上記の1つ以上に一致することを意味します。

正規表現の詳細については、vimに問い合わせてください:

:help regexp
:help usr_27

1

個人的[ \t\n]*にはスペースの代わりに使用します。これは、ゼロ個以上の ''、タブ、および改行で一致します。これにより、検索パターンの1つのインスタンスが改行にまたがっており、別のインスタンスが改行にない場合、両方が一致します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.