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.