
Como posso configurar o Vim para que, quando eu alterar um membro de um par correspondente de tags HTML, o outro seja automaticamente alterado para corresponder?
Por exemplo: dado <span>content</span>
, quero mudar <span>
para <div>
, e então o fechamento </span>
muda automaticamente para </div>
. Idealmente, isso aconteceria ao retornar do modo de inserção para o modo normal, mas não haveria problema se eu tivesse que pressionar uma tecla especial para que isso acontecesse.
Responder1
O excelentesurround.vimtorna isso simples - com o cursor em qualquer lugar dentro da tag que você deseja alterar, no modo normal, digite cst<div>
( c
hange s
urrounding t
ag to <div>
). O nome da tag será alterado para "div" tanto na tag de abertura quanto na de fechamento, e você voltará ao modo normal.
Responder2
Aqui estão algumas etapas:
- Coloque o cursor na primeira tag.
- Selecione o código HTML externo pressionando: vat.
Pressione Escpara sair do modo visual e digite:
:'<,'<s/span/div/ :'>,'>s/span/div/
Observe que
:'>,'>s/span/div/
não funcionará corretamente se houver duas ocorrências da mesma tag de fechamento na mesma linha, pois sempre alterará a primeira. Para consertar, use::'>,'>s/.*\zsspan/div/
em vez disso. Ver:Como alterar a última ocorrência da string na linha?
Relacionado:
Responder3
O Vimir juntoplugin pode fazer isso:
Responder4
Com oSwapIt - Trocador de palavras-chave extensível, você pode definir grupos de tags que podem ser alternados via <C-a>
/ <C-x>
. Por exemplo, em ~/.vim/ftplugin/html_swapit.vim
:
SwapList layout p div span
Se você tiver tags de início e fim na mesma linha (e houver apenas uma desse tipo), poderá editar ambas através do meuPlug-in ChangeGlobally.
Existem também vários plugins “multicursores”, que permitem marcar determinadas palavras e editá-las todas de uma vez.