Я пытаюсь следующий код для фильтрации нескольких элементов в списке:

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

И весь весь текст печатается без какой-либо фильтрации. Следующие модификации также не работают:

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

Где проблема и как я могу ее решить?

vim
0
rnso 25 Апр 2017 в 07:00

2 ответа

Лучший ответ

Отображает строки в текущем буфере, которые содержат все аргументы функции

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']
0
Jim U 25 Апр 2017 в 15:50

Я нашел следующую более простую форму для работы:

`'v:val =~ s'`
0
rnso 25 Апр 2017 в 15:01