如何用集合中的每一行标记?

时间:2013-02-21 12:16:10

标签: vim

我有一些这样的文字:

<datetime>2006-04-28T15:49</datetime>
                <surfaceintervalbeforedive>
                    30.00 
                </surfaceintervalbeforedive>
                <tankdata>

我希望用引号标记每一行。可以预期的结果是:

"<datetime>2006-04-28T15:49</datetime>"
                    "<surfaceintervalbeforedive>"
                        "30.00"
                    "</surfaceintervalbeforedive>"
                    "<tankdata>"

我知道我可以使用 I - “作为第一行和dot-command的每一行。然后 A - ”和dot-command。但是有很多方面,我相信必须有更多的“VIMable”方法。

已解决

我认为最简单的方法是记录像@pktangyue这样的宏并将其应用于这样的范围:1,4norm! @a

5 个答案:

答案 0 :(得分:4)

我使用从非空格到非空格的贪婪匹配,如下所示:

:%s/\S.*\S/"&"/

您可以像往常一样指定任何%,而不是[range]

答案 1 :(得分:1)

您可以使用宏。

假设您现在位于第一行

qa  //register a macro to a
I
"
<esc>
A
"
<esc>
j
q
4@a // here change 4 to the total line number minus 1 of your file

答案 2 :(得分:1)

一种简单的方法是使用一行记录您的操作,然后使用带有数字的宏 要记录命令以注册:

qaI"<Esc>A"<Esc>jq

然后您可以重复:

N@a

N是您想要重复的行数。

答案 3 :(得分:0)

您可以使用 I - “和** A-”来标记一行,只需先使用Ctrl-Q(或Ctrl-V)选择块,然后移动光标选择你想要什么。

答案 4 :(得分:0)

另一种选择是使用:normal在每一行上执行普通命令。在I以下的情况下插入行的开头,A追加到结尾。

:%norm I"^[A"

^[ ctrl + v esc 。有关引用的更多信息,请参阅:h i_ctrl-v。根据您的平台 ctrl + q 引用我的可用信息。

如果你有Tim Pope的surround插件,这会变得有点短。

:%norm yss"

有关详细信息,请参阅

:h :norm
:h I
:h A
:h i_ctrl-v

如果您安装了环绕声,请参阅:

:h surround
:h yss