1. 程式人生 > >vim括號引號html標籤自動補全

vim括號引號html標籤自動補全

(我現在已經不用下面方法了,可使用 xptemplate 外掛 http://blog.csdn.net/zcube/article/details/42525973)

問題:怎樣在vim中實現花括號引號自動補全,包括html標籤?

解決辦法:只要把下面兩段程式碼貼上到~/.vimrc中,就可以實現括號超強補全

<!--括號引號補全程式碼{{{-->
" 括號引號補全
inoremap ( ()<Esc>i
inoremap [ []<Esc>i
inoremap { {<CR>}<Esc>O
inoremap ) <c-r>=ClosePair(')')<CR>
inoremap ] <c-r>=ClosePair(']')<CR>
inoremap } <c-r>=CloseBracket()<CR>
inoremap " <c-r>=QuoteDelim('"')<CR>
inoremap ' <c-r>=QuoteDelim("'")<CR>

function ClosePair(char)
	if getline('.')[col('.') - 1] == a:char
		return "\<Right>"
	else
		return a:char
	endif
endf

function CloseBracket()
	if match(getline(line('.') + 1), '\s*}') < 0
		return "\<CR>}"
	else
		return "\<Esc>j0f}a"
	endif
endf

function QuoteDelim(char)
	let line = getline('.')
	let col = col('.')
	if line[col - 2] == "\\"
		"Inserting a quoted quotation mark into the string
		return a:char
	elseif line[col - 1] == a:char
		"Escaping out of the string
		return "\<Right>"
	else
		"Starting a string
		return a:char.a:char."\<Esc>i"
	endif
endf
<!--}}}-->


<!--html標籤自動補全{{{-->
" html自動補全
autocmd BufNewFile *  setlocal filetype=html
function! InsertHtmlTag()
	let pat = '\c<\w\+\s*\(\s\+\w\+\s*=\s*[''#$;,()."a-z0-9]\+\)*\s*>'
	normal! a>
	let save_cursor = getpos('.')
	let result = matchstr(getline(save_cursor[1]), pat)
	"if (search(pat, 'b', save_cursor[1]) && searchpair('<','','>','bn',0,  getline('.')) > 0)
	if (search(pat, 'b', save_cursor[1]))
		normal! lyiwf>
		normal! a</
		normal! p
		normal! a>
	endif
	:call cursor(save_cursor[1], save_cursor[2], save_cursor[3])
endfunction
inoremap > <ESC>:call InsertHtmlTag()<CR>a<CR><Esc>O
<!--}}}-->

之所以這裡的括號補全程式碼中的函式實現反匹配
當打入(輸入內容),再按)系統會自動檢查前面是否已經有匹配的括號
如果有就不再鍵入),而是直接跳出

或許你得加:
set autoindent
set cindent


參考:
http://www.cnblogs.com/huanlei/archive/2012/04/02/2430153.html
http://blog.sina.com.cn/s/blog_01ea59580101hvth.html