我有一个包含大量代码块的大型Rnw文件。我需要验证代码,代码块之外的文本会受到阻碍。我想自动删除代码块之外的所有内容。代码块由两个<
<<name of block and options>>=
[R code block]
@
是否有一种简单的方法可以删除文件中的每一行除了&#39;&lt;&lt; ..&gt;&gt; =&#39;之间的界限和&#39; @&#39;,包容性?我可以创建一个宏来删除&#39;中的所有内容。&#39; (当前行)到&#39; ^&lt;&lt;&#39; (代码块的开头),但这很乏味且容易出错。当然,这不是正确的做事方式。
谢谢,CC。
答案 0 :(得分:1)
您可以使用:global
执行此操作,但指定反向范围会增加复杂性,以正确匹配缓冲区开头和结尾处的行。由于您可能不希望将原始文件与已删除的部分一起保留,只需查看它,我会反过来:抓住标记之间的有趣内容,并将它们放入临时缓冲区进行查看。使用通常的yanking技巧将大写寄存器附加到它上面,给出了以下解决方案:
:let @a = '' | execute 'global/^<<.*>>=$/+1,/^@$/-1yank A' | new | put a
其核心是/^<<.*>>=$/+1,/^@$/-1
范围,它选择两个不同标记线内的R代码块。