在vim

2017-01-04 62 views
1

選擇多個連續的XML標記,我有以下XML文件:在vim

<outer> 
    <middle> 
    <inner>1</inner> 
    </middle> 
    <middle> 
    <inner>2</inner> 
    </middle> 
    <middle> 
    <inner>3</inner> 
    </middle> 
    <middle> 
    <inner>4</inner> 
    </middle> 
</outer> 

在那裏我會vat選擇整個middle2標籤。

現在有一種方法可以擴展此選擇以包含下一個middle標記(3)與某些組合鍵嗎?

我只對tagwise這樣做感興趣,也就是說,如果有一種組合總是可以獨立於下一個標籤的結構使用。

回答

0

vat選擇的第一個標籤塊CTRL後+ VĴ<c-v>j),這將包括在未來inner3

編輯:

對於新例如,您可以在vat之後按4$以獲取下面的標記塊。

編輯:

我寫了一個腳本ExpandTagBlock,其允許擴張相同 tagblock的按F4

nmap <silent> <F4> :set opfunc=ExpandTagBlock<CR>[email protected] 
vmap <silent> <F4> :<C-U>call ExpandTagBlock(visualmode(), 1)<CR> 

function! Check() 
    let [email protected]@ 
    if @@ =~# '\_s*<[^>]*\_.*</[^>]*>\_s*' 
     let str=substitute(str,'\_s*<[^>]*>\_.*\(<\/[^>]*>\)\_s*', '\1','g') 
     return str 
    else 
     return '' 
    endif 
endfunction 

function! ExpandTagBlock(type, ...) 
    let sel_save = &selection 
    let &selection = "inclusive" 
    let reg_save = @@ 

    if a:0 
     silent exe "normal! gvy" 
    elseif a:type ==# 'line' 
     silent exe "normal! '[V']y" 
    else 
     silent exe "normal! `[v`]y" 
    endif 
    let str=Check() 
    if str ==# '' 
     echohl ErrorMsg | echomsg "Selection not a Tag block !" | echohl None 
    else 
     silent exe "silent! normal! gv/".escape(str,'/')."/e\r" 
endif 

    let &selection = sel_save 
    let @@ = reg_save 
endfunction 

這裏是Demo

enter image description here


相同標記塊的擴大僅僅對現在向下進行。該腳本非常有資格被改進或修改。

+0

我猜你的意思是寫小寫'j'?那麼'J'就會加入線路。儘管如此,這只是線性工作,我改變了例子來澄清問題 – Chirlo

+0

對於你的新例子,你可以通過鍵入'3j'或'4 $'來擴展它。 –

0

Meninx的回答對於vanilla vim確實是正確的。以下假設你選擇這些標籤是因爲你想對他們做些什麼。如果vim有文本對象的附加定義,你可能根本不需要選擇它們。

但是,如果您定期編輯XML(或HTML等),則可能需要查看Tim Pope的插件,這些插件添加了括號,括號,引號,XML標籤的動作, 和更多。」這建立在vim的編輯風格基於「文本對象」(即單詞,句子,段落和標籤)的基礎上。

例如在vanilla vim中,01​​將「圍繞單詞改變」。使用下面提到的插件,您將可以執行諸如cs'<q>之類的操作,該操作將「用標籤<q>...</q>更改周圍的單引號」。

VIM環繞增加一般用途的議案爲「環境」,這是在所有的VIM點文件我見過的最常用的插件漂浮之一:

您還可以查看vim-ragtag,它增加了對XML,HTML,PHP等標籤的擴展支持,並增強了vim-surround。我不使用它自己,但它是一個集映射到C-X快捷方式,即C-X-<CR>將包裹「富」到:

<foo> 
^ 
</foo> 

另一個競爭者是machakann的VIM三明治。看看這裏:


如果沒有Vim的插件管理器,我建議使用junegunn's vim-plug

一旦VIM-插頭set up,安裝前兩個插件將作爲加入以下幾行,以你的.vimrc一樣容易:

Plug 'tpope/vim-surround' 
Plug 'tpope/vim-ragtag'