2012-11-12 50 views
2

我希望能夠用其他標籤快速包裝我的HTML的整個部分。我碰到這個了很多,當我意識到我需要一個外部的div在我的其他div的,就像這樣:在vim中用HTML標籤包裝部分

原始的HTML:

<div id='a'> 
    <img src='a.png'> 
</div> 
<div id='b'> 
    <img src='b.png'> 
</div> 

修改HTML:

<div id='Main'> 
    <div id='a'> 
     <img src='a.png'> 
    </div> 
    <div id='b'> 
     <img src='b.png'> 
    </div> 
</div> 

我可以使用matchit.vimsurround.vim,但我不認爲surround.vim包含單詞(即<div>),只是單個字符(即<),它也不縮進。

我現在想到的最接近的東西現在需要15-20按鈕按下。

+2

surround.vim的確支持這一點。它就在自述文件中,但vim.org似乎破壞了它。看到這裏:https://github.com/tpope/vim-surround/blob/master/README.markdown –

+0

@RandyMorris我知道它周圍的HTML標籤。但是自述文件指出它也縮進內部文本,它如何實現? – ZyX

+2

用'S'代替's'我相信。 –

回答

7

surround.vim可以用HTML標籤包圍,但它使用S從視覺模式,而不是ys和視覺不s,感謝@RandyMorris時,不會縮進只縮進。如果對ys的運動或使用的視覺選擇是linewise,則它還會在下一行和前一行(無縮進)中放入同一縮進的div。對於yss不這樣做,所以如果您真的想避免視覺模式,則必須使用[email protected]<div>j>>

更新:有g:surround_indentb:surround_indent選項。如果您設置了其中任何一個,surround.vim將使用=縮進周圍環境中的包圍文本,並且上面的ys與縮進不一致將是錯誤的,以及SS也將使用=以及)。需要filetype indent on和正確的縮進設置。

如果您未設置這些選項,您將看到第一段中描述的行爲:S無條件縮進。

+0

我使用surround.vim,並且正確包圍了標記和縮進。我也在我的vimrc中'縮進'和'設置autoindent'。 –

+0

@GaryWilloughby我會接受這個答案,如果你提到如何結合縮進,或mayary加里可以闡明這一點。 – puk

+0

@puk看我的更新。 – ZyX

3

是的,環繞聲的確是要走的路。假設你的光標在第一div

V%j%S<div id="Main"<CR> 

V5jS<div id="Main"<CR> 

做的伎倆。

根據上下文,整個事情甚至可以縮短爲:

Vat<div id="Main"<CR> 

<div id="Main"部分似乎很難跳過。

當然還有其他方法。

ZenCoding,例如,您可以使用CSS語法類似:

V5j<C-y>,div#Main<CR> 

我不知道有任何更快地得到你想要的。

TextMate的控制移瓦特是好的,這是肯定的,但它默認爲<p>,所以你不得不鍵入div id="Main"反正。