如果我有几个代码段,看起来像:
// XXX DEBUG
printf("example code");
int y = 6;
// XXX END DEBUG
我想在Vim中运行一个命令来注解掉XXX DEBUG
和XXX END DEBUG
之间的位:
// XXX DEBUG
// printf("example code");
// int y = 6;
// XXX END DEBUG
我试过使用:g
和交换机
:g#^.*// XXX DEBUG#.,#^.*// XXX END DEBUG#normal I//
但这只是我的土地错误消息E492: Not an editor command: .,#^.*// XXX END DEBUG#normal I//
1条答案
按热度按时间7gcisfzg1#
不能在范围中使用替代分隔符。一个很好的理由是,当你执行
<whatever>foo<whatever>
时,很难知道你指的是/foo/
还是?foo?
。在:help :g
或:help :s
中使用替代分隔符是可能的,因为在这种情况下不可能出现这种混淆。因此,您可以保留“
:global
“部分的#
s,但您需要在:normal
的范围内转义//
:或者使用
\v
来改变图案的“魔力”:现在,这工作:
算是吧
照原样,您将
//
前置到匹配行 * 之间 * 的行,但由于缺少偏移量,也前置到匹配行本身:在下面的固定版本中,
:normal
的范围必须从匹配行下面的行开始,所以你可以使用.+
或简单的+
,/re/-
。它应该是这样的: