VimでLaTeXドキュメントを編集するときにフレーズを検索したいことがよくあります。改行のためにLaTeXを設定したので、時には構文の半分が1行にあり、残りの半分は次の行にあります。この場合、検索結果は私が望むものを見つけることができませんでした。例えば
blah blah blah hello
world blah blah blah
検索を使用すると、目的の/hello world
コンテンツが見つかりません。目的の場所に移動するためにこの検索を編集する迅速で簡単な方法はありますか?または、検索文字列でスペース(スペース、タブ、改行文字)をスペースと一致させるようにvimに指示する方法はありますか?
答え1
もっと検索してみると、最も簡単な方法は次のとおりです\_s
。
/hello\_sworld
答え2
この問題はすでに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
検索されます。もう一つの良い機能は、この新しい検索が検索履歴に追加されることです。これによりq/
、必要に応じて戻って検索を編集できます。代替としても使用できます:%s//new thing/g
。欠点は、incsearch
有効にすると使用されないことです。
答え3
私の知る方法は難しくありませんが、少し退屈です。検索クエリのすべてのスペースを次に置き換えます。
[ \t\n]\+
(末尾の空白に注意してください。[
)これは正規表現一致構文です。これを分解すると、次のようになります。
[...]
角かっこ内のすべての文字と一致します。\t
タブ文字です\n
改行文字です...\+
前の項目以上と一致することを示します。
正規表現についてもっと知りたい場合は、vimに尋ねてください。
:help regexp
:help usr_27
答え4
個人的に私はスペースを代わりに使います[ \t\n]*
。これはゼロ以上の ""、タブ、および改行と一致します。これにより、検索パターンの1つのインスタンスが改行文字にまたがるが、他のインスタンスはそうでない場合は両方とも一致します。