优雅而强大的方式来评论/取消注释vim中的特定行

时间:2012-11-28 10:11:55

标签: regex vim

我有一个非常长的脚本R,它绘制了非常复杂的数据。我只使用这些图来直观地了解我在做什么,但我可以在没有绘图的情况下计算结果,显然没有绘制任何东西会让事情变得更快。但有时候,我仍然需要想象一下程序做什么来继续调试它。

为了实现这种“打开或关闭”切换,我遵循这一策略。

对于每个具有与脚本绘图功能相关的命令的行,我在每个相关行的末尾都有一个特定的注释标记#toplot。使用正则表达式替换的功能,然后使用以下命令注释/取消注释这些行。

示例代码:

a <- c(1:10)
b <- a/sin(a)
png('sin.png') #toplot
plot(b)        #toplot
dev.off()      #toplot
print(b)

评论'标记'行:

  :%s/.\+#toplot/###commline###\0/g

我明白了:

a <- c(1:10)
b <- a/sin(a)
###commline###    png('sin.png') #toplot
###commline###    plot(b)        #toplot
###commline###    dev.off()      #toplot
print(b)

取消注释:

  :%s/###commline###//g

我明白了:

a <- c(1:10)
b <- a/sin(a)
png('sin.png') #toplot
plot(b)        #toplot
dev.off()      #toplot
print(b)

我不是计算机科学家,所以我不知道是否有更好,更优雅的方式来执行这些操作。

编辑:重要的是要提到,为了绘制我的数据,我需要经过多轮计算和转换,以便在绘图设备中适应不同类型的数据。为了执行这些操作,我使用历史记录,根据我的需要上下移动。

2 个答案:

答案 0 :(得分:1)

你的方法对我来说很好。

如果你能想出一个捕捉所有与情节相关的线条的正则表达式,你可以取消使用#toplot标记,并让评论替换直接用于该标记。

您没有提及是否重新输入替换或使用历史记录。我肯定会为它定义一个缓冲区本地命令(和/或映射):

autocmd FileType r command! -buffer Comment %s/.\+#toplot/###commline###\0/g
autocmd FileType r command! -buffer Uncomment %s/###commline###//g

(或将:commands!放入~/.vim/ftplugin/r_commands.vim。)

如果您正确定义了文件类型的'comments'设置(例如添加b:###commline###)和'commentstring',您也可以使用其中一个常规评论插件(例如{{ 3}}),它提供了很好的映射来打开/关闭注释。

答案 1 :(得分:0)

这没关系,但是用条件包装每个绘图命令是不是更容易?