文字間のスペース(または特に改行)を無視して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>
上記のビジュアルモード地図に統合したりできます。