vim 自动补全括号
sudo vim /usr/share/vim/vimrc
### sudo find / -name '*vimrc'
function! AutoPair(open, close)
let line = getline('.')
if col('.') > strlen(line) || line[col('.') - 1] == ' '
return a:open.a:close."\<ESC>i"
else
return a:open
endif
endf
function! ClosePair(char)
if getline('.')[col('.') - 1] == a:char
return "\<Right>"
else
return a:char
endif
endf
function! SamePair(char)
let line = getline('.')
if col('.') > strlen(line) || line[col('.') - 1] == ' '
return a:char.a:char."\<ESC>i"
elseif line[col('.') - 1] == a:char
return "\<Right>"
else
return a:char
endif
endf
function! RemovePairs()
let l:line = getline(".")
let l:previous_char = l:line[col(".")-1]
if index(["(", "[", "{"], l:previous_char) != -1
let l:original_pos = getpos(".")
execute "normal %"
let l:new_pos = getpos(".")
if l:original_pos == l:new_pos
execute "normal! a\<BS>"
return
end
let l:line2 = getline(".")
if len(l:line2) == col(".")
execute "normal! v%xa"
else
execute "normal! v%xi"
end
else
execute "normal! a\<BS>"
end
endfunction
function! RemoveNextDoubleChar(char)
let l:line = getline(".")
let l:next_char = l:line[col(".")]
if a:char == l:next_char
execute "normal! l"
else
execute "normal! i" . a:char . ""
end
endfunction
inoremap ) <ESC>:call RemoveNextDoubleChar(')')<CR>a
inoremap ] <ESC>:call RemoveNextDoubleChar(']')<CR>a
inoremap } <ESC>:call RemoveNextDoubleChar('}')<CR>a
inoremap <BS> <ESC>:call RemovePairs()<CR>a
inoremap ( <c-r>=AutoPair('(', ')')<CR>
inoremap ) <c-r>=ClosePair(')')<CR>
inoremap { <c-r>=AutoPair('{', '}')<CR>
inoremap } <c-r>=ClosePair('}')<CR>
inoremap [ <c-r>=AutoPair('[', ']')<CR>
inoremap ] <c-r>=ClosePair(']')<CR>
inoremap " <c-r>=SamePair('"')<CR>
inoremap ' <c-r>=SamePair("'")<CR>
inoremap ` <c-r>=SamePair('`')<CR>
### sudo find / -name '*vimrc'
function! AutoPair(open, close)
let line = getline('.')
if col('.') > strlen(line) || line[col('.') - 1] == ' '
return a:open.a:close."\<ESC>i"
else
return a:open
endif
endf
function! ClosePair(char)
if getline('.')[col('.') - 1] == a:char
return "\<Right>"
else
return a:char
endif
endf
function! SamePair(char)
let line = getline('.')
if col('.') > strlen(line) || line[col('.') - 1] == ' '
return a:char.a:char."\<ESC>i"
elseif line[col('.') - 1] == a:char
return "\<Right>"
else
return a:char
endif
endf
function! RemovePairs()
let l:line = getline(".")
let l:previous_char = l:line[col(".")-1]
if index(["(", "[", "{"], l:previous_char) != -1
let l:original_pos = getpos(".")
execute "normal %"
let l:new_pos = getpos(".")
if l:original_pos == l:new_pos
execute "normal! a\<BS>"
return
end
let l:line2 = getline(".")
if len(l:line2) == col(".")
execute "normal! v%xa"
else
execute "normal! v%xi"
end
else
execute "normal! a\<BS>"
end
endfunction
function! RemoveNextDoubleChar(char)
let l:line = getline(".")
let l:next_char = l:line[col(".")]
if a:char == l:next_char
execute "normal! l"
else
execute "normal! i" . a:char . ""
end
endfunction
inoremap ) <ESC>:call RemoveNextDoubleChar(')')<CR>a
inoremap ] <ESC>:call RemoveNextDoubleChar(']')<CR>a
inoremap } <ESC>:call RemoveNextDoubleChar('}')<CR>a
inoremap <BS> <ESC>:call RemovePairs()<CR>a
inoremap ( <c-r>=AutoPair('(', ')')<CR>
inoremap ) <c-r>=ClosePair(')')<CR>
inoremap { <c-r>=AutoPair('{', '}')<CR>
inoremap } <c-r>=ClosePair('}')<CR>
inoremap [ <c-r>=AutoPair('[', ']')<CR>
inoremap ] <c-r>=ClosePair(']')<CR>
inoremap " <c-r>=SamePair('"')<CR>
inoremap ' <c-r>=SamePair("'")<CR>
inoremap ` <c-r>=SamePair('`')<CR>
评论
发表评论