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

问题描述 投票:1回答:4

我有一个很大的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键映射切换行注释。可以用吗?

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

如果我需要取消注释这些行,我该怎么办?

vim vi
4个回答
5
投票

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

:g/@login_required/norm gcc

有关更多帮助请参阅:

:h :g
:h :norm

3
投票

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

所以要评论,例如:

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

然后取消注释:

1,$s/^#FOO //

您可以选择#FOO,以免在其他地方用于其他目的。你甚至可以选择像##这样简单的东西......真正的任何以#开头的东西,你还没有使用过。


1
投票

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

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

或者目录中的文件:

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

0
投票

包含string的评论专栏:

:%s/\(.*string\)/# \1/c
  • %s - 全球替代品
  • \(.*string\) - 匹配的模式
  • # \1 - 替换,\1是匹配的模式
  • c - 在替换前确认

同样,要取消注释:

:%s/# \(.*string\)/\1/c
© www.soinside.com 2019 - 2024. All rights reserved.