我想从以下几行删除百分比标记:
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()))}
].光标在第一个%的行上。
:,/%/s/%//或者:
:,/%/normal ^x预期:所有百分比的分数都去除了。结果:只删除前2%的分数。
发布于 2012-07-24 23:42:23
问题1:
您的范围:,/%/大致从当前行开始翻译。范围的末尾将是与当前游标行之后的/%/匹配的下一行。这将产生2行。有关详细信息,请参阅:h :,。
问题2:
要做到这一点,有很多方法。您已经提供了一个normal和一个s///方法。修复命令的一种方法是调整范围。下列之一将起作用:
,/\]\./-1匹配结束的].,然后减去一行,/^\s*%\(.*\n\s*%\)\@!/使用负面的前瞻性来搜索不以%开头的行。你们可以一起使用:
:,/\]\./-1s/%//
:,/^\s*%\(.*\n\s*%\)\@!/s/%//
:,/\]\./-1norm ^x
:,/^\s*%\(.*\n\s*%\)\@!/norm ^x使用宏的替代方案。在这种情况下使用宏的好处是,当错误发生时,它就停止了。基本上,您可以记录一个宏来搜索%,然后删除它,然后移到下一行。大量执行此宏。当找不到%时,宏将停止。
qq0f%xjq999@q在这种情况下,宏是我的首选方法,因为我不需要做任何疯狂的模式,也不需要去寻找块的末尾。
如果您允许使用可视模式,我建议使用vi]k:norm ^x
有关更多信息,请参见:
:h range
:h :,
:h /\@!
:h q
:h @q
:h i]发布于 2012-07-24 20:55:09
你的第一个例子就是说..。从当前位置到下一个%发出命令s/%//.
你可能想做的是
:,$ s/%//这就是说,对于从当前位置到文件($)末尾的每一行,发出命令s/%//
如果你不想在文件结束前做这件事,你可以
:set number它将显示行号,然后执行以下操作
:2,8 s/%//,它只对2-8中的所有行发出命令。
发布于 2012-07-25 05:00:12
您似乎正在以一种应该使用:,/%/的方式使用:g/%/。您可以这样使用命令::g/%/s/%//或:g/%/norm f%x
有关“全局”命令的更多信息,请参见:help :g。这基本上是在与模式匹配的行上执行命令模式命令。您的版本,:,/%/从当前行操作到匹配"%“。这将移除前两行,因为当前行有一行,而您正在搜索有一行的行(下一行)。您可以在:help :range中阅读更多有关这方面的内容。使用此选项的更好方法是使用仅位于最后一行的搜索项。例如,:,/]/s/%//或:,/]/norm f%x。
https://stackoverflow.com/questions/11639015
复制相似问题