Regex 如何用替换和替换注释vim中的几行

Regex 如何用替换和替换注释vim中的几行,regex,vim,Regex,Vim,假设我有一大堆台词 echo "<br/>"; echo "<pre>"; error_log("whatever"); echo "</pre>"; echo "<br/>"; #echo "<br/>"; #echo "<pre>"; #error_log("whatever"); #echo "</pre>"; #echo "

假设我有一大堆台词

    echo "<br/>";
    echo "<pre>";
    error_log("whatever");
    echo "</pre>";
    echo "<br/>";
    #echo "<br/>";
    #echo "<pre>";
    #error_log("whatever");
    #echo "</pre>";
    #echo "<br/>";
s/^\([\s\t]*\)/\1#/
echo“
”; 回声“; 错误日志(“无论什么”); 回声“; 回声“
”;
我想把它们注释掉,我可以运行这个命令

/^/#

但它把#符号放在行首,而不是第一个单词的前面,所以看起来像下面的几行

#echo“
”; #回声“; #错误日志(“无论什么”); #回声“; #回声“
”;
如何使它看起来更像下面的代码

#echo“
”; #回声“; #错误日志(“无论什么”); #回声“; #回声“
”;

什么是合适的注册表项?

您应该能够使用以下各项:


此正则表达式匹配行开头的任何制表符或空格,然后替换为整个匹配(
&
),后跟一个

您可以执行以下操作:


这会将所有空格和制表符放入变量
\1
中,并在
符号之前还原它们我要做的一件事是转到行的开头(
^
),点击
Ctrl+v
,然后输入行号,后跟
gg
,然后执行
Shift-I
,输入
#
并按
ESC
。我相信有更好的方法,但对我来说似乎很有效:)

有很多方法。这里有一个:

:”另一个:

  • V

  • 使用
    :normal
    在每一行上执行正常模式命令,
    :'另一行:

  • 使用
    qx
    启动宏

  • 在行上第一个可打印字符的正前方插入一个八进制字符,返回到正常模式,然后用
    I#j

  • 使用
    q
    停止录制

  • 使用
    5@x


  • 对于评论,我会依赖插件;许多都是可配置的,并为多种编程语言提供多种注释样式,所有这些都带有一个简短的映射。两个流行的是and。

    我希望我的编辑是正确的。或者
    :'ib:zs在第二个语句中做了什么?@CodeCrack,
    \zs
    前面的内容用于匹配,但没有捕获;仅捕获
    \zs
    之后的内容(以及可选的
    \ze
    )。请参见
    :help\zs
    s/^[ \t]*/&#/
    
    s/^\([\s\t]*\)/\1#/
    
    :'<,'>s/^\s*/\0#