2010-07-28 3 views
3

Je ne sais pas si c'est possible, mais quelqu'un connaît-il un script de retrait qui soutiendra ce scénario?html indentant dans vim

(| est le curseur)

donné

<div>|<div> 

si je puis appuyez sur Entrée, je veux voir

<div> 
    | 
</div> 

au lieu de

<div> 
|<div> 

Répondre

1

Vous pouvez faire quelque chose comme ceci:

function! NewlineInTag() 
    let lnum = getline('.') 
    let cnum = col('.') 

    let chars = strpart(lnum, cnum - 2, 2) 
    if chars =~ '><' 
     return "\<CR>\<ESC>\<UP>$o" 
    else 
     return "\<CR>" 
    endif 
endfunction 

imap <CR> <C-R>=NewlineInTag()<CR> 
+0

a fini par légèrement modifier cette –

3

delimitMate prendra soin de ceci pour toi. Vous cependant besoin de deux paramètres supplémentaires ...

ajouter la>: < paire à la liste des fichiers html:

au FileType html let delimitMate_matchpairs = "(:),[:],{:},>:<" 

et lui dire quel modèle que vous souhaitez ajouter après l'insertion d'un

au FileType html let b:delimitMate_expand_cr = "\<CR>\<CR>\<Up>\<Tab>" 

(cette volonté, au lieu d'insérer deux a, insérer deux s, de presses, puis insérez un onglet)

+0

Notez que cela va probablement être supprimée dans les prochaines versions. Voir [ici] (http://github.com/Raimondi/delimitMate/commit/89cc59821753eec21eb050ee1ba8db671deac39d#L0L331). –

+0

Wow, merci pour le heads-up, Randy. – sleepynate

+0

voté ceci, mais a fini par aller avec la deuxième cause de réponse de ce commettre –

2

Nous avons fini d'aller avec brian Carpers réponse, modifiée que très légèrement

"fancy html indenting 
function! NewlineInTag() 
    let lnum = getline('.') 
    let cnum = col('.') 

    let chars = strpart(lnum, cnum - 2, 3) 
    if chars =~ '></' 
     return "\<CR>\<ESC>\<UP>$o" 
    else 
     return "\<CR>" 
    endif 
endfunction 

autocmd FileType eruby,html imap <CR> <C-R>=NewlineInTag()<CR>