删除标记之间的文本块
delete blocks of text between marks
我有一个包含大量代码块的大型 Rnw 文件。我需要验证代码,但代码块外的文本妨碍了我。我想自动删除代码块之外的所有内容。代码块由两个 <
<<name of block and options>>=
[R code block]
@
有没有一种简单的方法可以删除文件中除了“<<..>>=”和“@”之间的每一行,包括在内?我可以创建一个宏来删除“.”中的所有内容。 (当前行)到'^<<'(代码块的开头),但这很乏味且容易出错。当然,这不是正确的 vimmish 做事方式。
谢谢,抄送。
您可以使用 :global
做到这一点,但指定反向范围会增加复杂性以正确匹配缓冲区开头和结尾的行。由于您可能不想保留包含已删除部分的原始文件,只需查看它,我会以相反的方式进行:抓取标记之间有趣的内容,并将它们放入暂存缓冲区以供查看。使用通常的技巧将大写寄存器附加到它给出以下解决方案:
:let @a = '' | execute 'global/^<<.*>>=$/+1,/^@$/-1yank A' | new | put a
它的核心是 /^<<.*>>=$/+1,/^@$/-1
范围,它选择两个不同标记线内的 R 代码块。
我有一个包含大量代码块的大型 Rnw 文件。我需要验证代码,但代码块外的文本妨碍了我。我想自动删除代码块之外的所有内容。代码块由两个 <
<<name of block and options>>=
[R code block]
@
有没有一种简单的方法可以删除文件中除了“<<..>>=”和“@”之间的每一行,包括在内?我可以创建一个宏来删除“.”中的所有内容。 (当前行)到'^<<'(代码块的开头),但这很乏味且容易出错。当然,这不是正确的 vimmish 做事方式。
谢谢,抄送。
您可以使用 :global
做到这一点,但指定反向范围会增加复杂性以正确匹配缓冲区开头和结尾的行。由于您可能不想保留包含已删除部分的原始文件,只需查看它,我会以相反的方式进行:抓取标记之间有趣的内容,并将它们放入暂存缓冲区以供查看。使用通常的技巧将大写寄存器附加到它给出以下解决方案:
:let @a = '' | execute 'global/^<<.*>>=$/+1,/^@$/-1yank A' | new | put a
它的核心是 /^<<.*>>=$/+1,/^@$/-1
范围,它选择两个不同标记线内的 R 代码块。