vimで文字列を検索し、文字間の空白(または特に改行)を無視するにはどうすればよいですか?
そしておそらくそれによってすべての空白を無視して検索できる関数を作成します。
正規表現の空白を無視する方法を見つけました。本当にエレガントではありません。\s*
任意の文字の間に挿入するだけです。したがって、これを関数にすることが本当に必要になります。
https://stackoverflow.com/questions/4590298/how-to-ignore-whitespace-in-a-regular-expression-subject-string
また、vimで改行を検索する方法を見つけました:
vimは改行を検索します
ただし、最後のリンクは、改行がスペースがあった場合にのみ解決策を提供します。ただし、すべての空白を無視したいと思います。
したがって、ここでhelloworldを検索すると、次のようになります。
blabla blalba hell
oworld bla bla h
elloworl bla bla
改行にもかかわらず、2回一致する必要があります。
基本的に、vimリンクから関数を少し変更して検索を次のように変更する必要があると思いました。
h\n?e\n?l\n?l\n?o\n? \n?w\n?o\n?r\n?l\n?d
または:
h\s_?e\s_?l\s_?l\s_?o\s_? \s_?w\s_?o\s_?r\s_?l\s_?d
しかし、そのための機能を変更する方法がわかりません。
視覚的に選択したテキストを検索するVimのヒントWikiにトピックがマッピングを持っている現在の視覚的な選択を検索し、関係なく、量と単語の間にある空白のタイプ。組み込みの*
マッピングのように使用して、現在の選択を検索(スペースを無視)することができます。とても便利な!
ただし、テキスト内の任意の位置で改行(およびその他の空白?)を許可して、空白をさらに無関心にする必要があります。それも可能です。次のコマンドを使用して、現在の検索パターン(レジスタ/
に格納され、Vimscriptからアクセス可能@/
)を調整できます。
:let @/ = join(split(@/, '\zs'), '\_s*')
split()
(リテラル)現在は、個々の文字の一覧に検索する最初のカット(それはのような既存の正規表現のもので正しく動作しませんので、\+
または\|
!)、その後、join()
一緒に戻ってそれをよ\_s*
(空白の任意の量に一致する)、および譲受人それ検索レジスタに戻ります。
その(:nnoremap <Leader>/ :let ...<CR>
)からマッピングを作成するか、これを上記のビジュアルモードマッピングに組み込むことができます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加