vim:注释/取消注释包含字符串的文件中的所有行

时间:2014-01-05 11:12:36

标签: vim vi

我有一个很大的python文件,如下所示:

@login_required
@user_passes_test(lambda u: u.is_superuser)
def foo():
    //function body

@login_required
@user_passes_test(lambda u: u.is_superuser)
def foobar():
    //function body
.
.
.

像这样,文件中有很多功能。我想评论包含模式login_requireduser_passes_test的所有行。如何评论这些线?

我使用tComment插件。所以我可以使用gcc键映射来切换行注释。它可以用吗?

项目中还有其他文件包含类似的功能。那么如何在项目的所有文件中注释这些行呢?

如果我需要取消注释那些行怎么办?

4 个答案:

答案 0 :(得分:5)

:global/{pat}/{cmd}命令将在每个匹配模式{cmd}上运行命令{pat}。您可以通过:normal命令执行tComment命令。它们一起看起来像这样:

:g/@login_required/norm gcc

如需更多帮助,请参阅:

:h :g
:h :norm

答案 1 :(得分:3)

如果你想评论某些行,然后稍后取消注释相同的行,我会在注释中使用某种“标记”来使工作更轻松。

所以要发表评论,例如:

1,$s/^\(.*@login_require\)/#FOO \1/

然后取消注释:

1,$s/^#FOO //

您可以选择#FOO,以免在其他任何地方使用它用于其他目的。您甚至可以选择更简单的内容,例如## ...真正以#开头的任何您尚未使用的内容。

答案 2 :(得分:1)

这不适用于VIM,但我认为更容易在所有项目中注释掉多个文件:

sed -i 's/@login_required/#login_required/g' *

或目录中的文件:

find ./ -type f -exec sed -i 's/@login_required/#login_required/g' {} \;

答案 3 :(得分:0)

包含string的注释行:

:%s/\(.*string\)/# \1/c
  • %s-全局替代
  • \(.*string\)-匹配模式
  • # \1-替换,\1用于匹配的模式
  • c-替换前先确认

类似地,取消注释:

:%s/# \(.*string\)/\1/c