0

我有一些这样的文字:

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

我想用引号标记每一行。预期的结果是:

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

我知道我可以在第一行使用I-",对每一行使用点命令。然后是A-"和点命令。但是有很多行,我相信必须有更多的“VIMable”方法。

解决了

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

4

5 回答 5

4

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

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

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

于 2013-02-21T12:34:21.107 回答
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
于 2013-02-21T12:22:30.213 回答
1

一种简单的方法是记录您对一行所做的操作,然后将该宏与一个数字一起使用。
要记录注册 a 的命令:

qaI"<Esc>A"<Esc>jq

然后你可以重复它:

N@a

N您要重复的行数在哪里。

于 2013-02-21T12:23:22.100 回答
0

您可以使用I-"和 **A-" 标记一个行块,只需先使用 Ctrl-Q(或 Ctrl-V)选择块,然后移动光标选择您想要的。

于 2013-02-21T12:28:17.613 回答
0

另一种选择是使用:normal在每一行上执行普通命令。在下面的情况下I,在行首插入A并附加到末尾。

:%norm I"^[A"

+^[在哪里。有关引用的更多信息,请参阅。取决于您的平台+用于引用我的可用。ctrlvesc:h i_ctrl-vctrlq

如果你有 Tim Pope 的环绕声插件,它会变得更短一些。

:%norm yss"

有关更多信息,请参阅

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

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

:h surround
:h yss
于 2013-02-21T14:37:19.143 回答