Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在vim中获取该循环中的变量值_Vim - Fatal编程技术网

如何在vim中获取该循环中的变量值

如何在vim中获取该循环中的变量值,vim,Vim,我尝试使用循环筛选多个单词,但以下操作不起作用: function! Myfilter (...) for s in a:000 v/s/d endfor endfunction 它删除所有不包含字母s而不是s值的行。如何在语句v/s/d中获取s的值?该命令正是为以下任务而设计的: 计算表达式并将其作为Ex命令执行: 一个更有效的解决方案是根据参数组合一个正则表达式,并使用它删除不匹配的行 exe 'v/\('.join(a:000, '\|').'\)/d_' 删除

我尝试使用循环筛选多个单词,但以下操作不起作用:

function! Myfilter (...)
   for s in a:000
     v/s/d 
   endfor
endfunction
它删除所有不包含字母s而不是s值的行。如何在语句v/s/d中获取s的值?

该命令正是为以下任务而设计的: 计算表达式并将其作为Ex命令执行:


一个更有效的解决方案是根据参数组合一个正则表达式,并使用它删除不匹配的行

exe 'v/\('.join(a:000, '\|').'\)/d_'
删除除包含函数所有参数的行以外的所有行

示例缓冲区

函数调用示例

示例结果

使用regex lookahead以任意顺序匹配单词。这是示例正则表达式在替换后的样子,为了清晰起见,没有转义字符:

:v/(.*word1)@=(.*word2)@=(.*word3)@=/d

这只保留包含任何参数的行。我想他只想保留包含所有论点的行。@JimU。你说得对。一路上我的逻辑颠倒了。
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