2013-02-21 26 views
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! @a

回答

1

您可以使用宏。

假設你現在在第一行

qa //register a macro to a 
I 
" 
<esc> 
A 
" 
<esc> 
j 
q 
[email protected] // here change 4 to the total line number minus 1 of your file 
+0

但我認爲將是更好的使用它的行範圍。像這樣:5,10norm! @a – kharandziuk 2013-02-21 12:32:34

+0

@MaxKharandziuk你可以用'5g'跳到5,然後'5 @ a'。 – pktangyue 2013-02-21 12:35:07

1

一個簡單的方法是記錄你與一條線做什麼,然後使用該宏與許多是。
要錄製的命令註冊一個:

qaI"<Esc>A"<Esc>jq 

然後你可以重複:

[email protected] 

哪裏N是要重複它的行數。

0

您可以使用I-「和** A-」標記一行塊,只需先使用Ctrl-Q(或Ctrl-V)選擇塊並移動光標以選擇您想要的。

4

我會使用從非空白貪婪匹配非空白,就像這樣:

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

相反的%,您可以指定任何[range],像往常一樣。

+0

+1您的正則表達式解決方案比我的好多了! – 2013-02-21 12:38:14

+0

+1使用regx的好方法 – pktangyue 2013-02-21 12:43:05

+1

@Fredrik:謝謝;儘管我不是高爾夫球手,但我看到了你的想法並且認爲「必須有更好的方式」:-) – 2013-02-21 12:59:29

0

另一種選擇是使用:normal在每一行上執行正常的命令。在I以下的情況下在行的開頭插入A並追加到最後。

:%norm I"^[A" 

哪裏^[CTRL +vESC。有關引用的更多信息,請參閱: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 
相關問題