首页 > 解决方案 > vglobal 函数中带有参数,将文本文件过滤到临时文件中

问题描述

我有一个文本文件,我想过滤一个模式,以便快速浏览。我在 vim 中的常规方法是通过:v/pattern/d. 这工作正常,但如果我不小心保存了文件,在我进行过滤后,我会丢失未过滤的信息。

为避免这种情况,我寻找一个不能意外破坏原始文本文件的解决方案。

我目前的解决方案是一个函数,我将纺织品读入一个临时文件并在这个文件上运行过滤器。但是,如果我尝试搜索类似^linestart. 此外,我想突出显示搜索模式,它也不能按预期工作。

这是我在 vimscript 中的函数:

function! FilterJournal(pattern)
    :exe 'e ~/tempfile'
    " delete all existing lines
    :1,$d
    :exe 'r ~/journal.txt'
    :exe 'silent v/ ' . a:pattern . '/d'
    " to highlight the search pattern
    :exe 'silent / ' . a:pattern  

endfunction
:command! -nargs=1 Fijo :call FilterJournal("<args>")  

当我运行命令时:Fijo foo我得到了结果,但突出显示不起作用。

当我运行命令时:Fijo ^foo我收到一些错误消息并且临时文件为空:

Error during execution of "function FilterJournal":
Line 6: 
E486: Pattern not found: ^foo

如何过滤我的文本文件而不会意外破坏它让我的功能正常工作?

标签: vimfilterscripting

解决方案


如果您真的想“快速了解一下”,您可以简单地执行以下操作:

:g/pattern

它打印匹配的行而不影响缓冲区。


推荐阅读