我试图使用循环多个单词过滤器,但下面不工作:如何获得变量的值在这个循环中,VIM
function! Myfilter (...)
for s in a:000
v/s/d
endfor
endfunction
它删除不包含字母s
,而不是所有的行值为s
。我如何在声明v/s/d
中获得s
的值?
我试图使用循环多个单词过滤器,但下面不工作:如何获得变量的值在这个循环中,VIM
function! Myfilter (...)
for s in a:000
v/s/d
endfor
endfunction
它删除不包含字母s
,而不是所有的行值为s
。我如何在声明v/s/d
中获得s
的值?
的:execute
命令被精确地用于 此任务计算表达式并执行它作为一个例命令设计:
exec 'v/' . s . '/d'
一种更有效的解决办法是从您的参数构成一个正则表达式,并用它来删除不匹配的行。
exe 'v/\('.join(a:000, '\|').'\)/d_'
删除包含所有的函数的参数
function! Myfilter0 (...)
exec 'v/\(.*' . join(a:000, '\)\@=\(.*') . '\)\@=/d'
endfunction
实施例缓冲器
word1 beta word2
a word1 b word2 c
a word2 b word1 c word3 d
a word2 b word3 c word1 d
word1 delta
epsilon
实施例的函数调用比其他所有行
:call Myfilter("word1", "word2", "word3")
实施例结果
a word2 b word1 c word3 d
a word2 b word3 c word1 d
注
使用正则表达式到先行以任何顺序相匹配的话。这是示例正则表达式在替换之后的样子,并且为了清晰起见没有转义字符:
:v/(.*word1)@=(.*word2)@=(.*word3)@=/d
这只保留包含* any *参数的行。我想他只想保留包含*全部*参数的行。 –
@JimU。你是对的。一路上,我的逻辑倒过来了。 –