如何在 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  

尽管有换行符,它应该匹配两次。

我想我基本上需要稍微改变一下 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*(匹配任意数量的空格),并分配它返回到搜索寄存器。

您可以根据该 ( ) 构建映射:nnoremap <Leader>/ :let ...<CR>,或将其合并到上面提到的视觉模式映射中。

答案2

这个解决方案https://stackoverflow.com/questions/20053907/how-can-i-get-vim-find-to-ignore-whitespace指出可能适合您的情况的视觉解决方案。

相关内容