2015-01-27 67 views
1

我想在我的vimrc重构这个条件:Vimscript是否等价于Ruby的`any?'

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块东西,但是有没有内建的功能可以让我按照这些方法做点什么?

回答

4

=~一个正则表达式匹配。所以你可以使用正则表达式的全部功能。这些都应该工作:

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

Facepalm。我不能相信我忽略了这一点。 – ivan 2015-01-27 01:41:00

1

不是真的

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

if len(filter(names, '&term =~ v:val')) > 0 
endif 
+0

哦酷,我忘了它有一个过滤器。不是我正在寻找的东西,但很高兴知道。 – ivan 2015-01-27 01:34:51

+1

有'index()',这在这里似乎更有用。 – blueyed 2015-01-28 19:40:53

相关问题