有一个Vimscript相当于Ruby的'any'吗

有一个Vimscript相当于Ruby的'any'吗,vim,lambda,Vim,Lambda,我想在我的vimrc中重构此条件: if &term =~ "xterm" || &term =~ "screen" || &term =~ "builtin_gui" " do some stuff... endif 在Ruby中,我可能会这样做: names = ["xterm", "screen", "builtin_gui"] if names.any? { |n| &term =~ n } " do some stuff... endif

我想在我的vimrc中重构此条件:

if &term =~ "xterm" || &term =~ "screen" || &term =~ "builtin_gui"
  " do some stuff...
endif
在Ruby中,我可能会这样做:

names = ["xterm", "screen", "builtin_gui"]

if names.any? { |n| &term =~ n }
  " do some stuff...
endif
我知道Vimscript没有Ruby块之类的功能,但是有没有内置函数可以让我按照这些思路做一些事情?

不太可能

let names = ["xterm", "screen", "builtin_gui"]

if len(filter(names, '&term =~ v:val')) > 0
endif
不是真的

let names = ["xterm", "screen", "builtin_gui"]

if len(filter(names, '&term =~ v:val')) > 0
endif
=~一个regexp匹配。因此,您可以使用regexp的全部功能。这两种方法中的任何一种都应该有效:

&term =~ 'xterm\|screen\|builtin_gui'
&term =~ join(names, '\|')`
=~一个regexp匹配。因此,您可以使用regexp的全部功能。这两种方法中的任何一种都应该有效:

&term =~ 'xterm\|screen\|builtin_gui'
&term =~ join(names, '\|')`

哦,太酷了,我忘了它有过滤器。不完全是我想要的,但很高兴知道。这里有索引,它似乎更有用。哦,酷,我忘了它有一个过滤器。不完全是我想要的,但很高兴知道。这里有索引,它似乎更有用。Facepalm。真不敢相信我竟然忽略了这一点。真不敢相信我忽略了这一点。