【问题标题】:How to add user command to vi/vim to have multiple conditions to search the content?如何将用户命令添加到 vi/vim 以具有多个条件来搜索内容?
【发布时间】:2021-03-15 02:38:54
【问题描述】:

我们的服务器只有 vi/vim 来检查日志文件,我觉得在 vi 中搜索是痛苦和有限的。 我想知道是否可以在路径中提供一个可执行文件,然后使用vi 用户命令调用它,并且用户命令能够接受多个条件,如A=value1 && B=value2A=value1 || B=value2 等,然后它搜索内容在打开的vi 编辑器中,并将光标放在匹配的文本中。

如果可能,请描述一下步骤。

【问题讨论】:

  • 使用基本的正则表达式语法和 vim 的本机搜索命令可以涵盖大部分搜索任务。您的条件会有多复杂?
  • 由于 vim 搜索允许正则表达式,因此可以处理/搜索每种正则语言。极不可能有一个条件,不能用 vim 搜索,但可以用另一个通用搜索来搜索。这种情况很可能需要一个特定的解释器(也就是一个有记忆的脚本)。所以如果你提供一个确切的例子,你会在这里问我们取得更大的成功

标签: vim vi vim-plugin


【解决方案1】:

如果您的机器上实际上是 Vim,您应该能够利用“快速修复”功能。简而言之,您可以:

  • 向 Vim 提供位置列表,
  • 可选择告诉 Vim 如何解析该列表,
  • 使用:cnext:lprevious 等命令浏览该列表,
  • 在特殊窗口中显示该列表,
  • 对列表中的每一行进行批量操作。

在最简单的情况下,您假设的外部程序会输出一个以 Vim 已经理解的方式格式化的列表,例如:

filename.txt:3067:12:some text
filename.txt:4321:7:some text

可以“直接”输入到 Vim:

$ vim -q <(yourcommand)

# also open the quickfix window
$ vim -q <(yourcommand) +cwindow

或通过一些文件:

$ vim -q yourfile

这一切都可以在 Vim 中通过告诉它使用你的程序而不是 grep 来完成 :grep 命令:

set grepprg=yourcommand

然后做:

:grep <your arguments>

参考资料:

:help quickfix
:help :cnext
:help :lprevious
:help -q
:help -+c
:help :cwindow
:help :grep
:help 'grepprg'
:help 'grepformat'

【讨论】:

    猜你喜欢
    • 2018-04-10
    • 1970-01-01
    • 2012-02-20
    • 2020-03-27
    • 2011-01-20
    • 1970-01-01
    • 2014-03-03
    • 2019-10-08
    • 1970-01-01
    相关资源
    最近更新 更多