sublime software for html vim surround

software - Cambia la etiqueta HTML en vim, pero manteniendo los atributos(envolvente)



html sublime text 3 emmet (5)

Digamos que tengo una etiqueta (y el cursor en *):

<h1 class="blah" id="moo">H*ello!</h1>

Quiero cambiarlo a:

*<h2 class="blah" id="moo">Hello</h2>

Es decir, cambiar el tipo de etiqueta, pero mantener todos los elementos.

Usando surround.vim, podría hacer:

cst<h2>

pero eso cambia el HTML a:

*<h2>Hello</h2>

¿Es solo cambiar la etiqueta posible, pero manteniendo todos los atributos? La documentación envolvente no parece contener nada como esto ...


En mi caso, probaría matchit.vim u text-object .

solución matchit.vim:

matchit.vim está incluido en vim.

source $VIMRUNTIME/macros/matchit.vim

y luego 0l%%lr2<Ctrl-o>llr20 .

solución de texto-objeto:

También puede evacuar el contenido html al registro antes de reemplazarlos.

dit:.s/h1/h2/g<Ctrl-o>P0


Puede usar cstt y se mostrará < en la parte inferior y escriba el nombre de la etiqueta sin >

En este caso, cstth2 y cstth2 enter.


Surround no tiene esto incorporado. Puede eliminar los atributos y luego usar <cr>" al escribir la etiqueta de reemplazo para recuperarlos, pero eso es un poco escaso.

Propongo un nuevo mapeo y función que automatizará esta tarea. Lo siguiente proporcionará el mapeo cse , también conocido como cambio del elemento circundante. Ponga esto en su archivo ~/.vimrc o tal vez ~/.vim/after/plugin/surround_change_element.vim si se siente excesivamente orangizado.

function! s:ChangeElement() execute "normal! vat/<esc>" call setpos(''.'', getpos("''<")) let restore = @" normal! yi> let attributes = substitute(@", ''^[^ ]*'', '''', '''') let @" = restore let dounmapb = 0 if !maparg(">","c") let dounmapb = 1 " Hide from AsNeeded exe "cn"."oremap > <CR>" endif let tag = input(''<'', '''') if dounmapb silent! cunmap > endif let tag = substitute(tag, ''>*$'', '''', '''') exe "normal cst<" . tag . attributes . ">" endfunction nnoremap cse :call <SID>ChangeElement()<cr>

Nota: esto ocultará algunos casos de entornos con e si tiene alguno creado a través de g:surround_101 o b:surround_101 . Si ese es el caso, cambie la forma de asignación cse a otra cosa tal vez csn para cambiar el nodo que lo rodea.

EDITAR

A partir del 22 de febrero de 2015 esta respuesta está fuera de fecha. Consulte la publicación de @Wojtek Kruszewski o :h surround-replacements para saber cómo hacer esto de forma nativa con sonido envolvente.


Tengo el complemento xml.vim ( https://github.com/othree/xml.vim ). Si también lo tuviste, tu requerimiento es bastante fácil.

Simplemente mueva el cursor a la etiqueta, presione <leader>c (minúscula c), luego ingrese el nuevo nombre de tag, solo se cambiará el nombre de la etiqueta.

Si presiona <leader>C (Big C), también cambia el nombre de la etiqueta / elemento, pero también se eliminan los atributos originales.


Se ha agregado la etiqueta de reemplazo mientras se mantienen los atributos a Surround.vim

cst<p> reemplaza la etiqueta completa, mientras que cst<p (sin el corchete de cierre) mantiene los atributos.