vi语法来注释非注释行(cron)

任何人都知道在vi中是否有可能只用注释replace未注释/非空白行?

如果我想用一些我知道可以使用的东西replace一个注释行:%s / ^#/ ## foo ## / g – 但我正在寻找与此相反的东西。

示例文件:

# Some user's cron # Test comments 00 00 * * * ~/somescript.sh 

预期结果:

 # Some user's cron # Test comments ##DISABLE##00 00 * * * ~/somescript.sh 

 :g/^[0-9\*]/s/^/##DISABLED##/ 

这个“g / RE /”部分select以数字或*字符开头的所有行。 然后,“s / RE / replacement /”在所有选定的行上完成工作。

 :%s/^\([^#]\)/##DISABLE##\1/ 

 sed -i -e 's/^\([^#]\)/#\1/g' /etc/cronfile 

 :%s/^\([#\n]\)\@!/##DISABLE##/g 

^([#\ n])\ @! 意思是“不在行首或换行”

在vim 7.2中为我工作

也许是这样的:

 %s/^\([^#]\)\|!\($\)/##FOO##\1/g 

我知道它与所有这些转义乱七八糟,但第一部分线不以# [^#] ,或者(逃逸pipe道\| )非空行( ^$

 :map q /^[^#]<Enter>0i##DISABLE##<Esc>q 1Gq 

这在vim中有效,但不在股票vi中,它不会对映射进行尾recursion。

如果您使用的是Vim,您可能会对EnhCommentify.vim插件感兴趣,它可以让您轻松切换注释。