gVim的html标签自动闭合插件

用惯了dreamweaver,话说它的标签自动闭合功能还是很不错的。转而学习gVim之后,为它的强大功能与灵活的订制性所震撼。自然也想到了将dw的标签闭合功能引用过来.

网上资料并不多,在iteye上搜到了一篇文章(kenshin54.iteye.com/blog/858156)。下载来之后,果然好用。

然而很快发现了一点不方便之处,因我之前已引用了几个括号闭合的功能,使用这个标签闭合插件后,并没有出来效果。原因是后面多了个自动闭合的括号,那标签里的匹配便不灵了。

于是研究了下代码,虽然很少的代码,但对于我这个还不熟悉vim语法和函数的人,却需要花些功夫去理解。于是照原作者的代码,自己改动了下,既能兼容括号闭合,也不会因标签所在行后面有内容而略过自动闭合.

"to store cursor Position
let s:cursorPos = 0
"support <!-- close tag
function! EasyCloseTags()
	let nchr = getline('.')[col('.') - 1]
	let pchr = getline('.')[col('.') - 2]
	if pchr == "<"
		let tag = GetLastOpenTag("b:unaryTagsStack")
		if tag == ""
			return "/"
		else
			let s:cursorPos=col('.')-1
			if nchr == "-->"
				return "/".tag
			else
				return "/".tag."&gt;"
			endif
		endif
	else
		return "/"
	endif
endfunction

"set cursor to <tag>#cursor#</tag>
function! SetCursors()
    if s:cursorPos != 0
        let lineNum = line(".")
        call cursor(lineNum, s:cursorPos)
        let s:cursorPos = 0
    endif
    return ""
endfunction

"set up key '/' to trigger closeTag and setCursor function   
:inoremap / <c-r>=EasyCloseTags()<cr><c-r>=SetCursors()<cr></cr></c-r></cr></c-r>

closeTag.rar

有需要的朋友可以拿去了,不过,不敢保证没有问题,vim学习中...