在Vim中对HTML进行缩进

3

我不知道这是否可能,但有人知道是否有一个缩进脚本可以支持这种情况吗?

(| 是光标)

假设

<div>|<div>

如果我按下回车键,我希望看到:
<div>
  |
</div>

替代

 <div>
|<div>
3个回答

3
delimitMate会为您处理这个问题。但是,您需要两个额外的设置...
将“>:<”对添加到HTML文件列表中:
au FileType html let delimitMate_matchpairs = "(:),[:],{:},>:<"

在插入

</>

后,告诉它您想添加什么模式。

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

(这将会插入两个s而不是两个a,按上箭头键,然后插入一个制表符)

请注意,这个功能可能会在未来的版本中被删除。请参见此处 - Randy Morris
我投了这个赞,但最终选择了第二个答案,因为那个提交。 - Matt Briggs
似乎在delimitMate 2.6中不再起作用了。该脚本抱怨它期望delimitMate_expand_cr等于1或0。 - Eric Andres
正确。我似乎记得几年前与作者讨论过这个问题(或者至少读到了一篇有关此事的帖子)。现在它已经默认这样做,而只需要将变量设置为1即可。对于好奇者,它内部使用模式 <Esc>a<CR><Esc>zvO> - sleepynate

2

最终选择了Brian Carper的答案,只是稍作修改

"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>

1
你可以像这样做:
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>

最终我稍微修改了这个。 - Matt Briggs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接