首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Regex在Vim中注释/取消注释

使用Regex在Vim中注释/取消注释
EN

Stack Overflow用户
提问于 2014-01-25 19:03:31
回答 4查看 242关注 0票数 1

我试图使用:'<,'>s!^!// !在可视模式下注释掉突出显示的代码。是否可以编辑regex,以便在代码已经注释的情况下取消注释?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-01-26 14:06:33

其他一些答案提到插件。我目前使用的是书呆子评论,它提供了一个ci (注释倒置)命令,它可以满足您的需要。

首先,这里有几种避免注释已经注释掉的行的方法。为了简单起见,我将假设注释字符都在第一列中。要么接受一个范围,比如问题中的Visual '<,'>

代码语言:javascript
复制
:s#^\(// \)\@!#// #
:v#^// #s!^!// !

好的,如果您真的想要一个命令来切换一行是否被注释掉,那么您必须捕获该行最初是否被注释,然后用一个表达式替换:

代码语言:javascript
复制
:%s!^\(// \|\)!\=strpart('// ', strlen(submatch(1)))
代码语言:javascript
复制
:help /\(
:help /\@!
:help :g
:help sub-replace-expression
票数 1
EN

Stack Overflow用户

发布于 2014-01-25 19:32:30

我使用的一个肮脏但用途非常广泛的技巧是利用:normal命令,它将模仿给定范围内的击键序列。

例如,要进行注释,请在可视模式下选择整行(使用V)并输入命令:

代码语言:javascript
复制
:normal i//

这是不言而喻的:i打开编辑模式,//写入它(因为您进入了编辑模式);该命令将应用于每一行,光标定位在行的开头(因为我们用V而不是v选择了整行;否则会变得很棘手)。基于同样的想法,您可以使用以下方法删除可视选择的注释:

代码语言:javascript
复制
:normal xx

(这就像它说的那样:删除前两个字符,就像您在键盘上键入的那样)。

这种方法有几个优点,包括:

  • 如果您使用几种具有不同注释符号({ , /*, //, #, %)的不同语言,这只是改变单个笔画的问题。
  • 您可以真正地创造性地使用正常的命令,因为您可以利用命令的范围标记,并真正地做任何事情: :normal A //Hello world
  • 同样,这感觉很自然,因为您只是简单地用您在选择时使用的击键来输入命令。您甚至可以使用技巧在模式之间切换。
票数 1
EN

Stack Overflow用户

发布于 2014-01-25 19:18:46

嗯,我怀疑你只用一个正则表达式就能做到这一点,这就是为什么蒂姆·波普为此写了一个扩展:

然后,您所要做的就是用gc注释一行或视觉选择,而gc则取消注释!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21354913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档