我有一个带有简单文本行的文本文件。我想为 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
使用命令后所有行(除了提供的单词(将被删除。