vimですべてのスペースを無視して検索する方法(および関数にする方法)

vimですべてのスペースを無視して検索する方法(および関数にする方法)

文字間のスペース(または特に改行)を無視して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

しかし、この機能をどのように変更するのかわかりません。

ベストアンサー1

これ視覚的に選択されたテキスト検索Vim Tips Wikiのトピックには、単語間のスペースの量と種類に関係なく、現在の視覚的選択を検索するためのマップがあります。*現在の選択を検索(スペースを無視)するために、組み込みマッピングのように使用できます。とても便利です!

しかし、スペースには無関心で、テキストのどこにでも改行(および他のスペース?)を許可したいと思います。これも可能です。以下を使用して、現在の検索モード(/Vimscriptを介してアクセス可能なレジスタに保存されている@/)を調整できます。

:let @/ = join(split(@/, '\zs'), '\_s*')

最初は、現在の(リテラル)検索を単一の文字のリストに切り取り(または!split()などの既存の正規表現では正しく機能しません)、それを再結合し(すべての数のスペースに一致)、次に返します。検索レジスタ。\+\|join()\_s*

this()に基づいて地図を作成したり、:nnoremap <Leader>/ :let ...<CR>上記のビジュアルモード地図に統合したりできます。

おすすめ記事