首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Ex模式中指定命令的位置

在Ex模式中指定命令的位置
EN

Stack Overflow用户
提问于 2012-07-24 20:44:19
回答 3查看 78关注 0票数 2

我想从以下几行删除百分比标记:

代码语言:javascript
复制
oh_test_() ->
    [
        %{"fold", ?_test(fold(ns()))},
        %{"fold nested", ?_test(fold_nested(ns()))},
        %{"push arg empty table", ?_test(push_arg_empty_table(ns()))},
        %{"push arg table 1", ?_test(push_arg_table1(ns()))},
        %{"push arg nested table", ?_test(push_arg_nested_table(ns()))},
        %{"multicall 0", ?_test(multicall_0(ns()))},
        %{"multicall 1", ?_test(multicall_1(ns()))},
        %{"multicall 2", ?_test(multicall_2(ns()))}
    ].

光标在第一个%的行上。

代码语言:javascript
复制
:,/%/s/%//

或者:

代码语言:javascript
复制
:,/%/normal ^x

预期:所有百分比的分数都去除了。结果:只删除前2%的分数。

  1. 为什么?
  2. 我该怎么做
    • 不使用可视模式,以及
    • 不算电话号码吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-24 23:42:23

问题1:

您的范围:,/%/大致从当前行开始翻译。范围的末尾将是与当前游标行之后的/%/匹配的下一行。这将产生2行。有关详细信息,请参阅:h :,

问题2:

要做到这一点,有很多方法。您已经提供了一个normal和一个s///方法。修复命令的一种方法是调整范围。下列之一将起作用:

  • ,/\]\./-1匹配结束的].,然后减去一行
  • ,/^\s*%\(.*\n\s*%\)\@!/使用负面的前瞻性来搜索不以%开头的行。

你们可以一起使用:

代码语言:javascript
复制
:,/\]\./-1s/%//
:,/^\s*%\(.*\n\s*%\)\@!/s/%//
:,/\]\./-1norm ^x
:,/^\s*%\(.*\n\s*%\)\@!/norm ^x

使用宏的替代方案。在这种情况下使用宏的好处是,当错误发生时,它就停止了。基本上,您可以记录一个宏来搜索%,然后删除它,然后移到下一行。大量执行此宏。当找不到%时,宏将停止。

代码语言:javascript
复制
qq0f%xjq999@q

在这种情况下,宏是我的首选方法,因为我不需要做任何疯狂的模式,也不需要去寻找块的末尾。

如果您允许使用可视模式,我建议使用vi]k:norm ^x

有关更多信息,请参见:

代码语言:javascript
复制
:h range
:h :,
:h /\@!
:h q
:h @q
:h i]
票数 2
EN

Stack Overflow用户

发布于 2012-07-24 20:55:09

你的第一个例子就是说..。从当前位置到下一个%发出命令s/%//.

你可能想做的是

代码语言:javascript
复制
:,$ s/%//

这就是说,对于从当前位置到文件($)末尾的每一行,发出命令s/%//

如果你不想在文件结束前做这件事,你可以

代码语言:javascript
复制
:set number

它将显示行号,然后执行以下操作

代码语言:javascript
复制
:2,8 s/%//

,它只对2-8中的所有行发出命令。

票数 2
EN

Stack Overflow用户

发布于 2012-07-25 05:00:12

您似乎正在以一种应该使用:,/%/的方式使用:g/%/。您可以这样使用命令::g/%/s/%//:g/%/norm f%x

有关“全局”命令的更多信息,请参见:help :g。这基本上是在与模式匹配的行上执行命令模式命令。您的版本,:,/%/从当前行操作到匹配"%“。这将移除前两行,因为当前行有一行,而您正在搜索有一行的行(下一行)。您可以在:help :range中阅读更多有关这方面的内容。使用此选项的更好方法是使用仅位于最后一行的搜索项。例如,:,/]/s/%//:,/]/norm f%x

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11639015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档