递归搜索VIM中的模式



我有一个带有简单文本行的文本文件。我想为 vim(和 gvim(文本编辑器创建一个

的函数
can be sent a variable number of patterns and 
it should find lines will all patterns (in any order) 
and keep only these lines 
while deleting the rest. 

我搜索了网络并找到了一些有用的链接,但没有一个可以完成上述所有内容:

以下将找到并删除所有不包含模式的行:

 :v/pattern/d

可以用脚本进行多个搜索和突出显示,例如MultipleSearch http://www.vim.org/scripts/script.php?script_id = 479。Boolean逻辑搜索可以使用LogiPat脚本https://vim.sourceforge.io/scripts/script.php?script_id=1290进行。还可以使用一个过滤软件包,但我无法正常工作:http://www.vim.org/scripts/script.php?script_id=2759

搜索和保持与多种模式的线路和:

":v/.*pattern1&.*pattern2/d"

但我每次都输入代码。

如何创建一个递归运行:v/pattern/d的函数以找到包含所有模式的线?我希望该功能可以以:

运行
:Myfn pattern1 pattern2 pattern3

编辑:我尝试为此功能编写以下代码,并尝试使用vim内的Linux Grep命令:

:function Myfn (Title, ...)
  : let outstr=""
  : for s in a:000
  :   outstr=!echo outstr | grep s
  : endfor
  : return outstr
 : endfunction

但是我会有以下错误:

Not an editor command:   :   outstr=!echo outstr | grep s

带有或

:v/pattern1|pattern2|pattern3/d

:v/pattern1&.*pattern2&.*pattern/d

任何订单

:v/.*pattern1&.*pattern2&.*pattern3/d

(对不起,您已经在解决方案中已经有了这个(

您可以创建命令Keepword

com! -nargs=* Keepword v/v<args>/d

并将其称为:

Keepword word1|word2|word3

使用命令后所有行(除了提供的单词(将被删除。

最新更新