Regular-Expression

如何在vim中搜尋忽略所有空格(並使其成為一個函式)

  • September 20, 2018

如何在 vim 中搜尋字元串,從而忽略任何字元之間的任何空格(或特別是換行符)?

並且可能因此製作了一個可以搜尋忽略所有空格的函式。

我找到了一種在正則表達式中忽略空格的方法。沒有真正的優雅。只需插入\s*任何字元之間。因此,確實需要使其成為一個功能。

https://stackoverflow.com/questions/4590298/how-to-ignore-whitespace-in-a-regular-expression-subject-string

我還找到了一種在 vim 中搜尋換行符的方法:

vim search around line breaks

但是,僅當換行符存在空格時,最後一個連結才提供解決方案。但是我想忽略所有空格。

所以當我在這裡搜尋 helloworld 時:

blabla blalba hell  
oworld bla bla h  
elloworl bla bla  

儘管換行,它應該匹配它兩次。

我想我基本上需要稍微改變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 Tips Wiki 上的搜尋視覺選擇的文本主題有一個映射,用於搜尋目前的視覺選擇,而不管單詞之間的空格的數量和類型。您可以像內置*映射一樣使用它來搜尋(忽略空格)以查找目前選擇。非常便利!

但是,您希望對空格更加漠不關心,允許在文本中的任何位置換行(和其他空格?)。這也是可能的。您可以使用以下命令調整目前搜尋模式(儲存在 register 中/,可通過 Vimscript 訪問@/):

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

split()一個將目前(文字)搜尋切割成單個字元的列表(因此它不能與現有的正則表達式一起正常工作,如\+or \|!),然後join()將它與\_s*(匹配任意數量的空格)一起返回,並分配它返回搜尋寄存器。

您可以從該 ( :nnoremap <Leader>/ :let ...<CR>) 建構映射,或將其合併到上述可視模式映射中。

引用自:https://unix.stackexchange.com/questions/470311