无法从vim中的列表中过滤多个项目

时间:2017-04-25 04:00:03

标签: vim

我正在尝试使用代码来过滤列表中的多个项目:

function! Myfilter (...)
   let alltext = getline(1,'$')  
   for s in a:000
     let alltext = filter(alltext, s)
   endfor
   echo alltext
endfunction

我称之为:

:call Myfilter("word1", "word2")

但是,由于s中的值被视为变量而不是文字字符串,因此存在错误。错误是:

Error detected while processing function Myfilter:
line    3:
E121: Undefined variable: word1
E121: Undefined variable: word2

整个alltext打印没有任何过滤。以下修改也不起作用:

filter(alltext, ' ' . s . ' ')
filter(mylist, 'v:val == s')
filter(alltext, 'match(v:val, s)')

问题在哪里,我该如何解决?

2 个答案:

答案 0 :(得分:0)

显示当前缓冲区中包含所有函数参数的行

function! Myfilter (...)
   let alltext = getline(1,'$')  
   for s in a:000
     let alltext = filter(alltext, 'v:val =~ s')
   endfor
   echo alltext
endfunction

示例缓冲区

alpha
word1 beta word2
word1 delta
epsilon

示例通话

:call Myfilter("word1", "word2")

示例结果

['word1 beta word2']

答案 1 :(得分:0)

我找到了以下更简单的形式:

`'v:val =~ s'`