O %
operador Vim pula para parênteses, o comentário termina e mais algumas coisas. No entanto, ele não corresponde às tags XML (ou qualquer outra tag, com o melhor de meu conhecimento).
Qual é a melhor maneira de pular para a tag XML correspondente usando o Vim?
Nota: O que realmente quero fazer é duplicar uma seção em um arquivo XML sem procurar manualmente pela tag correspondente.
Respostas:
Existe um plugin do vim chamado matchit.vim. Você pode encontrá-lo aqui: http://www.vim.org/scripts/script.php?script_id=39 . Foi criado praticamente o propósito exato que você descreve.
Instale isso, coloque o cursor no corpo da tag (não a <>, caso contrário ela corresponderá àquelas) e pressione% para pular para a outra tag. Veja a página do script para descobrir o que mais ele combina.
fonte
runtime macros/matchit.vim
deve habilitá-lo e permitir%
a correspondência de tags XML.packadd! matchit
a.vimrc
para habilitá-lo. Leia mais:help matchit
Você pode fazer isso sem plugins adicionais:
Outra operação útil é: vit- selecionará o conteúdo da tag (interna).
Atualizar (graças a @elrado) Exemplo: vitopermitirá selecionar o conteúdo interno da tag e posicionar o cursor no início do texto selecionado.
Referência: /superuser/182355/how-can-i-select-an-html-tags-content-in-vim
Referência do Vim (obrigado a @Geek por anotar isso):
você terá:
fonte
cit
muda o i nterior do tag - apenas o conteúdo.cat
alterar a ll da marca - o conteúdo e um lso a própria tag, tanto abertura e fechamento.O OP afirmou que o que ele realmente queria fazer era copiar uma seção do XML sem precisar encontrar a tag correspondente. Isso é feito facilmente no modo normal com
yat<motion>p
, que puxa o texto para dentro e inclui as tags correspondentes e o cola.yit<motion>p
é quase o mesmo, mas não inclui as tags externas.O 'y' na string é obviamente o comando "yank" do modo normal. (
:help y
)a
oui
pode ser usado para seleção de objeto depois de um operador comoy
dentro de uma seleção visual. O símbolo apósa
oui
especifica o que deve ser selecionado. O tipo de objetot
usado aqui indica uma tag SGML. (:help object-select
)Obviamente,
<motion>
significa apenas mover-se para algum lugar através da sua escolha ep
coloca o texto arrancado nesse local.fonte
i
significa "dentro" (ou "interno").a
significa "a"?a
significa "todos".a
fica por aí . Faz mais sentido para mim.Apenas meu truque de usar "puxar", "selecionar objeto" (selecionar tag) e "pular para o último texto arrancado".
pular para a direita antes de fechar a tag
e
pular para a direita após abrir a tag
Nota: isso mudará o conteúdo do registro padrão
fonte