vim - 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
如何过滤我的文本文件而不会意外破坏它或让我的功能正常工作?
解决方案
如果您真的想“快速了解一下”,您可以简单地执行以下操作:
:g/pattern
它打印匹配的行而不影响缓冲区。
推荐阅读
- applet - 从 javacard 中删除小程序时出现 6F00 错误
- android - 如果是 PrimaryKey 自动增量,则 DTO 字段的值
- python - 数据框返回空 - BeautifulSoup
- excel - 将特定列从 .txt 传输到 Excel
- javascript - 无法使用 formdata 向控制器发送值
- javascript - 自定义 React 组件样式被 Material-UI 样式覆盖
- c# - 有没有办法找到字符串中每个(指定)单词的索引,并有办法在找到(指定)单词时运行方法
- javascript - 使用反应将文件上传到firebase-firestore
- java - 嵌套异常是 org.hibernate.type.SerializationException:无法反序列化
- javascript - 数组遍历重复偶数同一个数组